当调试代码中的一个讨厌的问题时,你能得到的最有用的东西之一就是一个小型转储。当你的应用程序在崩溃、挂起或内存开始激增时,你得到了一个很大的提示,可以开始你的探索。虽然有很多工具,比如奇妙的prodump,以及调试器自己来创建小转储,但真正的关键时刻是您必须查看这些小型转储。一个或两个很容易做到,但是如果你有200个呢?在我的工作领域,我调试别人的软件问题,我通常会面对来自客户的数百个转储。尽管我很想仔细打开每个小型垃圾场,并且一遍又一遍地输入相同的命令。
我真正需要的是这样一种方式:“这里有一堆.DMP文件;在所有这些文件中运行这些WinDBG命令。”事实证明,当你结合一点WinDBG知识和一点PowerShell魔法时,完成这项基本任务一点都不难。在开始使用脚本之前,我需要谈谈它是如何工作的。这样你就能更好地理解它的用法。

为了编写WinDBG脚本,以便它在一个文件中执行一组命令,使用$$<命令就可以做到这一点。该命令将读入一个文本文件,并依次执行每一行,就像您在命令区域中键入了它一样。您可以在WinDBG帮助中找到$$<的其他变体,它们提供了稍微不同的功能,但是这个命令对于我来说已经足够了。

如果我想运行!analyze并获取已加载模块的列表,下面的调试脚本文本文件名为,BasicAnalysis.txt,显示这些命令。星号被认为是$$<的注释行。

    * Run !analyze!analyze v*Get the list of loaded modules
lmv

标签: none

添加新评论