自动化WinDBG或从转储文件中提取信息?

时间:2012-01-25 18:23:31

标签: .net automation windbg sos

假设我有一个进程的内存转储。我想运行一个报告,所以基本上我想打开WinDBG,加载SOS并运行一个运行一些命令的脚本,解析输出然后根据它运行更多的命令。

除了像SendKeys这样的hackish之外,有没有办法自动化/编写这个过程?或者我可以在SOS.dll /之上编写我自己的工具吗?

2 个答案:

答案 0 :(得分:5)

执行此操作的最佳方法是通过基于DbgEng的应用程序。从本质上讲,它可以替代WinDBG,它实际上只是在DbgEng API上分层的GUI界面。我们写了其中一个来支持我们网站的在线崩溃分析器:

http://www.osronline.com/page.cfm?name=analyze

它确实为您提供了最大的灵活性,可以使用转储文件执行任何操作。在\ sdk \ samples \ dumpstk目录中,WinDBG提供了此类应用程序的示例。

在实施这些方面,我在这里写了一篇关于DbgEng的简短介绍文章:

http://www.osronline.com/article.cfm?article=559

它面向使用DbgEng将扩展DLL编写到WinDBG,尽管对于独立应用程序的概念是相同的。

作为替代方法,您可以尝试编写作为WinDBG命令行的一部分执行的脚本或扩展(请参阅“-c”命令行选项)。这可能更容易上手,但我怀疑如果你从DbgEng开始,你会在更长的时间里更开心。

答案 1 :(得分:1)

在CLR 4.0中,ICorDebug支持读取转储文件,因此您可以使用mdbg提取至少一些所需的信息。

您也可以使用IronPython为其编写脚本。