我正在使用 C++/CLI 中的混合模式程序集。在混合模式组装中成功时,所有托管模式组装的 pdb 都会被加载,但即使本机 pdb 的信息显示在“模块”窗格中(即在 VS 调试 -> Windows -> 模块中),也不会加载本机 dll 和 pdb。
我正在使用本机 dll 并在 C++/CLI 代码中的混合程序集中调用其导出函数。在这里,函数被成功调用,但本机 pdb 符号未加载,本机代码中的所有断点都显示为空心圆圈,并且工具提示显示没有为此加载符号。
我已经完成了所有操作,将 pdb 放置在托管进程启动的当前目录中;删除所有 obj 和 debug 文件夹并同时重新编译每个项目;我什至使用了 ChkMatch 实用程序,它显示 Exe 中的符号与相应的 pdb 匹配。
有没有办法在从托管(C++/LCI 混合模式)代码调用时启用本机代码的断点?
Regards,
Usman
混合模式调试有时会出现失误,但大多数情况下会出现失误。首先检查您是否确实启用了混合模式调试。对于 C# 项目,它是“项目 + 属性”、“调试”、“启用非托管代码调试”复选框。接下来,不为 64 位进程启用混合模式调试。如果您在 64 位操作系统上运行,请确保强制 .exe 在 32 位模式下运行。项目 + 属性,构建选项卡,平台目标 = x86。
接下来验证调试器在何处查找 .pdb 文件。在“调试”+“Windows”+“模块”窗口中,右键单击 DLL 并选择“符号加载信息”。最后喘息的是在非托管代码中使用 __debugbreak() 。
更新:VS 的最新版本(从 VS2012 开始)有一个新的托管调试引擎,与非托管调试引擎不够兼容。工具 > 选项 > 调试 > 常规,勾选“使用托管兼容模式”。它启用旧版调试引擎,即 VS2010 中最后使用的引擎。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)