windows收集dump文件并windbg分析

前言:在我们开发windows程序时(比如C#,qt,c++等),尤其是用到非托管代码时,经常会莫名其妙的发生程序闪退crash,但是脱离了ide时,又不知道crash原因,本文介绍如何抓取dump文件并进行调用堆栈分析

一、修改注册表

1、在注册表中,关闭AeDebug系统级的日志抓取(这里演示64位的路径,32位的注册表路径在其他地方):

2、新建一个.bat批处理文件并执行,目的是自动在注册表中加入我们待观察程序(比如:MyDemo0520.exe)的待观测节点:

SET DMPPATH=E:\test

ECHO 设置自动导出路径,该路径会自动生成,包括文件夹

REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\MyDemo0520.exe"  /f
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\MyDemo0520.exe"  /t REG_SZ  /v DumpFolder /d   %DMPPATH% /f
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\MyDemo0520.exe"  /t REG_DWORD   /v DumpCount /d  2 /f
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\MyDemo0520.exe"  /t REG_DWORD   /v DumpType /d  1 /f

ECHO 启用完成

PAUSE 

(DumpCount:最多保留几个dump文件;DumpType :0:自定义;1:miniDump;2:fullDump)

注:若有的电脑注册表中默认没有LocalDumps路径,则可以先手动去新建一个该LocalDumps项,再执行上述bat批处理文件

3、上述2步操作完,要使注册表生效,可以重启电脑。也可以使用导出再导入的方式(注意,这种操作一定要选中最小单元的节点,不要把整个父文件夹给覆盖了)

二、开启Windows Error Reporting Service的服务(默认为手动,改为自动)

 三、测试打开要观察的exe程序,复现crash,此时E:\test文件夹下会生成需要的dmp文件:

(需要说明的时,若是在IDE调试发生的crash,一般不会生成dmp,直接被IDE拦截了,这里更适用直接运行exe的场景,尤其是debug模式)

打开winDbg程序,将dmp文件拖进来:

(windbg是在安装visualStudio2022自带的分析程序,也可以单独安装)

四、在我们不需要分析crash时,可以将 Windows Error Reporting Service的服务恢复默认(即手动模式),减低系统性能消耗

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WindbgWindows平台上的一款强大的调试工具,可以用于分析dump文件。当一个程序崩溃或异常退出时,系统会生成一个dump文件,其中包含了程序在崩溃前的内存状态、寄存器的值以及调用栈等信息。通过分析dump文件,可以帮助我们确定程序崩溃的原因。 使用Windbg分析dump文件的步骤如下: 首先,打开Windbg并选择“File”菜单中的“Open Crash Dump”,然后选择要分析dump文件。打开dump文件后,Windbg会加载其中的调试信息,包括程序、模块、符号等。 在Windbg的命令窗口中,可以输入一系列的命令来分析dump文件。其中一些常用的命令如下: 1. "!analyze -v":分析dump文件并提供详细的分析报告,报告中包含了崩溃的原因和相关的线程堆栈信息。 2. "kb":显示当前线程的调用栈,可以根据调用栈信息来查找崩溃的位置。 3. "lm":显示加载的模块信息,可以查看程序中加载的模块和其对应的版本号。 4. ".exr -1":显示当前异常的记录,包括异常的类型和相关的寄存器的值。 5. ".reload /f":强制重新加载符号文件,以确保符号信息的准确性。 通过分析命令的执行结果,我们可以逐步追踪问题并找到程序崩溃的原因。在分析过程中,还可以使用其他的命令来查看内存的内容、寄存器的值以及线程的信息等。 总的来说,Windbg是一款功能强大的调试工具,通过分析dump文件可以帮助我们深入了解程序崩溃的原因,从而进行相应的调试和修复。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值