调试托管代码时如何调试非托管代码

21
我正在开发的.NET 3.5应用程序由多个解决方案组成。其中一些解决方案包含托管代码(C#),而其他解决方案包含非托管代码(C ++)。编写在C#中的方法与编写在C ++中的方法进行通信。我试图跟踪这些不同函数之间的依赖关系,并尝试在包含我的C ++函数的解决方案上设置断点。其中一个C#解决方案是启动项目。我以调试模式运行此解决方案,期望我的非托管代码中的断点会被命中,但实际上什么都没有发生。有人能指导我使用Visual Studio IDE调试这些混合应用程序的过程吗?
谢谢
3个回答

27

默认情况下,托管项目只启用托管调试器,没有考虑到同一解决方案中存在非托管项目。如果想要同时调试两个项目,需要显式启用非托管代码调试。

  • 右键单击项目并选择属性
  • 转到“调试”选项卡
  • 勾选“启用非托管代码调试”

谢谢Jared。如果我的非托管代码在一个解决方案中,而我的托管代码在另一个Visual Studio解决方案中,我需要从两个解决方案中运行调试器才能触发断点吗?我按照你的建议做了,但仍然无法触发断点。 - sc_ray
你正在编译 C++ 类的调试版本吗? - iain
7
如果你要附加到一个进程:在“附加到进程”框中,点击“选择”,并选中“托管代码”和“本机代码”两个框。 - Raphaël Saint-Pierre
1
小的补充...在VS2013中,文本现在显示为“启用本机代码调试”。 - AKoran
@RaphaëlSaint-Pierre 谢谢你的提醒。那是缺失的部分。我们有一个.NET 4.0项目,所以我们选择了“Managed (v4.0)”和“Native”,它运行得很好。 - Jerameel Resco

4
  1. 进入托管项目属性。
  2. 右键单击并转到调试选项卡。
  3. 在该部分下有一个名为启用调试器的部分。
  4. 勾选"启用本机代码调试"选项。

然后您就可以调试本机代码了。祝你好运!!!

请参考下面附加的带有红色矩形标记的图像。

enter image description here


2
在Visual Studio 2019中,启用该选项的步骤如下:
  • 右键单击项目并选择属性
  • 进入配置下的调试子菜单
  • 从“调试器类型”下拉列表中选择“混合”

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