windbg 事后调试

dump文件生成
如果需要使用Windbg生成dump文件,可以使用.dump命令,该命令可以接/m或/f来生成minidump和fulldump,/m后面还可以接更多的命令控制,如/f控制生成内存dump,通常使用.dump /mf来生成dump,这样的minidump比fulldump包含更多的调试信息。

dump句柄信息
在minidump中如果要把句柄信息业dump出来(如句柄泄漏调试可能需要用到!handle命令),则需要加上/h参数,如.dump /mfh

事后调试器设置
事后调试器也就是即时调试器,比如一个进程在运行过程中发生崩溃,即时如果设置了事后调试器则会自动弹出是否进行调试的对话框。事后调试器注册表路径为

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug

AeDebug下有两个重要的键值:Auto和Debugger。Auto表示当发生崩溃时是否显示一个消息框,0表示显示,1表示不显示(就是XX程序遇到错误需要关闭那个提示对话框);Debugger指定事后调试器是哪个调试器,通常的调试器都提供了GUI操作界面,我们通常不需要手动修改注册表。

事后句柄泄漏调试
!htrace命令不能再在dump文件中使用,所以我们需要在转储dump文件时就需要通过!htrace命令把信息输出到日志。生成日志文件可通过“.logopen filename”和“.logclose”来实现,然后结合日志文件分析dump。

通过ADPlus生成dump文件
切换到Windbg.exe所在目录,命令行下以管理员身份运行“adplus.vbs { -hang | -crash } { -pn Process | -p PID } [-o Directory]”来产生dump文件;-hang表示对已经挂起的程序生成dump文件;-crash表示实时监控进程到其crash时产生dump文件;-pn表示进程名字;-p表示pid;-o表示输出目录。
如果提示“The following requested processes are not executing – error in adplus.vbs”,请升级你的Windbg到最新版本。

dump文件收集
现在主流的产品都有dump上报机制,如迅雷的安装目录下能够找到XLBugReport.exe这样的程序,有的程序在启动时会先检测BugReport程序是否完整,如果不完整则拒绝运行。
windbg 事后调试_第1张图片

微软错误报告服务(WER)
除了自己收集dump上传到服务器外,还可以通过Windows自身来收集错误报告,这需要注册微软的错误报告服务(WER : Windows Error Reporting),过程比较麻烦,部分服务收费。

本博客很少转载他人文章,如未特别标明,均为原创,转载请注明出处:
本文出自程序人生 >> Windbg事后调试
作者:代码疯子

你可能感兴趣的:(windbg 事后调试)