WinDbg 有没有办法在不使用 DbgEng API 的情况下为所有加载的模块显示符号服务器路径(即PdbSig70 和 PdbAge )?
我知道
lml
对已加载符号的模块执行此操作。我想知道未加载符号的这些路径,以便诊断问题。任何人都知道这是否可能无需使用 DbgEng API?
编辑:
我也意识到你可以使用
!sym noisy
获取有关符号加载的错误消息。虽然这确实有有用的输出,但它与我想要的其他输出交错并且不像'lml'那样简单明了
WinDbg 有没有办法在不使用 DbgEng API 的情况下为所有加载的模块显示符号服务器路径(即PdbSig70 和 PdbAge )?
我知道
lml
对已加载符号的模块执行此操作。我想知道未加载符号的这些路径,以便诊断问题。任何人都知道这是否可能无需使用 DbgEng API?
编辑:
我也意识到你可以使用
!sym noisy
获取有关符号加载的错误消息。虽然这确实有有用的输出,但它与我想要的其他输出交错并且不像'lml'那样简单明了
!sym noise 和 !sym quiet 可以为符号加载打开额外的输出,即:
!sym noisy
.reload <dll>
X <some symbol in that DLL to cause a load>
!sym quiet
当调试器尝试加载 PDB 时,您将看到它尝试加载的每条路径以及 PDB 是否未找到或被拒绝。
据我所知,windbg 中没有现成的解决方案。您的选择是编写一个漂亮的脚本或扩展,具体取决于您最适合的位置。
在windbg中作为脚本是非常可行的。PE 调试目录中描述了您需要的信息。
这是C++ 示例代码的链接,该代码详细介绍了提取有用信息(例如您的情况下的符号文件的名称)。将其改编为 windbg 脚本应该不费吹灰之力。
这是另一个有用的指针,其中包含有关自动化 windbg 的大量信息。特别是,它讨论了将参数传递给 windbg 脚本的方法(这在您的情况下也很有用,有一个通用的调试信息提取代码,您可以从加载的模块迭代循环中调用它)。