假设我有一个进程的内存转储。我想对其运行报告,所以基本上我想打开 WinDBG,加载 SOS 并运行一个脚本,该脚本运行一些命令,解析输出,然后基于此运行更多命令。
除了像 SendKeys 这样的 hackish 东西,有没有办法自动化/编写这个过程?或者我可以在 SOS.dll/whatever 之上编写我自己的工具吗?
最佳答案
最好的方法是通过基于 DbgEng 的应用程序。从本质上讲,它可以替代 WinDBG,后者实际上只是一个分层在 DbgEng API 上的 GUI 界面。我们编写了其中之一来支持我们网站的在线崩溃分析器:
http://www.osronline.com/page.cfm?name=analyze
它确实为您提供了最大的灵活性,可以对转储文件执行任何操作。此类应用程序的示例随 WinDBG 一起在\sdk\samples\dumpstk 目录中提供。
在实现这些方面,我在这里写了一篇关于 DbgEng 的简短介绍文章:
http://www.osronline.com/article.cfm?article=559
它适用于使用 DbgEng 将扩展 DLL 写入 WinDBG,尽管对于独立应用程序来说概念是相同的。
作为替代方案,您可以尝试编写作为 WinDBG 命令行的一部分执行的脚本或扩展(请参阅“-c”命令行选项)。这可能更容易开始,但我怀疑如果你从 DbgEng 开始,从长远来看你会更快乐。
关于.net - 自动化 WinDBG 或以其他方式从转储文件中提取信息?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9008065/