从COM调用时,如何在托管代码中调试未处理的异常?

时间:2011-05-23 00:32:37

标签: c# .net debugging visual-studio-2005

我有一个C#.NET组件,它是从COM进程外的ActiveX exe中调用的。

我可以在我的COM exe上运行的Visual Studio 2005中启动调试器,它调用我的.NET组件。断点有效但打破未处理的“对象引用集”异常则不然。我试过以下无济于事:

  • 已检查VS Exceptions对话框中的所有CLR例外
  • 已启用“当异常跨越AppDomain或托管/本机边界时中断”
  • 在我的项目中启用了非托管代码调试
  • 已停用“仅我的代码”调试

2 个答案:

答案 0 :(得分:3)

我通常在托管代码的入口点添加对System.Diagnostics.Debugger.Launch;的调用。如果程序尚未处于调试模式,则将启动调试器。请记住,完成调试后需要删除此行,因为您不希望保持调用以在发行版中启动调试器。

答案 1 :(得分:1)

您可以运行非托管程序,然后附加到该程序,而不是使用F5运行编程:

对于Visual Studio 2005:

  • 使用Ctrl+F5
  • 从Visual Studio运行(不调试)非托管项目
  • 打开“附加到流程”对话框:调试 - > 附加到流程...
  • 点击附加到:选择按钮:选择...
  • 选择:调试这些代码类型:
  • 检查以下项目:托管原生
  • 点击确定
  • 可用流程
  • 中选择您的流程
  • 点击附加

这应该在非托管进程中启用托管和非托管调试。您现在可以设置断点或捕获托管代码中的第一次机会异常,假设您有符号。