【问题标题】:VS IDE and WinDbg says that it cannot find symbol fileVS IDE 和 WinDbg 说找不到符号文件
【发布时间】:2020-04-13 18:35:26
【问题描述】:

所以,我主要使用 VS IDE 进行调试。我得到了一个转储文件并试图对其进行事后分析。所有的 DLL 都加载了它们各自的 PDB,除了一个,我不知道为什么。此信息有助于确定转储文件是否以某种方式损坏,或者客户端是否有损坏的 DLL。

我也尝试过使用 WinDbg 来调试这个,我有一些但不是很多经验。我将符号路径更新到具有正确构建的 PDB 以及它也可能与之匹配的其他一些目录的目录。我加载了转储文件,但同一个 DLL 没有找到匹配的 PDB 文件。

所以问题是,是什么阻止了特定 PDB 与转储文件不匹配,我如何才能找出这些信息是什么?

【问题讨论】:

  • Debug > Windows > Modules,右键单击 DLL 并选择 Symbol Load Information。
  • @LexLi,哪个什么?
  • "所有的 DLL 都加载了它们各自的 PDB,除了一个",那么是哪一个?
  • @LexLi,是我们应用程序的一部分,也是我们有源代码的一部分?我对你在问什么感到困惑。
  • @HansPassant,符号加载信息显示 已跳过检查位置。之前在此位置找不到符号文件。 这没什么帮助。

标签: debugging windbg visual-studio-debugging pdb-files


【解决方案1】:

符号具有哈希和时间戳。两者都需要匹配才能加载符号。在 WinDbg 中,有一个选项可以强制加载不匹配的符号 (.symopt+ 0x40)。 Visual Studio 没有这样的选项,所以你需要使用chkmatch 来使符号匹配。请注意,这是一个危险的操作,因为它会修改 PDB 文件。完成后,您应该创建一个备份副本并删除修改后的文件。

如果您无法确定转储文件中究竟是什么可执行文件,请尝试.writemem <FileName> <Range> 并附上可执行文件的起始地址及其大小。另见How to retrieve assembly from a raw memory dump?

为了检查转储文件是否损坏,我只知道 WinDbg 附带的DumpChk。 AFAIK,文件格式不允许检测单字节损坏或类似情况。

我将符号路径更新到包含 PDB 的目录

你应该set up a symbol server。使用符号服务器,无需查找符号或配置目录。

【讨论】:

  • 是的,我已经看到了 chkmatch,但我不能使用它。它不适用于转储文件,仅适用于可执行文件。我公司还没有设置符号服务器atm,除非有很大的好处,否则我们不太可能这样做。我怎么知道什么不匹配?你只回答了一半。
  • dumpchk.exe 没有发现转储文件有任何问题。但是,我拥有的 PDB 应该是与转储文件匹配的 PDB。我们对软件进行版本控制,并确保历史 DLL 和 PDB 以及其他文件存储在安全位置。不知道发生了什么。 :(
  • 您是否尝试.writemem 获取 DLL 并将结果与​​您拥有的 DLL 进行比较?
猜你喜欢
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
相关资源
最近更新 更多