我正在使用windbg来检查应用程序发送的一些故障转储。我看到的崩溃与某个第三方DLL加载到进程之间似乎有一些相关性(我怀疑是一个片状的Winsock LSP)。为了在将来更容易进行这种分析,是否有一个windbg脚本只显示非Microsoft的模块列表?这会使崩溃之间的模式对我来说更加明显。我正在使用“lm D sm”,但现在手动浏览列表很痛苦。
谢谢!
答案 0 :(得分:3)
尝试使用“lm e”将符号路径设置为Microsoft的符号服务器(并且仅加载MS符号)。这将导致WinDbg显示所有模块的列表,其中包含任何类型的符号“问题”,包括尚未加载的模块。
完成这项工作的关键是:
从那里你可以添加“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)
我写了一个小命令行应用程序来解决这个问题。