Paz*_*azO 5 debugging symbols windbg
我在调试 DLL 时遇到问题,该 DLL 在构建后过程中已重命名:WinDBG 无法加载正确的符号(pdb 文件)。
示例:
原始文件名为:abc.dll
创建的 PDB 名为:abc.pdb
在构建后过程中,DLL 被重命名为“ab.DLL”。
由于某种原因,在调试时我可以看到模块显示为“a_b.dll”(连字符被下划线替换,不知道为什么会发生这种情况)。此外,WinDBG 无法加载其符号。
我试过ld a_b /f abc,也试过将 PDB 重命名为“a_b.pdb”,然后调用 .reload /f /i a_b,但这也不起作用。
所有这一切都发生在我的Release构建中,它被设置为添加调试信息并创建 PDB,就像它一样。
PDB 的名称是 DLL 的一部分。重命名 DLL 不会更改其内容,因此重命名 PDB 也不起作用。相反,保留原来的名称。
确保您的符号设置正确,例如使用 Microsoft 符号和您自己的符号:
.symfix c:\debug\symbols
.sympath+ c:\path_to\myproject\bin\Release
.reload
Run Code Online (Sandbox Code Playgroud)
另外,不必担心 WinDbg 中的模块名称。它替换了一些特殊字符,但不会影响符号加载。如果您在加载符号时仍然遇到问题,请打开符号调试输出
!sym noisy
Run Code Online (Sandbox Code Playgroud)
这应该显示 WinDbg 尝试从中加载符号的路径和文件名。检查您的位置是否包含在内。如果没有,请通过添加.sympath+。完成后,关闭符号调试
!sym quiet
Run Code Online (Sandbox Code Playgroud)
该命令相当于
.symopt+ 0x80000000 *** noisy
.symopt- 0x80000000 *** quiet
Run Code Online (Sandbox Code Playgroud)