我有一个简单的WinForms应用程序,用于输入测试用例。自从我将此应用程序升级到.NET 4.0并向标签页控件添加了一个新的标签页以便针对XSD架构验证XML之后,应用程序一直在随机崩溃。我一直无法重现异常。
我的QA人收到的错误是通用的Windows消息:
TestCaseViewer遇到问题需要关闭。对于给您带来的不便,我们深表歉意。
为了尝试解决实际错误,我将以下代码添加到Main方法程序的开头:
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException += Application_ThreadException;
事件处理程序如下所示:
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
try
{
MessageBox.Show(e.Exception.ToString(), @"Thread Exception",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
finally
{
Application.Exit();
}
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
var ex = (Exception)e.ExceptionObject;
MessageBox.Show(ex.ToString(), @"Unhandled Exception",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
finally
{
Application.Exit();
}
}
不幸的是,这没有任何帮助,无论如何,错误继续以一种产生未处理错误的方式继续这样做。
有人可以给我任何关于捕获此异常的其他想法吗?
答案 0 :(得分:10)
尝试将以下内容添加到您的app.config
<runtime>
<!-- the following setting prevents the host from closing when an unhandled exception is thrown -->
<legacyUnhandledExceptionPolicy enabled="1" />
</runtime>
答案 1 :(得分:2)
如果您正在使用Visual Studio,则可以将其设置为中断所有未处理的异常,甚至是抛出异常的任何时间,无论是否是它由您的代码处理。
要执行此操作,请从“Debug”菜单中选择“Exceptions”。你会得到一个如下所示的对话框:
如果您真的想要认真,请尝试检查所有方框。然后,从您的QA人员那里找出触发异常的确切操作,并在开发环境中的调试器下运行时完全重现这些操作。每当抛出异常时,Visual Studio都会中断,您将看到有问题的代码行以及完整的堆栈跟踪。