DebugDiag 调试工具

卷儿哥 2023年11月24日 503次浏览

Debugdiag可以用来追踪windows下程序崩溃,卡死(包括死锁),断言等一些疑难问题的原因,对检测程序内存泄漏也有很好的帮助,相对于另外一款windbg调试器来说,是程序员的轻量级武器。

1、配置规则

在程序崩溃之前,就要用debugdiag设置好rule,打开Tools/Rule Actions/Add Rule…对话框,选择Crash,单击下一步,选择A specific process,这里以程序test_crash.exe作为例子,输入test_crash.exe

单击下一步,根据需要选择相应的选项,这里选择Log Stack Trace,表示记录崩溃时的堆栈情形
只有在满足如下条件时,才能根据dump文件定位是哪个函数中哪一行出了问题。

  • 生成了程序的PDB文件
  • 程序和PDB文件完全匹配
  • 程序的dump文件和PDB文件同时存在,并且PDB文件所在目录为原来生成程序的目录

否则只会给出从基址(一般是0×00400000)开始的偏移量(其实这样就已经能定位问题,只不过还需多做几步),不会给出具体的函数信息。

2、 配置dump存储位置

  • 查看dump文件的默认存储位置

点击DebugDiag 1.1 (x86)工具主窗口工具栏中的“文件夹”图标
打开其中的misc文件夹,刚才所抓取的dump文件就存放在其中

  • 修改dump文件的存储位置

点击DebugDiag 1.1 (x86)工具菜单栏中的“Tools”->“Options and Settings”设置Manual Userdump Save Folder中的路径为所要修改的路径即可。

3、抓取dump文件的时机

  • 应用程序初始化完毕(测试执行前)需要抓取一个dump文件
  • 使用性能计数器观察测试中的内存使用情况,在IIS崩溃前(观察Prvite和#time in GC的变化)抓取dump文件以便于开发分析
  • 在性能计数器中观察gen2、large object heap、bytes in all heaps堆的使用和释放情况,在堆的使用即将达到一个高峰值(相对值)前抓取dump,并同时抓取堆释放到一个低峰值(波谷)前抓取一个dump,方便开发对比分析。