Visual Studio 2010调试器不再在错误处停止

3
今天我在处理一个Windows应用程序时,发现错误信息不再像通常一样显示出来了。相反,调试器只是跳出该方法。输出窗口记录了异常,但通常的弹出跟踪窗口没有出现。
在其他项目中它可以正常工作,我已经将Dim i as Integer = "A"作为第一行放入代码以尝试引发错误,但它只是退出了该子程序。
你有什么想法如何解决这个问题?
3个回答

11
在 Windows 7 的64位版本中,调试器和Load事件之间存在一个错误的交互方式。在此期间,Windows会捕获并吞噬异常,而调试器无法检测到未处理的异常。你唯一能看到的是输出窗口中的“first chance”通知。Load事件处理程序将立即终止,程序会像什么都没发生一样运行,假设它没有绕过关键的初始化代码。这个漏洞已经存在了很长时间,并且被微软广泛知晓,显然很难修复。
你可以通过项目+属性、编译选项卡、向下滚动、高级编译选项按钮来解决这个问题。将目标 CPU 设置为 "AnyCPU"。另一种方法是使用“调试”+“异常”,勾选 CLR 异常上的 Thrown 复选框。另一种解决方法是将初始化代码放在构造函数中,而不是 OnLoad() 或 Load 事件中。只有当需要知道实际窗口大小时才真正需要使用 Load。
此漏洞只会在调试时出现。它不会在用户的计算机上发生。
更新:我在此帖子中对这个失误进行了详细说明。

7

在“调试->异常”下检查是否选中了公共语言运行时异常。


这个可行,但是它是一个hack吗?请看上面的帖子...我认为这可能与我今天添加的单元测试有关。 - baileyswalk

3

如果您的.suo文件被误删了(这个文件存储了解决方案的个人状态、设置、已展开/折叠的内容),您只有在突然发现必须点击“全部折叠”时才会真正注意到它已经丢失,当您打开解决方案时,它会重新创建该文件,但会使用默认设置。

如果是这种情况,请按CTRL + ALT + E并重新勾选CLR异常的断点复选框。


我刚刚检查了Thrown框,现在它会在错误处中断,但是在我的另一个项目中,未选中Thrown仍然会在错误处中断。无论如何保留这个选项有什么危害吗?我认为这与我今天添加的一个UnitTest有关,这是我第一次看到它们,但没想到会这样做。有更好的重新启用它的方法吗? - baileyswalk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接