首页 >后端开发 >C++ >VS2010为什么不显示64位Winforms应用程序中的未手动异常消息?

VS2010为什么不显示64位Winforms应用程序中的未手动异常消息?

Susan Sarandon
Susan Sarandon原创
2025-02-01 22:01:09544浏览

VS2010 64位WinForms应用未显示未处理异常消息:一个难题

在使用C#和.NET Framework 4在VS2010中创建新的Windows Forms应用程序时,用户遇到一个关于未处理异常的异常行为。在Form1_Load处理程序中添加特定代码后,预期在某一行出现的未处理异常消息没有显示。相反,代码执行跳过该行没有任何错误,应用程序继续运行。

这种特殊的行为归因于32位代码通过wow64模拟层与64位Windows 7交互的方式。问题在于此层拦截来自响应64位窗口管理器生成的通知的代码的异常。结果,调试器无法识别和进入异常。

为了解决这个问题,提出了几种解决方法:

将平台目标设置为AnyCPU并取消选中“首选32位”

这种方法将应用程序更改为以64位进程运行,消除了wow64模拟层及其相关的异常问题。但是,它可能会影响“编辑并继续”功能,并且对于依赖于32位代码的情况可能不可行。

其他解决方法

  • 在“调试”>“异常”中为CLR异常启用“已抛出”复选框,强制调试器停止在抛出异常的代码行。
  • 在Load事件处理程序中实现带有failfast处理的try/catch块。
  • 在Main()中设置Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)以禁用调试模式下的异常捕获。
  • 重新评估Load事件处理程序中代码的必要性,考虑使用替代事件处理程序或构造函数来放置适当的代码。
  • 升级到Windows 8或更高版本,其中已解决wow64问题。

Why Doesn't VS2010 Show Unhandled Exception Messages in 64-bit WinForms Apps?

以上是VS2010为什么不显示64位Winforms应用程序中的未手动异常消息?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn