74

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

私が必要としていたのは、プログラムが正常に起動し、デバッガーを使用してプログラムに接続するのを待つことでした。幸せになる方法を思いつくことができませんでした。私はバグを見つけましたが、デバッガーの助けはありませんでした。

while(true) { }

プロセスを存続させた後、デバッガーで「次のステートメントを設定」できましたが、ぎこちなく失礼に思えました。

Console.ReadLine();

Enterキーを押すためのコンソールが実際にはなかったので、入力するのは奇妙に思えました。(それも機能しませんでした。次のステートメントを設定してから実行すると、ReadLine() 待機に戻ります。)

では、「デバッガーでアタッチできるようになるまでここで待ってください」という .NET/CLR/C# プログラムにどのようなコードを挿入できますか?

4

6 に答える 6

135

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");
        }
    }
}
于 2009-02-16T09:49:40.157 に答える
24

これはまさにあなたが必要とするもののように聞こえます:

Debugger.Launch();

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

「デバッガを起動してプロセスにアタッチします。」

于 2010-09-14T17:45:52.887 に答える
6

試したことがないのでわかりませんがSystem.Diagnostics.Debugger.Break()、ブレークポイントにヒットさせてデバッガーがアタッチされるのを待つために使用できるかどうか疑問に思います。リモートデバッガーが機能すると思いますが、確かなことはわかりません。現在、自宅の環境にアクセスして、簡単にモックアップして理論をテストすることはできません. ASP.Netアプリケーションでの使用について話しているMSDNの記事があるので、うまくいくと思います。

于 2008-12-11T21:55:19.080 に答える
5

リモート デバッガーのアタッチは、ローカル デバッガーの使用とまったく同じように機能します。

まず、通常の操作を行います:

System.Diagnostics.Debugger.Launch();

デバッガーを選択するプロンプトが表示されます。この時点で実行が中断されるため、リモート デバッガーをアタッチし、プロンプトから [いいえ] を選択できます。

于 2013-01-14T11:57:37.990 に答える
-1

デバッガーをアタッチする時間を与えるタイムアウトを設定します。

Thread.Sleep(30000);
于 2008-12-11T21:55:24.073 に答える