2012-03-27 152 views
17

据我现在的理解,使用远程调试程序的唯一方法是启动目标应用程序,然后通过Visual Studio附加到它。有没有办法从程序的一开始就捕获所有的断点?我的程序中有需要调试的代码,并且我永远无法将调试器连接得足够快以捕获执行代码。Visual Studio在应用程序启动时进行远程调试

+0

@HaraldDutch在这里描述了一个很好的解决方案:http://stackoverflow.com/questions/19512041/remote-debugging-how-to-start-the-debugging-process-on-a-different-computer – eFloh 2016-06-23 07:51:39

回答

13

如果你可以改变的代码,尝试注入这行代码在您的应用程序的起点:

System.Diagnostics.Debugger.Launch(); 

当这条线被击中它会提示你连接一个调试器,有效地等着你回复。由于您正在使用远程调试器,因此您应该能够在该位置进行连接,然后取消对话框。希望这可以帮助。

+0

好的答案。谢谢! – Tim 2012-03-28 12:16:10

+1

不应该是'System.Diagnostics.Debugger.Launch();'?这是一个没有参数的方法调用,并且像任何语句一样在末尾需要分号。 – 2016-07-14 20:01:29

3

使用Visual Studio Pro 2010构建.NET 4应用程序,这不适用于我。

显然,这是一个已知的bug:

https://connect.microsoft.com/VisualStudio/feedback/details/611486/debugger-launch-is-now-crashing-my-net-application-after-upgrading-to-net-4-0

A(有点哈克)解决方法这是为我工作的那一刻只是到了该应用扔了一个MessageBox()在一开始主窗口初始化:

public partial class MainWindow : Form 
{ 
    public MainWindow() 
    { 
     // To allow you time to attach a remote debugger ... 
     MessageBox.Show("Please attach debugger"); 

     InitializeComponent(); 
     ... 

现在,您可以在闲暇时附加VS远程调试器,然后在消息框中单击“确定”。

丑但功能。

7

解决方案

System.Diagnostics.Debugger.Launch 

并没有为我工作,要么。不过,我设法解决我的问题,在我的应用程序中编写启动以下:

while (!System.Diagnostics.Debugger.IsAttached) 
    System.Threading.Thread.Sleep(100); 

这样的应用程序将等待,直到调试程序连接。

+0

这是一个很好的解决方案。在'''#ifdef DEBUG'''和'''endif''中打包,不会干扰发布版本在我的机器上进行调试时完美无瑕。但是当我需要远程调试时,它只是等待。谢谢! – ecth 2018-02-01 07:46:45

相关问题