我有一个来自目标应用程序崩溃的mindmp文件.我是否可以为某个版本的软件重建dll/pdb文件并正确加载windbg符号?
我的问题是我们的pdb文件仅保留用于主要版本(不幸的是).这是一个每日构建,我可以自己重建,但我会因错误而被绊倒.
使用!sym noisy on:"图像标题与内存图像标题不匹配."
DBGENG: C:\...\XXX.dll image header does not match memory image header. DBGENG: XXX.dll - Partial symbol image load missing image info DBGHELP: Module is not fully loaded into memory. DBGHELP: Searching for symbols using debugger-provided data. DBGHELP: C:\...\XXX.pdb - mismatched pdb
注意我用dll构建了pdb,它们来自同一个RELEASE目录(我应该构建调试吗?)
这些是发布版本(因为版本构建安装在目标上并且崩溃)我应该以某种方式使用调试构建dll来获取更多符号信息吗?
该ChkMatch工具是专为这个确切的情况.只要你有原始的.EXE,就可以重新编译源代码(使用相同的编译器和编译器设置)并修补新的.PDB以匹配旧的.EXE.
在此示例中,OriginalExecutable.exe是不再具有.PDB文件的可执行文件,RebuiltPDB.pdb是通过重建原始源生成的文件.
chkmatch -m OriginalExecutable.exe RebuiltPDB.pdb
现在,只要这两个文件具有原始名称,调试器就应该接受它们作为匹配对.
根据我的经验可能不是.
如果你有确切的构建目录并使用完全相同的编译器设置构建,那么这可能会起作用.您绝对无法从调试版本加载版本崩溃转储中的符号.
您需要打开'load anything'选项:.symopt + 0x40以使windbg忽略时间戳差异.