从另一个线程抛出异常时写入堆栈跟踪

时间:2012-11-27 14:29:04

标签: c# .net

如何将未处理异常(从任何线程抛出)的堆栈跟踪写入文件?

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

4 个答案:

答案 0 :(得分:4)

看看AppDomain.UnhandledException 事件。看来这正是你所需要的。

答案 1 :(得分: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;

答案 2 :(得分:0)

我相信你可以通过听AppDomain.UnhandledException事件来做到这一点。 在WPF的情况下,值得听Application.Current.Dispatcher.UnhandledException

答案 3 :(得分: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
}