2016-03-03 57 views
1

我倾向于认为这是不可能的。 我知道生成的二进制文件和它的相应部分的pdb文件在编译时绑定在一起。使用与二进制文件不同时生成的pdb文件进行调试。可能吗?

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

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


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

认为我记得我读一段时间,这是但可能利用这样的PDB,如果源代码是相同的:我认为这需要解析PDB,或纠正了一些时间戳值数据PDB自身内部或者类似的东西......无论如何。我可能确实是错的。

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

回答

1

只需从相同的源可能不会产生精确的结果重建PDB。考虑到环境是在同一时间更新的。你可能使用的编译器等

这就是说一个新的版本,有

.symopt+ 0x40 

为WinDbg,从而通过@blabb已经提到。

如果您更喜欢在Visual Studio中进行调试,那么这个工具会修改时间戳:Chkmatch

chkmatch -m <exe> <pdb> 

其拷贝从可执行的PDB的信息。这有点危险:如果你忘记这是一个修改过的PDB,那么你稍后可能会搜索不存在的错误。我建议

  • 保持原有的,不匹配的PDB
  • 创建每天

复制PDB,并修改它

  • 删除修改PDB调用批处理文件会提醒你一个批处理文件您的调试会话期间可能会得到不精确的结果。

  • 4

    .symopt + 0x40的(负载不匹配PDB)

    相关问题