我想要一个崩溃报告,所以我在App.xaml.cs中注册UnhandledException事件,如下所示。但是有两个问题:
有什么建议吗?
this.UnhandledException += App_UnhandledException;
private async void App_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
if (!hasHandledUnhandledException)
{
e.Handled = true;
_logger.Error("Unhandle exception - message = {0}\n StackTrace = {1}", e.Exception.Message, e.Exception.StackTrace);
await CrashHandler.ReportExceptionAsync(e.Exception.Message, e.Exception.StackTrace);
hasHandledUnhandledException = true;
throw e.Exception;
}
}
答案 0 :(得分:1)
确保只访问e.Exception
一次。在某些情况下,information about the stacktrace is lost the second time you access the property。将异常保存在变量中并直接使用该变量。另外,正如Panagiotis Kanavos在评论中所提到的,直接记录e.Exception.ToString()
以确保不会遗漏任何信息。这将包括消息,callstack和所有内部异常(您没有在当前代码中登录)。
private async void App_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
if (!hasHandledUnhandledException)
{
e.Handled = true;
var exception = e.Exception;
_logger.Error("Unhandled exception - {0}", exception);
await CrashHandler.ReportExceptionAsync(exception.Message, exception.StackTrace);
hasHandledUnhandledException = true;
throw e.Exception;
}
}
至于没有足够时间记录异常的问题,它由运行时控制,因此您无法对其进行任何操作。