当另一个线程抛出异常时,编写堆栈跟踪

5

我该如何将未处理异常(来自任何线程)的堆栈跟踪写入文件?

我需要这个来帮助调试一个挂起的应用程序。

4个回答

4

1
谢谢大家,但我发现当我从Visual Studio运行程序时,.NET写入控制台窗口的跟踪输出(当任何线程抛出未处理的异常时)并没有重定向到控制台窗口。
只有在我单独运行程序时才会重定向。因此,这段代码非常适合查看抛出未处理异常的任何线程的完整堆栈跟踪。
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;

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
}

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接