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

7
我有一个C++解决方案。启动项目是一个exe。在解决方案中,有一些针对.NET Framework 2.0的C# dll文件被注册为COM互操作。当我在C#代码中设置断点时,我会得到带有"No native symbols in symbol file"的空心红色断点。
我已经尝试将"启动调试器类型"(Project Property Pages -> Debugging -> Debugger Type)设置为混合模式,该模式调用COM方法的启动项目。
我已经检查了Windows - Modules下的Debug。它已加载我的dll,并且符号状态为"No native symbols in symbol file"。
虽然这不是世界末日,因为如果我先使用"Start Without Debugging"再使用"Attach to Process"(更改"Attach To:"为"Managed (v2.0, v1.1, v1.0) code, Native code"),那么我就可以在C++代码和C#代码中都设置断点。
所以我有了我的解决方法,但我认为如果我可以通过附加进程来实现它,我应该能够只通过调试来实现它。
如何通过"Debug -> Start Debugging"来设置C#断点?

怀疑是否有可行的方法,我尝试了相同的方法,并花了数小时尝试,最终使用了附加到进程的方法,这个方法运行良好。 - SinisterMJ
好的,我没有使用“附加到进程”功能的问题,只是有些情况下你不能离开它,因为你认为“肯定有其他方法”。 - Liam
1
我也有这个问题,我猜根本问题在于“混合”选择了Native + Managed(v4.0),因此无法从启动设置中选择Native + Managed(v2.0)。 - GS - Apologise to Monica
3个回答

4

我能够通过以下方式在VS2008中从C++项目中调试我的C# dll:

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

在您的C#项目属性中,在Debug选项卡中,将“启动外部程序”设置为您的C++项目可执行文件。


1
对我来说非常好用!谢谢! - Andrey Buran

2

我知道这可能有点老了,但我找到了一个实用的解决方案来解决这个问题。

当我使用一个使用C# COM对象的C++应用程序时,我遇到了同样的问题。我在Visual Studio的C++和C#端尝试了几个设置。没有什么帮助,直到我尝试手动启动调试器。

你可以使用

Debugger.Launch();

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

祝好


1

我不确定这是否有帮助,但我们经常使用C#和C++。我发现将C++项目和C#项目放在同一个解决方案中,并在C#项目中启用“本机调试”功能是可行的。然后我就能够在调试时在它们之间来回跳转。


我在同一个解决方案中有两个项目,在VS2010中,我已经在所有C#项目上设置了“启用非托管代码调试”,但仍然无法正常工作。我猜测由于启动项目是一个C++ exe,所以调试器仅设置为本机模式,尽管我在C++项目属性中将调试器类型设置为混合模式。 - Liam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接