在我的App.xaml.cs
中,我具有这些代码来捕获异常并将其记录
public App()
{
SetupExceptionHandlingInApp();
// other codes
}
private void SetupExceptionHandlingInApp()
{
this.DispatcherUnhandledException += (s, e) =>
{
e.Handled = true;
//LOGGING CODE HERE
this.Shutdown(-1);
};
}
[STAThread]
public static void Main()
{
SetupExceptionHandlingInMain();
//other codes
}
private static void SetupExceptionHandlingInMain()
{
AppDomain.CurrentDomain.UnhandledException += (s, e) =>
{
//LOGGING CODE HERE
Environment.Exit(1);
};
System.Windows.Forms.Application.ThreadException += (s, e) =>
{
//LOGGING CODE HERE
Environment.Exit(1);
};
TaskScheduler.UnobservedTaskException += (s, e) =>
{
//LOGGING CODE HERE
};
}
在大多数情况下,我可以捕获异常并将其记录下来。但是应用程序有时在执行时崩溃,而且我找不到导致崩溃的异常的记录错误。
除了上述方法之外,我是否还缺少其他方法来捕获异常?我看了一些有关SO的文章,但几乎他们在上面使用了这些方法。
log4net可以正常工作,因为我可以看到所有的ERROR和INFO日志。
编辑
按照Panagiotis Kanavos的建议,我发现了错误:
应用程序:xxx.exe
框架版本:v4.0.30319
说明:运行时.NET的IP地址为547541C4(54380000)的编码为80131506的处理程序。
翻译
应用程序:xxx.exe
框架版本:v4.0.30319
描述:由于内部错误导致进程终止 IP地址为547541C4(54380000)的.NET运行时,退出代码为80131506。
答案 0 :(得分:0)
也许您有一个异常破坏了进程的状态?来自documentation:
从.NET Framework 4开始,不会为以下事件引发此事件 破坏进程状态的异常,例如堆栈 溢出或访问冲突,除非事件处理程序是 安全至上并具有 HandleProcessCorruptedStateExceptionsAttribute属性。
也许您可以临时指定您的处理程序对安全性至关重要,以便能够在调试期间捕获异常。