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

本文关键字:托管代码 异常 处理 调试 调用 COM 何调试 | 更新日期: 2023-09-27 17:57:27

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

我可以在Visual Studio 2005中启动调试器,该调试器在我的COM exe上运行,该COM调用我的.NET组件。断点有效,但在未处理的"对象引用集"异常上中断则不起作用。我尝试了以下方法无济于事:

  • 已检查"VS 例外"对话框中的所有 CLR 异常
  • 启用"当异常跨越应用程序域或托管/本机边界时中断"
  • 在我的项目上启用了非托管代码调试
  • 禁用"只是我的代码"调试

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

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

不是

使用 F5 运行编程,而是运行非托管程序,然后附加到它:

对于 Visual Studio 2005:

  • 使用 Ctrl+F5 从 Visual Studio 运行(而不是调试(非托管项目
  • 打开"附加到进程"对话框:调试 ->附加到进程...
  • 单击附加到:选择按钮选择...
  • 选择:调试以下代码类型:
  • 检查以下项目:托管本机
  • 单击"确定">
  • 从可用流程中选择您的流程
  • 单击附加

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