2

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

谢谢!

4

5 回答 5

3

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

完成这项工作的关键是:

  1. sympath 仅设置为使用 MS 符号存储(使用“.symfix”来实现此目的)
  2. 已使用上述 sympath 加载符号

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

于 2008-12-22T20:23:50.240 回答
1

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

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

于 2008-12-14T19:23:32.430 回答
0

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

于 2008-12-14T19:25:05.423 回答
0

不久前,我编写了一个小型命令行应用程序来解决这个问题。

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

于 2009-07-26T19:27:28.413 回答
0

我现在执行此操作的方式是从 Windows 调试工具安装的 CLR10 目录中运行sos.dll 。

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

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

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

谢谢,亚伦

于 2009-02-21T22:19:44.103 回答