如何等到远程.NET调试器附加

时间:2008-12-11 21:42:19

标签: .net debugging breakpoints remote-debugging

今天我遇到了一个问题,我需要远程调试一个程序。该程序是从另一个系统启动的,所以我真的没有机会在命令行上与它进行交互。我可以轻松改变它的来源。

我需要做的是让程序正常启动,然后等待我用调试器连接它。我无法想出办法让我开心。我找到了错误,但没有调试器的帮助。

while(true) { }

保持进程活着,然后我可以用调试器“设置下一个语句”,但它看起来很尴尬和粗鲁。

Console.ReadLine();

因为实际上没有控制台让我按输入,所以看起来很奇怪。 (它也没有用。设置下一个语句然后运行会带你回到ReadLine()等待。)

那么我可以在.NET / CLR / C#程序中插入什么样的代码来说“在这里等到我可以用调试器附加”?

6 个答案:

答案 0 :(得分:99)

您可以使用System.Diagnostics.Debugger.IsAttached属性来检查调试器是否附加到进程。此应用程序将等待连接调试器:

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");
        }
    }
}

答案 1 :(得分:16)

这听起来就像你需要的那样:

Debugger.Launch();

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

“启动并将调试程序附加到进程。”

答案 2 :(得分:6)

我不知道,因为我从来没有尝试过,但我想知道你是否可以使用System.Diagnostics.Debugger.Break()让它达到断点,然后等待调试器附加。我假设一个远程调试器可以工作,但我不确定并且目前无法访问我的家庭环境,在那里我可以轻松地模拟它并测试我的理论。有一个MSDN article讨论在ASP.Net应用程序中使用它,所以我想它会起作用。

答案 3 :(得分:2)

附加远程调试器与使用本地调试器完全相同。

首先,按常规做法:

System.Diagnostics.Debugger.Launch();

您将看到选择调试器的提示。此时执行被暂停,因此您可以附加远程调试器并从提示中选择“否”。

答案 4 :(得分:1)

Debug.Assert(true);
我猜也应该工作。顺便说一下,我有时也会遇到这个问题而且我做了

MessageBox.Show() 

:P:P

答案 5 :(得分:0)

设置超时,为您提供连接调试器的时间。

Thread.Sleep(30000);