我有一个WinForms应用程序,它使用Application.UnhandledException来显示一个对话框,提示用户报告错误。当应用程序发布并独立运行时,它可以正常工作(除了明显的问题,即有一个未处理的异常浮动)。
为了测试对它的更改,我一直试图在点击按钮时抛出异常。不幸的是,调试器妨碍了。它将在异常中中断(这在其他情况下不是问题,因为我想知道某些内容是错误的)并且不让我继续进入UnhandledException处理程序,而是告诉我每次单击“继续”按钮时都不会处理异常。我已经尝试禁用中断任何异常,特定类型的异常和选项屏幕中的Just My Code选项无效。
有没有办法禁用此行为?
根据要求,下面的Repro代码。它来自一个标准的,通用或花园的WinForms应用程序,在启动表单上只有一个按钮(ThrowButton)。默认情况下,在创建项目时启用应用程序框架。
Form1.vb的
Public Class Form1
Private Sub ThrowButton_Click(sender As Object, e As EventArgs) Handles ThrowButton.Click
Throw New Exception
End Sub
End Class
ApplicationEvents.vb的
Namespace My
Partial Friend Class MyApplication
Private Sub MyApplication_UnhandledException(sender As Object, e As ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException
MsgBox("Application event")
End Sub
End Class
End Namespace
我还在驱动器上放了一个解决方案的副本,以防有用。我在上传之前对其进行了扫描,但显然无法保证在此之后会发生什么。 https://drive.google.com/file/d/0By6VJrYK_X0-QklFWWYtSDBPblU/view?usp=sharing
答案 0 :(得分:1)
在OP编写用于下载的VB.NET代码之前,给出了C#代码的答案。可能它仍然对某人有用。如果您不同意,请将其标记为非答案。
C#行为遵循MSDN steps for exception dispatching,其在步骤3中说明:
...但是正在调试该进程,系统第二次通知调试器。
考虑像
这样的代码static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
throw new Exception("Help! I am unhandled!");
}
private static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Console.WriteLine("Caught unhandled exception.");
Console.WriteLine(e.IsTerminating ? "Terminating" : "Not terminating");
}
我说的是预期Visual Studio的行为。
同样的问题不仅发生在Visual Studio中,而且发生在WinDbg中(运行相同的可执行文件):
0:000> .exr -1
ExceptionAddress: 750bc42d (KERNELBASE!RaiseException+0x00000058)
ExceptionCode: e0434352 (CLR exception)
ExceptionFlags: 00000001
NumberParameters: 5
Parameter[0]: 80131500
Parameter[1]: 00000000
Parameter[2]: 00000000
Parameter[3]: 00000000
Parameter[4]: 713e0000
0:000> !pe
Exception object: 02573148
Exception type: System.Exception
Message: Help! I am unhandled!
InnerException: <none>
StackTrace (generated):
SP IP Function
0038F0DC 001D04B4 UnhandledExceptionHandler!UnhandledExceptionHandler.Program.Main(System.String[])+0x6c
StackTraceString: <none>
HResult: 80131500
异常标志告诉我们这是第二次机会异常。