5

未処理の例外 (任意のスレッドからスローされた) のスタック トレースをファイルに書き込むにはどうすればよいですか?

ハングしているアプリケーションをデバッグするためにこれが必要です。

4

4 に答える 4

4

AppDomain.UnhandledExceptionイベントを見てください。これはまさにあなたが必要としているもののようです。

于 2012-11-27T14:31:09.040 に答える
1

みなさん、ありがとうございましたが、Visual Studioからプログラムを実行すると、スレッドからの未処理の例外がスローされたときに.NETによってコンソールウィンドウに書き込まれるトレースの出力がコンソールウィンドウにリダイレクトされないことがわかりました。

Visual Studioとは別にプログラムを実行すると、リダイレクトされるだけです。したがって、このコードは、処理されない例外をスローするスレッドからのすべてのスタックトレースを確認するのに非常に適しています

Trace.Listeners.Clear();

        TextWriterTraceListener twtl = new TextWriterTraceListener(Path.Combine(Environment.CurrentDirectory, "logfile.txt"));
        twtl.Name = "TextLogger";
        twtl.TraceOutputOptions = TraceOptions.ThreadId | TraceOptions.DateTime | TraceOptions.Callstack;

        ConsoleTraceListener ctl = new ConsoleTraceListener(false);
        ctl.TraceOutputOptions = TraceOptions.DateTime;

        Trace.Listeners.Add(twtl);
        Trace.Listeners.Add(ctl);
        Trace.AutoFlush = true;
于 2012-11-27T15:00:02.830 に答える
0

AppDomain.UnhandledExceptionイベントをリッスンすることでこれを行うことができると思います。WPF の場合、Application.Current.Dispatcher.UnhandledExceptionもリッスンする価値があります。

于 2012-11-27T14:32:22.383 に答える
0

以下のように、ex.StackTrace によって catch ブロックでスタック トラックを取得できます。

try
{
   //Your code;
}
catch(Exception ex)
{
    string innerException = ex.InnerException;
    string stackTrac = ex.StackTrace;
    //Write this stackTrac to any file where you want
}
于 2012-11-27T14:51:17.160 に答える