如何从我的C++/CLI代码进入未受管控的C++库

12
我在我的解决方案中有以下三个项目: 1. C#库 2. C++/CLI托管代码 3. C++非托管代码
我确实在我的C#项目中勾选了“启用非托管代码调试”,并以Debug/Win32模式构建了这两个C++项目。但是,当我在任何非托管方法的调用上按F11时,它会显示一些随机/错误的代码然后退出,我无法进入非托管代码。
因为我的单元测试通过,所以我知道我的非托管代码确实被执行了。
我缺少什么?

1
你是否有未托管代码的 .pdb 文件,以便您可以进入调试? - Steven Behnke
你可以尝试启动托管进程并暂停它(通过任何方式),在非托管项目中设置断点,然后选择“调试->附加进程”,选择托管进程并继续托管进程。 - Philipp
@Steven:是的,我确实看到了vc90.pdb。 - Arne Lund
@Arne:你试图进入哪些函数?vc90是Visual Studio 2008的Visual C运行时。它包括标准C库,但并没有太多其他东西。 - Steven Behnke
2个回答

10

我遇到这个问题时,通常是出现以下情况之一:

1)未启用非托管代码调试选项。你已经解决了这个问题。

2)以x64或Any CPU编译EXE(有人说x64可行,但实际上不行)。我认为你已经解决了这个问题。

3)“仅限我的代码”开关有时会对非托管代码调试造成麻烦(工具-选项-调试器-仅限我的代码)。

4)C++项目设置中的调试选项不正确。

5)缺少、损坏或不匹配的PDB文件。你可以尝试在调试器中运行时在C++代码中设置断点来检查这个问题。如果断点变成一个空心圆圈,那么你的调试信息有问题。同时,检查输出窗口,它应该告诉你哪些符号被加载。


对我来说,我认为“仅限我的代码”可能是问题的一部分。 - Carl Walsh

4
我曾经看到过类似问题的发生(即从本地C ++转换为C ++ / CLI),通常是由于调试器不能真正意识到它应该调试本地代码和托管代码。
对我来说,通常在启动项目的配置属性 -> 调试中将调试器类型从“自动”设置为“混合”可以解决这个问题。

我从“自动”切换到“混合”,但这并没有帮助我。 - Arne Lund
我也是。我的断点被触发了,但是在本地变量或监视窗口中没有任何变量信息。 - Scott Hutchinson
我也遇到了这个问题。如果我只是使用F5调试或者附加到一个C# EXE,VS就不想加载混合调试器。每次调试时,我都需要指定我想要本机和.NET调试器。 - Carl Walsh

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