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

Debugging with pdb files not generated at the same time as the Binary. Is it possible?

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

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

Visual Studio 忠实地告诉我,pbd 不符合我的二进制文件。 (当我不在良好的二进制文件中时,我总是感激它为我节省的所有时间)。


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

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

那么,即使这很难,有没有办法使用这些 pdb 文件,这些文件不是与二进制文件同时生成的,但具有相同的确切代码?

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

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

也就是说,有

.symopt+ 0x40

对于@blabb 已经提到的 WinDbg。

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

chkmatch -m <exe> <pdb>

它将信息从可执行文件复制到 PDB。这有点危险:如果您忘记这是一个修改过的 PDB,您以后可能会寻找不存在的错误。我推荐

  • 保留原始的、不匹配的 PDB
  • 正在创建用于复制和修改 PDB 的批处理文件
  • 每天删除修改过的PDB

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