使用Windbg获取第三方模块列表?

时间:2008-12-14 17:38:56

标签: winapi windbg crash-dumps

我正在使用windbg来检查应用程序发送的一些故障转储。我看到的崩溃与某个第三方DLL加载到进程之间似乎有一些相关性(我怀疑是一个片状的Winsock LSP)。为了在将来更容易进行这种分析,是否有一个windbg脚本只显示非Microsoft的模块列表?这会使崩溃之间的模式对我来说更加明显。我正在使用“lm D sm”,但现在手动浏览列表很痛苦。

谢谢!

5 个答案:

答案 0 :(得分:3)

尝试使用“lm e”将符号路径设置为Microsoft的符号服务器(并且仅加载MS符号)。这将导致WinDbg显示所有模块的列表,其中包含任何类型的符号“问题”,包括尚未加载的模块。

完成这项工作的关键是:

  1. 只有设置使用MS符号存储(使用“.symfix”来实现此功能)
  2. 使用上述sympath
  3. 加载了符号

    从那里你可以添加“lm”的其他选项来获取完整路径等信息。

答案 1 :(得分:1)

你可以使用cdb编写调试器脚本,它只是打印到stdout - 打开崩溃转储,让它打印加载的模块列表然后退出,然后你可以使用你最喜欢的文本操作工具(提示:它的名字是Perl ;))搜索列表。

编辑:只是添加一些额外的信息,cdb是WinDbg的命令行版本;他们都使用相同的引擎,它只是一个不同的前端。

答案 2 :(得分:0)

我不确定我为什么要这样做,但是你可以从WinDbg输出到日志并与DLL列表相关联。在任何脚本语言中都很容易做到,比如Perl,Python等。

答案 3 :(得分:0)

我现在这样做的方法是从安装Windows调试工具的CLR10目录中运行 sos.dll

.load clr10\sos
!sam c:\temp\modules

我在Windows资源管理器中打开目录c:\ temp \ modules。我右键单击Header列,然后为Company添加列。然后我对公司进行排序并将DLL与“Microsoft Corporation”公司一起移动到一个名为“Microsoft”的单独子目录中

目录中遗留的任何DLL通常都是第三方或自定义开发的代码。

谢谢, 亚伦

答案 4 :(得分:0)

我写了一个小命令行应用程序来解决这个问题。

http://www.sleep1000.com/software/dumpmod