C# 从COM调用托管代码时,如何调试未处理的异常?
我有一个C.NET组件,它是从进程外的COM ActiveX exe调用的 我可以在Visual Studio 2005中启动调试器,该调试器在调用.NET组件的COM exe上运行。断点起作用,但在未处理的对象引用集异常上中断则不起作用。我尝试了以下方法,但没有成功: 已检查VS exceptions对话框中的所有CLR异常 启用异常跨越AppDomain或托管/本机边界时的中断 在我的项目上启用非托管代码调试 仅禁用我的代码调试C# 从COM调用托管代码时,如何调试未处理的异常?,c#,.net,debugging,visual-studio-2005,C#,.net,Debugging,Visual Studio 2005,我有一个C.NET组件,它是从进程外的COM ActiveX exe调用的 我可以在Visual Studio 2005中启动调试器,该调试器在调用.NET组件的COM exe上运行。断点起作用,但在未处理的对象引用集异常上中断则不起作用。我尝试了以下方法,但没有成功: 已检查VS exceptions对话框中的所有CLR异常 启用异常跨越AppDomain或托管/本机边界时的中断 在我的项目上启用非托管代码调试 仅禁用我的代码调试 您可以运行非托管程序,然后附加到它,而不是使用F5运行编程:
您可以运行非托管程序,然后附加到它,而不是使用F5运行编程: 对于Visual Studio 2005: 使用Ctrl+F5从Visual Studio运行而不是调试非托管项目 打开“附加到进程”对话框:调试->附加到进程。。。 单击“附加到:选择”按钮:选择。。。 选择:调试以下代码类型: 检查以下项目:托管、本机 单击“确定” 从可用流程中选择您的流程 单击“附加”
这将在非托管进程中同时启用托管和非托管调试。现在,您可以在托管代码中设置断点或捕获首次出现的异常,前提是您有符号。我通常要做的是添加对System.Diagnostics.Debugger.Launch的调用;在托管代码的入口点。如果程序尚未处于调试模式,这将启动调试器。请记住,在完成调试后需要删除此行,因为您不希望保留在发布版本中启动调试器的调用。在VS exceptions对话框中选中所有CLR异常时,您使用的是user unhandled列还是抛出列?这只是猜测,但我怀疑COM/托管互操作代码会处理异常,以便将它们转换为合适的HRESULT值。我认为你是对的,弗兰克-COM正在处理例外情况。我发现了这一点,但不确定如何设置IGLOBALOPTIONS这起作用了!这表明我使用了错误的流程。我正在附加到调用托管代码的COM组件的父级,我本应该附加到COM ActiveX exe本身。