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

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

我需要做的是让程序正常启动,然后等待我用调试器连接到它。我想不出一个能让我开心的方法。我确实找到了漏洞,但是没有调试器的帮助。

while(true) { }

让进程保持活动状态,然后我可以用调试器“设置 next 语句”,但这似乎有些笨拙和粗鲁。

Console.ReadLine();

打字似乎很奇怪,因为实际上没有一个控制台让我按 进来。(它也没有起作用。设置 next 语句,然后 run 将您带回 ReadLine () wait

那么我可以将什么样的代码插入到。NET/CLR/C # 程序,说“在这里等待,直到我可以附加一个调试器”?

32847 次浏览

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

设置超时,使您有时间附加调试器。

Thread.Sleep(30000);
Debug.Assert(true);

顺便说一下,我有时也会遇到这个问题

MessageBox.Show()

校对: P: P

可以使用 系统,诊断,调试器,附件属性检查调试器是否附加到进程。此应用程序将等待,直到附加了调试器:

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

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

附加远程调试器的工作方式与使用本地调试器完全相同。

首先,像往常一样:

System.Diagnostics.Debugger.Launch();

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