我该如何将未处理异常(来自任何线程)的堆栈跟踪写入文件?
我需要这个来帮助调试一个挂起的应用程序。
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;
你可以通过 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
}
我相信你可以通过监听 AppDomain.UnhandledException 事件来实现这一点。如果是 WPF ,还值得同时监听 Application.Current.Dispatcher.UnhandledException。