据我了解,目前使用远程调试器的唯一方法是启动目标应用程序,然后通过Visual Studio附加到它。是否有一种方式可以从程序一开始就捕获所有断点?
我的程序中有需要调试的代码,但我永远无法快速地附加调试器以捕获执行的代码。
据我了解,目前使用远程调试器的唯一方法是启动目标应用程序,然后通过Visual Studio附加到它。是否有一种方式可以从程序一开始就捕获所有断点?
我的程序中有需要调试的代码,但我永远无法快速地附加调试器以捕获执行的代码。
如果你能更改代码,尝试在应用程序的起始点注入以下代码行:
System.Diagnostics.Debugger.Launch();
当程序执行到这一行时,它会提示您附加调试器,等待您的响应。由于您正在使用远程调试器,所以此时应该能够附加调试器,然后取消对话框。希望这可以帮助到您。
System.Diagnostics.Debugger.Launch();
吗?这是一个没有参数的方法调用,像任何语句一样需要在末尾加上分号。 - rory.ap解决方案
System.Diagnostics.Debugger.Launch
对我也没用。不过,我设法解决了我的问题,在我的应用程序启动时写入以下内容:
while (!System.Diagnostics.Debugger.IsAttached)
System.Threading.Thread.Sleep(100);
这样应用程序将一直等待,直到调试器连接上。
#ifdef DEBUG
和endif
中,不会干扰发布版本,并且在我调试我的机器时可以无缝运行。但是当我需要远程调试时,它只是等待。谢谢! - ecthpublic partial class MainWindow : Form
{
public MainWindow()
{
// To allow you time to attach a remote debugger ...
MessageBox.Show("Please attach debugger");
InitializeComponent();
...
对我来说正确的解决方案是答案的结合。
while循环将检查Visual Studio是否附加了调试器,并在它被附加时退出循环。
System.Diagnostics.Debugger.Launch();
while (!System.Diagnostics.Debugger.IsAttached)
{
System.Threading.Thread.Sleep(100);
}