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