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

我需要的发生是该方案正常启动,然后等待我去重视它与调试器。我不能想出一个办法做到这一点,使我高兴。我确实找到了这个错误,但没有调试器的帮助。

while(true) { }

不停过程活着,然后我可以“设置下一条语句”使用调试器,但它似乎尴尬和粗鲁。

Console.ReadLine();

好象奇键入因为实际上不是控制台为我按在输入即可。 (它没有工作,要么。设置下一条语句,然后运行带你回的ReadLine()等待。)

那么,什么样的代码,我可以插入,说:“在这里等着,直到我可以用调试器附加”?

一个.NET / CLR / C#程序
有帮助吗?

解决方案

可以使用 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");
        }
    }
}

其他提示

这听起来像你需要的东西:

Debugger.Launch();

http://msdn.microsoft.com/ EN-US /库/ system.diagnostics.debugger.launch.aspx

“推出并附加调试器的过程。”

我不知道,因为我从来没有尝试过,但我不知道是否可以使用System.Diagnostics.Debugger.Break()才能有它打一个断点,然后等待调试器附加。我想远程调试器会的工作,但我不知道肯定,目前没有访问我的家庭环境,我可以很容易地嘲笑它,并测试我的理论。这里有一个 MSDN文章谈论使用它在ASP.Net应用程序,所以我想象这是可行的。

附加远程调试器的工作原理完全相同使用本地调试器。

首先,执行通常的:

System.Diagnostics.Debugger.Launch();

您会看到一个提示来选择调试器。在这一点上的执行被挂起,所以从而可以连接远程调试器和从所述提示选择“否”。

Debug.Assert(true);

也应该工作,我猜。顺便说,我也面临这一proble在时间和我

MessageBox.Show() 

:P:P

设置了超时,让您的时间来连接调试程序。

Thread.Sleep(30000);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top