【问题标题】:Exception won't be caught if I don't debug the application如果我不调试应用程序,将不会捕获异常
【发布时间】:2011-05-17 05:57:14
【问题描述】:

有两个DLL,A和B,在A.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);
}

点击OK按钮后DoSomeSth函数会出现异常 使用vs2005调试代码时,异常可以在B.DLL中捕获,但是如果我不调试直接运行应用程序,B.DLL中不会捕获异常,是什么原因?

【问题讨论】:

  • 哪里抛出了异常?代码在哪里?问题中没有足够的信息来回答。
  • 好问题,我可以重现这个。
  • 调试是指附加一个调试器,或者代码是在调试模式下编译,而不是发布?
  • @Theofanis Pantelides:在 VS 调试器中调试,是的。
  • @zespri 调试>异常>全部重置;并再次尝试异常。我们将从那里拿走它。

标签: c# debugging exception


【解决方案1】:

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

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

但是,如果您运行 Windows 窗体 应用程序与调试器,你做 没有捕捉到异常,因为你 使用 NativeWindow.DebuggableCallBack 方法。当您使用 NativeWindow.DebuggableCallBack 准时制 (JIT) 方法 调试器停止应用程序 正在运行。

【讨论】:

    猜你喜欢
    • 2019-03-13
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 2011-10-07
    相关资源
    最近更新 更多