使用与二进制文件同时生成的pdb文件进行调试。可能吗?

时间:2016-03-03 14:54:48

标签: visual-studio debugging windbg pdb

我倾向于认为这是不可能的。 我知道生成的二进制文件及其对应的pdb文件在编译时绑定。

今天我必须尝试帮助调试产品的旧版本的转储,显然pbd已经在另一个日期生成了。

Visual Studio忠实告诉我pbd与我的二进制文件不对应。 (而且我总是非常感激地感谢它,因为当我不在好的二进制文件时,它为我节省了所有时间)。

<小时/> 但是,这次问题不一样:我确实想使用与编译时无关的pdb文件。

我记得我曾经读过,如果源代码是相同的,有可能利用这样的pdb:我认为它涉及解析pdb,或者纠正一些时间戳值数据在pdb本身或类似的东西......无论如何。我可能真的错了。

所以,即使它很难,有没有办法使用这些pdb文件,这些文件不是与二进制文件同时生成的,而是使用相同的代码?

2 个答案:

答案 0 :(得分:4)

.symopt + 0x40(加载不匹配的pdb)

答案 1 :(得分:1)

简单地从同一来源重建PDB可能无法产生准确的结果。考虑到同时更新环境。您可能使用较新版本的编译器等。

那就是说,有

.symopt+ 0x40

对于@blabb已经提到的WinDbg。

如果您更喜欢在Visual Studio中进行调试,可以使用此工具修改时间戳:Chkmatch

chkmatch -m <exe> <pdb>

将可执行文件中的信息复制到PDB。这有点危险:如果你忘了这是一个修改过的PDB,你可能会在以后找到不存在的bug。我推荐

  • 保留原始的,不匹配的PDB
  • 创建用于复制PDB并修改PDB的批处理文件
  • 每天删除修改后的PDB

调用批处理文件会提醒您在调试会话期间可能会得到不准确的结果。