如何等待,直到远程.NETdebugging器连接

今天我碰到一个问题,我需要远程debugging一个程序。 该程序是从另一个系统启动的,所以我实在没有机会在命令行上与之交互。 我可以很容易地改变它的来源。

我需要发生的是程序正常启动,然后等待我用debugging器附加到它。 我不能想出办法让我开心。 我确实发现了错误,但没有debugging器的帮助。

while(true) { } 

保持进程活着,然后我可以用debugging器“设置下一个语句”,但它似乎尴尬和粗鲁。

 Console.ReadLine(); 

由于实际上没有一个控制台让我按下input ,所以看起来很奇怪。 (它也行不通,设置下一个语句,然后运行,让你回到ReadLine()等待。)

那么,我可以在.NET / CLR / C#程序中插入什么types的代码,说:“等到这里,直到我可以附加一个debugging器”?

您可以使用System.Diagnostics.Debugger.IsAttached属性来检查debugging器是否附加到进程。 这个应用程序将一直等到一个debugging器被连接:

 using System; using System.Diagnostics; using System.Threading; namespace DebugApp { class Program { static void Main(string[] args) { Console.WriteLine("Waiting for debugger to attach"); while (!Debugger.IsAttached) { Thread.Sleep(100); } Console.WriteLine("Debugger attached"); } } } 

这听起来像你所需要的:

 Debugger.Launch(); 

http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.launch.aspx

“启动并附加一个debugging器进程。”

我不知道,因为我从来没有尝试过,但我不知道是否可以使用System.Diagnostics.Debugger.Break()为了让它打到一个断点,然后等待一个debugging器附加。 我假设一个远程debugging器可以工作,但是我不确定,现在还不能进入我的家庭环境,在那里我可以很容易地嘲弄它并testing我的理论。 有一个MSDN文章谈论在ASP.Net应用程序中使用它,所以我想它会工作。

 Debug.Assert(true); 

也应该工作我猜。 顺便说一下,我也有时遇到这个问题

 MessageBox.Show() 

:P:P

设置一个超时,让您有时间附加debugging器。

 Thread.Sleep(30000); 

连接远程debugging程序与使用本地debugging程序完全相同。

首先,照常做:

 System.Diagnostics.Debugger.Launch(); 

你会看到提示selectdebugging器。 此时暂停执行,所以您可以附加远程debugging器,并从提示中select“否”。