2

WinDbg 有没有办法在不使用 DbgEng API 的情况下为所有加载的模块显示符号服务器路径(即PdbSig70 和 PdbAge )?

我知道

lml

对已加载符号的模块执行此操作。我想知道未加载符号的这些路径,以便诊断问题。任何人都知道这是否可能无需使用 DbgEng API?

编辑:

我也意识到你可以使用

!sym noisy

获取有关符号加载的错误消息。虽然这确实有有用的输出,但它与我想要的其他输出交错并且不像'lml'那样简单明了

4

3 回答 3

2

!sym noise 和 !sym quiet 可以为符号加载打开额外的输出,即:

!sym noisy
.reload <dll>
X <some symbol in that DLL to cause a load>
!sym quiet

当调试器尝试加载 PDB 时,您将看到它尝试加载的每条路径以及 PDB 是否未找到或被拒绝。

于 2010-01-04T21:19:22.483 回答
1

据我所知,windbg 中没有现成的解决方案。您的选择是编写一个漂亮的脚本或扩展,具体取决于您最适合的位置。

在windbg中作为脚本是非常可行的。PE 调试目录中描述了您需要的信息。

这是C++ 示例代码的链接,该代码详细介绍了提取有用信息(例如您的情况下的符号文件的名称)。将其改编为 windbg 脚本应该不费吹灰之力。

这是另一个有用的指针,其中包含有关自动化 windbg 的大量信息。特别是,它讨论了将参数传递给 windbg 脚本的方法(这在您的情况下也很有用,有一个通用的调试信息提取代码,您可以从加载的模块迭代循环中调用它)。

于 2010-01-05T23:54:37.407 回答
0

你可以使用命令

lme

显示没有加载任何符号的模块。

于 2012-08-18T01:17:04.193 回答