代码之家  ›  专栏  ›  技术社区  ›  Clinton Pierce

如何等待远程.NET调试器连接

  •  51
  • Clinton Pierce  · 技术社区  · 17 年前

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

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

    while(true) { }
    

    Console.ReadLine();
    

    打字似乎很奇怪,因为实际上没有控制台供我按下

    那么,我可以在.NET/CLR/C#程序中插入什么样的代码,上面写着“在这里等待,直到我可以附加调试器”?

    6 回复  |  直到 14 年前
        1
  •  132
  •   Daniel Richardson    17 年前

    你可以使用 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");
            }
        }
    }
        2
  •  23
  •   Martin Sherburn    15 年前

    Debugger.Launch();
    

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

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

        3
  •  6
  •   abatishchev Karl Johan    14 年前

    我不知道,因为我从来没有试过,但我想知道你是否可以用 System.Diagnostics.Debugger.Break() MSDN article

        4
  •  5
  •   ya23 devoured elysium    13 年前

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

    首先,做通常的事情:

    System.Diagnostics.Debugger.Launch();
    

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

        5
  •  1
  •   Sudarsan Srinivasan Sudarsan Srinivasan    17 年前
    Debug.Assert(true);
    

    我想这也行。顺便说一句,我有时也会面临这个问题,我确实如此

    MessageBox.Show() 
    

    :P:P

        6
  •  -1
  •   abatishchev Karl Johan    14 年前

    设置超时,以便有时间连接调试器。

    Thread.Sleep(30000);