我在尝试调试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’,然后调用.reload / f / i a_b,但这也无法正常工作.所有这些发生在我的Release版本中,它被设置为添加debug-info并创建PDB,就像它一样.
解决方法
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