7

我正在使用 C++/CLI 中的混合模式程序集。所有托管模式组装的 pdb 在混合模式组装成功时都会被加载,但本地 dll 和 pdb 不会被加载,即使本地 pdb 的信息显示在模块窗格中(即在 VS 调试->Windows->模块中)。

我正在使用本机 dll 并在 C++/CLI 代码的混合程序集中调用其导出的函数。在这里,函数被成功调用,但是本地 pdb 符号没有加载,本地代码中的所有断点都显示为空心圆圈,工具提示说没有为此加载任何符号。

我已经完成了所有工作,将 pdb 放置在托管进程启动的当前目录中;删除所有 obj 和 debug 文件夹并同时重新编译每个项目;我什至使用了 ChkMatch 实用程序,它显示 Exe 中的符号和相应的 pdb 匹配。

从托管(C++/LCI 混合模式)代码调用时,有什么方法可以启用本机代码的断点?

问候,

乌斯曼

4

1 回答 1

17

混合模式调试可能会被击中和错过,主要是错过。首先检查您是否确实启用了混合模式调试。在 C# 项目中,它是项目 + 属性、调试、启用非托管代码调试复选框。接下来,64 位进程不启用混合模式调试。如果您在 64 位操作系统上运行,请确保强制 .exe 在 32 位模式下运行。项目 + 属性,构建选项卡,平台目标 = x86。

接下来验证调试器在何处查找 .pdb 文件。在 Debug + Windows + Modules 窗口中,右键单击 DLL 并选择“符号加载信息”。最后的喘息是在非托管代码中使用 __debugbreak()。


更新:最新版本的 VS(从 VS2012 开始)有一个新的托管调试引擎,它与非托管调试引擎的兼容性不够。工具 > 选项 > 调试 > 常规,勾选“使用托管兼容模式”。它启用了旧版调试引擎,这是 VS2010 中最后使用的一个。

于 2010-07-24T16:35:24.107 回答