通过COM从C ++解决方案调试C#dll

时间:2012-12-20 14:56:04

标签: c# c++ visual-studio-2010 com .net-2.0

我有一个C ++解决方案。启动项目是一个exe。在解决方案中,有一些C#dll(针对.NET Framework 2.0)已注册COM interop。当我在C#代码中放置一个断点时,我得到了一个带有"No native symbols in symbol file"

的空心红色断点

我尝试在调用COM方法的启动项目中将Project Property Pages -> Debugging -> Debugger Type设置为Mixed。

我已查看Debug -> Windows -> Modules。它已加载我的dll,符号状态为"No native symbols in symbol file"

这不是世界末日,因为如果我执行Debug -> Start Without Debugging然后Debug -> Attach to Process,请将Attach To:更改为Managed (v2.0, v1.1, v1.0) code, Native code。然后我在C ++代码和C#代码中点击了断点。

所以我有我的解决方法,但我认为如果我可以通过附加到进程来做到这一点 - 我应该能够通过调试来做到这一点。

如何通过执行Debug -> Start Debugging

来点击我的C#断点

3 个答案:

答案 0 :(得分:4)

我能够通过执行以下操作从VS2008中的C ++项目调试我的C#dll:

在C ++项目的属性中,转到配置属性 - >调试。将“调试器类型”设置为“混合”。 “Attach”应设置为No。

在C#项目属性中,在Debug选项卡中,将“Start External Program”设置为C ++项目的可执行文件。

答案 1 :(得分:2)

我知道它有点旧,但我找到了解决这个问题的实用解决方案。

使用使用C#COM-Object的C ++应用程序时遇到了同样的问题。我在C ++和C#端的Visual Studio中尝试了几个设置。在我尝试手动启动调试器之前没有任何帮助。

您可以使用

Debugger.Launch();

在C#DLL上手动启动调试器。我知道这不是最好的,而是一种实用的方法。在以后的生产环境中,您必须删除调试器启动功能:)。

此致

答案 2 :(得分:1)

我不确定这是否有帮助,但我们使用C#和C ++工作很多。我发现这可以通过将C ++项目和C#项目放在同一个解决方案中并在C#项目中启用“本机调试”来实现。然后我可以在调试时在它们之间来回跳转。