1. ホーム
  2. .net

リモートの.NETデバッガが接続されるまで待機する方法

2023-10-18 16:34:43

質問

今日、私はプログラムをリモートデバッグする必要がある問題に遭遇しました。 プログラムは別のシステムから起動されたので、私は本当にコマンドラインでそれを操作する機会がありません。 しかし、私はそのソースを簡単に変更することができました。

私が必要としたのは、プログラムが正常に開始され、その後、私がデバッガでそれにアタッチするのを待つことでした。私は、満足のいくような方法を思いつきませんでした。 私はバグを見つけましたが、デバッガーの助けは必要ありませんでした。

while(true) { }

プロセスを存続させ、そしてデバッガで "set next statement" することができましたが、それはぎこちなく無作法に思えました。

Console.ReadLine();

実際に押すべきコンソールがなかったので、入力するのが奇妙に思えました。 を入力します。 を押すためのコンソールがなかったからです。 (それもうまくいかなかった。 Set next文→runで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");
        }
    }
}