C# 沉默的例外,
我在64位中遇到了这种奇怪的静默异常问题。 这是什么原因造成的? 我想了解为什么会出现这种情况,建议的解决方案是什么C# 沉默的例外,,c#,exception-handling,64-bit,C#,Exception Handling,64 Bit,我在64位中遇到了这种奇怪的静默异常问题。 这是什么原因造成的? 我想了解为什么会出现这种情况,建议的解决方案是什么 大体上: try { Application.Run(new Form1()); } catch (Exception ex) { MessageBox.Show("Error"); } private void Form1_Load(object sender, Even
try
{
Application.Run(new Form1());
}
catch
(Exception ex)
{
MessageBox.Show("Error");
}
private void Form1_Load(object sender, EventArgs e)
{
throw new Exception("oh no!");
}
为了加载表单,您的代码将调用一个内核函数来创建表单的窗口,而这个内核函数将通过发送一条调用
OnLoad
方法的消息来调用您的代码。如果您在该方法中抛出异常,异常处理机制将引导调用堆栈返回内核模式边界
在x86上,异常可以通过此边界返回到原始调用方。在x64上,它在到达边界时停止,无法继续。在XP64和Vista中,异常被吞没(忽略),而带有声明与Win7兼容的清单的64位应用程序将在发生这种情况时崩溃。要获取其他操作系统或64位Win7上32位应用程序的崩溃行为,请参阅
对于在x64上作为内核模式回调调用的任何事件处理程序,都会发生这种行为。
不幸的是,Visual Studo团队对此无能为力,这是操作系统设计的结果。有关此问题的所有反馈都应提交给Windows团队;然而,Windows团队认为这是“正确”的操作系统设计,并认为x86的行为“不正确”
Haha。不错的微软。请就此联系其他团队,但他们不会修复它,因为他们认为第三个团队错误地实现了它。实际上,第二篇文章对问题和解决方案都进行了非常好和深入的解释。显然有一个修补程序(在您提供的链接中链接到).user271077:很复杂:)阅读页面顶部的第一个链接了解所有详细信息