visual-c++ - 混合模式程序集未加载 native C++ pdb 的符号

标签 visual-c++ c++-cli breakpoints mixed-mode

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

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

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

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

问候,

乌斯曼

最佳答案

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

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

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

关于visual-c++ - 混合模式程序集未加载 native C++ pdb 的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3325588/

相关文章:

c++ - deque.push_front() 给出错误 "expression must have class type"

c++ - IntelliSense 无法打开源文件

c++ - 关于windows窗体中多线程和后台工作线程的一些问题

.net - C++/CLI : Catching all (. NET/Win32/CRT) 异常

C++ 公共(public)语言运行时支持 [.Net?]

java - 调试intellij时模拟返回

c++ - 为什么 Visual C++ 不在特定函数中命中断点或单步执行?

c++ - Visual C、WinSock HTTP Req 和非 Windows

css - 来自所有断点的资源是一次加载还是仅在使用时加载

c - 如何使用 VC++ 编译器刷新 .C 程序中的标准输入设备?