程序崩溃时用widbg产生dump

程序崩溃(crash)的时候,可以使用WinDBG把当时程序内存空间数据都保存下来,生成的文件称为dump 文件。 步骤:

 1)查看任务管理器,崩溃的进程还在。判定可以用Windbg截获dump
 2) 打开WinDBG, file--attach to a process,选择崩溃进程如test.exe;
 3) 输入产生dump文件的命令, 如.dump /mf d:/test.dmp, 可以选择不同的参数来生成不同类型的dump文件。

         选项(a): /m
         命令行示例:.dump /m C:/dumps/myapp.dmp
         注解: 缺省选项,生成标准的minidump, 转储文件通常较小,便于在网络上通过邮件或其他方式传输。 这种文件的信息量较少,只包含系统信息、加载的模块(DLL)信息、 进程信息和线程信息。

         选项(b): /ma
         命令行示例:.dump /ma C:/dumps/myapp.dmp
         注解: 带有尽量多选项的minidump(包括完整的内存内容、句柄、未加载的模块,等等),文件很大,但如果条件允许(本机调试,局域网环境), 推荐使用这中dump。

         选项(c):/mFhutwd
         命令行示例:.dump /mFhutwd C:/dumps/myapp.dmp
         注解:带有数据段、非共享的读/写内存页和其他有用的信息的minidump。包含了通过minidump能够得到的最多的信息。是一种折中方案。

 4) 确认提取成功:查看在d盘根目录下是否有test.dmp文件。

 

 分析崩溃原因

 

1. 打开windbg,file--open crash dump ,打开dump文件test.dmp
2. 查看崩溃文件版本:使用lm v m test*  获得崩溃进程文件test.exe文件信息
3. 加载对应符号pdb,找到对应的pdb文件,选择file--symble file path 将pdb文件路径加入
4. ~*k  查看所有线程的堆栈
5. 找到应用程序与系统程序的临界点开始分析
6. dd 0017e2c8 dd  (dd表示以四个字节的方式查看ebp信息。)
7. db 0017e314   (db以字节的方式查看参数内容)
8. db (db继续显示,使内容显示完全)

 

Vista 上如何在程序崩溃时自动保存dump文件

可以使用 windbg在注册表里修改一项达到自动dump崩溃现场的效果:
ntsd 是 windbg包里的一个文件. 我的经验, 这个windbg包不需要安装, 直接解压即可使用.


注册表项:
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/AeDebug
下得手工新添两个:
Auto = "1"
Debugger = D:/WinDbg/ntsd -p %ld -c ".dump /mf D:/WinDbg/prog.dmp;q"

这两个健都是字符串类型, 其中第二个指定调试器
-p %ld 是attach 一个指定的进程(PID)
-c 是自动要执行的命令, .dump 是转储命令. windbg文档中说, 不要从字面上认为mini dump一定比full dump所存的信息要少, 实际上, 有可能mini dump加上一些选项之后, 会得到比full dump更丰富的信息. 这个/mf 是从选项中选出来的两个, 建议使用这个. 后面指定的是dump 文件名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值