混合模式程序集无法加载本机C++ pdb的符号

7

我正在使用C++/CLI处理混合模式程序集。当成功加载托管模式汇编的pdb时,所有托管模式汇编都会被加载,但是即使在模块窗格(即在VS Debug->Windows->Modules中)中显示了本地pdb的信息,本地dll和pdb仍然没有被加载。

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

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

有没有办法在从托管(C++/LCI混合模式)代码调用时启用本地代码的断点?

谢谢,

Usman


移除标签'winpdb'。Winpdb是一个Python调试器--其名称特别令人困惑。 - Codie CodeMonkey
1个回答

18
混合模式调试可能有时候成功,但大多数情况下是不成功的。首先要检查是否已启用混合模式调试。从 C# 项目中,选择 项目 + 属性,调试,启用非托管代码调试复选框。接下来,64 位进程不支持混合模式调试。如果您在 64 位操作系统上运行,请确保强制 .exe 在 32 位模式下运行。项目 + 属性,生成选项卡,平台目标 = x86。
接下来,验证调试器查找 .pdb 文件的位置。从 调试 + 窗口 + 模块 窗口,右键单击 DLL 并选择“符号加载信息”。最后一步是在非托管代码中使用 __debugbreak()。
更新: 最近的 VS 版本(从 VS2012 开始)具有新的托管调试引擎,与非托管调试引擎不兼容。工具 > 选项 > 调试 > 通用,勾选“使用托管兼容模式”。它会启用传统的调试引擎,即 VS2010 中最后使用的那个。

自 .NET Framework 4 开始,64 位混合模式调试已经可用。 - empty

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