![]() |
1
8
根据我的经验,可能不会。 如果您有确切的生成目录并使用 完全相同 编译器设置,这样就可以了。您肯定不能从调试构建中加载符号来对抗发布崩溃转储。 您需要打开“加载任何内容”选项:.symopt+0x40以使windbg忽略时间戳差异。 |
![]() |
2
11
这个 ChkMatch 实用程序是为这个精确的场景而设计的。 只要有原始的.exe文件,就可以重新编译源文件(使用相同的编译器和编译器设置),并修补新的.pdb以匹配旧的.exe文件。 在这个例子中, 原始可执行文件.exe 是不再具有.pdb文件的可执行文件,以及 重建PDB 是通过重建原始源而产生的。
现在,只要这两个文件有它们的原始名称,调试器就应该接受它们作为匹配对。 |
![]() |
3
2
如果您仍然拥有编译图像所用的确切源代码,则重新生成它,生成一个新的PDB文件,然后指示windbg在打开崩溃转储时强制加载此PDB—在我的实践中,它曾经工作过一次。 |
![]() |
4
1
pdb文件通过一个guid和一个“age”(序列号)绑定到它们的exe文件。它们嵌入到exe和pdb中。在每个完整构建上重新生成guid,并在每个增量构建上更改“年龄”。 调试器使用这些来确保它正在为exe文件查找正确的pdb。 我不知道史蒂文曼提到的“chkmatch”工具,但我怀疑它是通过修补guid/age使它们匹配来工作的。 |
![]() |
5
0
这对道格来说太晚了,但为了任何遇到这个问题的人,另一条线索( Is it possible to load mismatched symbols in Visual Studio? )指出了一种让windbg接受不匹配的.pdb文件的方法
|