VS2008调试器不会在未处理的异常中断
我的vs调试器有一个奇怪的问题。 当在vs调试器下运行我的程序时,调试器不会中断未处理的异常。 相反,控制返回到VS,就像程序正常退出一样。 如果我查看输出选项卡,那么在线程终止之前会列出第一次执行的任务。
我了解如何使用“调试”菜单中的“例外”框。 我有检查未处理的异常中断。 如果我检查发生特定的exeption的第一次机会异常,调试器将停止。
但是,我的理解是调试器也应该停止任何'未处理的异常'。 这不是为我做的。
以下是我的输出选项卡的最后几行:
A first chance exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll
The thread 0x60c has exited with code 0 (0x0).
The program '[3588] ALMSSecurityManager.vshost.exe: Managed' has exited with code -532459699 (0xe0434f4d).
我不明白为什么这个异常在未处理时被标记为“第一次机会”异常。
我相信0xe0434f4d退出代码是一个通用的COM错误。
有任何想法吗?
地铁。
如果您使用的是64位操作系统,那么您很可能会被导致异常消失的操作系统级行为所困扰。 重现它的最可靠的方法是创建一个新的WinForm应用程序,它只是在OnLoad中引发异常; 它似乎不会被抛出。 看看这些:
首先是我从谷歌(在这个线程没有帮助之后)发现的,并且该线程引导我到以下两个。 第二个是最好的解释,第三个是Microsoft bug / ticket(重申了这是“按设计”行为)。
因此,基本上,如果您的应用程序在返回堆栈时抛出一个遇到内核模式边界的异常,它将在该边界处被阻塞。 Windows团队决定处理这个问题的最佳方式是假装处理异常; 继续执行,就好像一切正常完成。
哦,这发生在任何地方。 调试与发布无关。 .Net vs C ++是无关紧要的。 这是操作系统级别的行为。
想象一下,你必须将一些关键数据写入磁盘,但它在核心模式边界的错误一侧失败。 其他代码稍后会尝试使用它,如果幸运的话,您会发现数据有问题......但是为什么? 我敢打赌,你永远不会认为你的应用程序没有写入数据---因为你预计会抛出一个异常。
抽搐。
当我阅读关于在“例外...”对话框中有两个复选框的答案时,我回去并再次打开对话框。 我只有一列复选框 - 打破“投掷”。
事实证明,如果您没有在调试选项中选中“启用只是我的代码(仅管理)”,则“用户未处理”列将不会显示在“例外”对话框中。
我选择了“启用只是我的代码”选项,并验证“异常”对话框中的“用户未处理”复选框已被选中用于所有异常类别。
我能够获得未处理的异常,以便进入一个会话的调试器。 但是当我第二天回来的时候,行为和以前一样。
地铁。
Ctl-D,E弹出“例外”窗口。 你可以设置你想要的例外,并且不想打破。
链接地址: http://www.djcxy.com/p/27969.html