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

时间:2011-05-17 05:57:15

标签: c# debugging exception

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

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中捕获该异常,这是什么原因?

1 个答案:

答案 0 :(得分:3)

这是known issue。根据知识库文章:

  

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

     

但是,如果您运行Windows窗体   使用调试器的应用程序   因为你没有抓住异常   使用   的 NativeWindow.DebuggableCallBack   方法。当你使用   的 NativeWindow.DebuggableCallBack   方法,即时(JIT)   调试器停止应用程序   运行