如果我不调试应用程序,则不会捕获异常

本文关键字:捕获异常 应用程序 调试 如果 | 更新日期: 2023-09-27 17:56:44

在A中有两个DLL,A和B.DLL有一个像这样的表单类:

namespace AAA
public class AForm: Form
{
  ...
  private void btnOK_Click(object sender, EventArgs e)
  {
      DoSomeSth();
  }
}

在 B.DLL 中,有一些这样的代码

try
{
   AForm dlg = new AAA.AForm();
   dlg.ShowDialog();    
}
catch(Exception ex)
{
   MessageBox.Show(ex.Message);
}

单击"确定"按钮后,功能DoSomeSth中将出现异常当我使用 vs2005 调试代码时,异常可能会在 B.DLL 中捕获,但是如果我在没有调试的情况下直接运行应用程序,则异常不会在 B.DLL 中捕获,原因是什么?

如果我不调试应用程序,则不会捕获异常

这是一个已知问题。根据知识库文章:

当您运行 Windows 窗体时 不使用的应用程序 调试器,您使用 要捕获的 NativeWindow.CallBack 方法 异常并防止 意外退出的程序 (崩溃)。在 NativeWindow.CallBack 方法,你 填充异常消息的依据 使用标准例外对话框。

但是,如果您运行 Windows 窗体 带有调试器的应用程序,您可以执行 没有捕获异常,因为您 使用 NativeWindow.DebuggableCallBack 方法。当您使用 NativeWindow.DebuggableCallBack 方法,实时 (JIT) 调试器停止应用程序 运行。