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 回答