質問

私はリモートデバッグプログラムに必要とされた

今日、私はこの問題に遭遇しました。プログラムは、別のシステムから発売されたので、私は本当に、コマンドライン上でそれと対話する機会を持っていません。でも、私は簡単にそのソースを変更することができます。

私は何が起こるために必要なことは、プログラムが正常に起動した後、私は、デバッガとそれに接続するのを待つためでした。私は私を幸せに作られ、それを実行する方法を考え出すことができませんでした。私は、しかし、デバッガの助けを借りずに、バグを見つけました。

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);
scroll top