Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从COM调用托管代码时,如何调试未处理的异常?_C#_.net_Debugging_Visual Studio 2005 - Fatal编程技术网

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

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运行编程:

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

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

已检查VS exceptions对话框中的所有CLR异常 启用异常跨越AppDomain或托管/本机边界时的中断 在我的项目上启用非托管代码调试 仅禁用我的代码调试
您可以运行非托管程序,然后附加到它,而不是使用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本身。