0

0

Windows程序Dump收集

爱谁谁

爱谁谁

发布时间:2025-07-03 08:04:26

|

495人浏览过

|

来源于php中文网

原创

在之前的文章《windbg调试----windbg入门》中,我们介绍了windbg的基础知识。许多新手可能会疑惑,为什么需要使用像windbg这样抽象的工具进行调试,而不是直接使用visual studio呢?

这是因为客户的环境千差万别,发布的软件在本地测试无法重现的问题时有发生。我们不能在客户的环境中安装一个几十G的Visual Studio,因此通常会先通过Debug Log进行初步分析。然而,面对程序崩溃、死锁、内存泄漏等问题,仅靠Debug Log进行分析是非常困难的。此时,我们需要利用程序dump进行进一步分析。进程dump主要是将当前运行进程的状态保存到一个文件中,包含进程相关的信息,如当前函数调用栈、堆、线程运行时间等。本文将介绍几种收集dump的工具及其使用场景。

使用Windows任务管理器生成Dump是一种简单的方法。当发现程序出现Memory Leak或死锁时,可以直接生成Dump。打开Windows任务管理器,右键需要生成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:

Ke361开源淘宝客系统
Ke361开源淘宝客系统

Ke361是一个开源的淘宝客系统,基于最新的ThinkPHP3.2版本开发,提供更方便、更安全的WEB应用开发体验,采用了全新的架构设计和命名空间机制, 融合了模块化、驱动化和插件化的设计理念于一体,以帮助想做淘宝客而技术水平不高的朋友。突破了传统淘宝客程序对自动采集商品收费的模式,该程序的自动 采集模块对于所有人开放,代码不加密,方便大家修改。集成淘点金组件,自动转换淘宝链接为淘宝客推广链接。K

下载
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类型):"" -noio -p %ld -e %ld -g -c ".dump /ma /u D:\dumps\dump.dmp; q"。表示当有程序Crash时,利用ntsd生成dump到路径D:\dumps,dump文件名中包含时间和进程名称,避免不同进程dump文件覆盖问题。添加或修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug下的Auto(REG_SZ类型):1

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

366

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

559

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

366

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

559

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

469

2023.08.10

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

513

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1049

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

743

2023.08.01

桌面文件位置介绍
桌面文件位置介绍

本专题整合了桌面文件相关教程,阅读专题下面的文章了解更多内容。

0

2025.12.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.3万人学习

Excel 教程
Excel 教程

共162课时 | 10.1万人学习

PHP基础入门课程
PHP基础入门课程

共33课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号