未処理の例外 (任意のスレッドからスローされた) のスタック トレースをファイルに書き込むにはどうすればよいですか?
ハングしているアプリケーションをデバッグするためにこれが必要です。
AppDomain.UnhandledExceptionイベントを見てください。これはまさにあなたが必要としているもののようです。
みなさん、ありがとうございましたが、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;
AppDomain.UnhandledExceptionイベントをリッスンすることでこれを行うことができると思います。WPF の場合、Application.Current.Dispatcher.UnhandledExceptionもリッスンする価値があります。
以下のように、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
}