对于堆崩溃问题,可用Windbg.exe 来调试。

  1. 开启完全页堆

     gflags -p /enable test.exe /full /unaligned

  2. 运行 Windbg.exe

  3. File->open excutable,找开程序

  4. 命令:g  执行程序

  5. 命令:kb  调出堆栈。通过堆栈调用可以看出错在哪 一行。如:test.c @ 555,即第test.c里第555行。

  6. 命令:dv /V VariableName 查看变量VariableName 的值

  7. 调试完后要关闭对于调试程序的gflags设置

  8. gflags -p /disable test.exe



8.  之后可用 gflags -p 查询本机对于哪些程序设置了gflags


查看变量值参考 http://www.cnblogs.com/awpatp/archive/2011/01/02/1924237.html

 

一般情况下,最简单用法如下:

1.打开windgb.exe,拖入dump文件(确保模块对应的pdb文件与dump在同一目录),然后输入!anzlyze -v,让其自动分析。一般这一条命令足矣!!

!analyze -v  // 详细显示当前异常信息

!analyze -hang  // 诊断线程调用栈上是否有任何线程阻塞了其他线程

!analyze -f  // 查看异常分析信息,尽管调试器并未诊断出异常

!tls -1 // 显示当前线程所有的slot信息

!tls 2   // 显示当前线程索引为2的slot信息

!peb // 格式化输出PEB信息(process's environment block)


参考:http://www.cnblogs.com/dsky/archive/2013/05/15/3079465.html

    http://www.cppblog.com/sandy/archive/2008/09/27/62877.html

http://www.cnblogs.com/cswuyg/archive/2011/09/27/gflags.html

http://msdn.microsoft.com/en-us/windows/hardware/gg463028.aspx


windbg调试命令系列

http://www.cnblogs.com/guanlaiy/category/438739.html


dump文件生成:

windows产生dump英文阐述

http://book.51cto.com/art/200911/161415.htm


WinDBG 技巧:如何生成Dump 文件

http://wingeek.blog.51cto.com/1226974/273964

如何使用 Userdump.exe 工具创建转储文件

http://blog.sina.com.cn/s/blog_4e0c21cc0100wtct.html