在之前的文章《windbg调试----windbg入门》中,我们介绍了windbg的基础知识。许多新手可能会疑惑,为什么需要使用像windbg这样抽象的工具进行调试,而不是直接使用visual studio呢?
这是因为客户的环境千差万别,发布的软件在本地测试无法重现的问题时有发生。我们不能在客户的环境中安装一个几十G的Visual Studio,因此通常会先通过Debug Log进行初步分析。然而,面对程序崩溃、死锁、内存泄漏等问题,仅靠Debug Log进行分析是非常困难的。此时,我们需要利用程序dump进行进一步分析。进程dump主要是将当前运行进程的状态保存到一个文件中,包含进程相关的信息,如当前函数调用栈、堆、线程运行时间等。本文将介绍几种收集dump的工具及其使用场景。
使用Windows任务管理器生成Dump是一种简单的方法。当发现程序出现Memory Leak或死锁时,可以直接生成Dump。打开Windows任务管理器,右键需要生成dump的进程,选择创建转存文件。
adplus是Windows调试工具集中的一个工具,安装了WDK或Windbg后可以在安装目录中找到。现在许多操作系统都是64位的,但有时Crash的程序可能是32位的,有时可能是64位的。因此,建议使用与程序位数匹配的adplus版本。
要获取Crash情况下的Dump,可以使用以下命令:
adplus -crash -FullOnFirst -o C:\dumps -pmn test.exe
上述命令表示获取test.exe在Crash时的Full的First Chance和Second Chance的dump,并将其存放到C:\dumps目录(需提前创建该目录)。如果有多个名为test.exe的进程,最好使用-p直接指定需要获取dump的唯一进程。
要获取程序未响应时的Dump,可以使用以下命令:
adplus -hang -FullOnFirst -o C:\dumps -pmn test.exe
我测试过,即使程序正常运行时,也可以使用此命令直接获取Dump。这样可以分析dump,查看程序运行时的状态,例如检查死锁问题。
使用procdump可以避免安装adplus时需要安装Windbg或WDK的不便,可以直接从微软Sysinternals下载。
当然,也可以指定进程ID来获取dump。在进程启动过程中或启动后不久就Crash的情况下,Adplus不适用,因为它需要进程启动后才能使用。此时可以使用procdump的以下命令,等待test.exe启动后抓取dump:
procdump -ma -e test.exe C:\dumps
使用Windbg生成Dump是我最喜欢的方式,因为Windbg几乎可以抓取所有场景下的dump,包括运行时、Crash时、hang等。
Windbg JIT调试生成Dump时,JIT(Just in Time)调试通常指的是及时调试。如果将Windbg设置为JIT调试器,当程序出现Crash时,将自动弹出Windbg并附加到程序的异常位置。使用提升后的管理员权限,运行以下命令:
windbg -I
实际上,Windbg的这个命令就是设置了Windows的注册表项,在HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug注册表下。
如果想关闭Windbg作为JIT调试器,可以通过删除注册表HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger。
当程序Crash时,会自动弹出Windbg并附加到程序,可以直接在Windbg窗口中输入以下命令获取full dump:
.dump /ma C:\dumps\full.dmp
程序运行时生成Dump,可以直接使用Windbg附加到需要生成Dump的进程,然后运行以下命令:
.dump /ma C:\dumps\running.dmp
Crash时直接生成Dump的方法结合了上述方法,具有以下优点:无需指定程序,只要系统中有程序Crash就会生成Dump。利用Windbg安装包中的ntsd(cdb也同样可以)。方法如下:
添加或修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug下的Debugger(REG_SZ类型):"
以上就是Windows程序Dump收集的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号