1.默认栈大小 1024k 申请大于栈最大容量,程序崩溃
2.栈溢出,申请大于栈最大容量
3.堆破坏,使用未初始化的变量
4.堆溢出,赋值申请大小更大的数值
5.打开momory窗口,查看内存地址 , windbg 符号文件加载,程序的运行路径(.exe等)或源文件代码调试,windbg挂在运行程序(中途attach或开始), ,kb命令查看崩溃点, g程序运行
6.windbg UMDH 查询内存泄漏点, !heap -s 查内存泄漏(大程序不好用), !heap -s -stat -h 地址 , !heap -flt -s 大小 , !heap -p -a 地址
cd C:\Program Files (x86)\Debugging Tools for Windows (x86)
gflags -i a.exe +ust
set _NT_SYMBOL_PATH= D:\Testdemodir\app\aes_test\Debug
umdh -p:1234 -f:c:\old1.log
运行程序一段时间后
umdh -p:1234 -f:c:\new1.log
或 umdh -pn:newChar.exe -f:D:/SecondDump.txt 根据进程名字查询
注释:-p是进程号
然后运行umdh -d –v c:\old1.log c:\new1.log > c:\cmp1.txt
cmp1234.txt就是两个时刻的Heap Stack Trace的差别
我不知道行不行还差九个字还差四个
7.句柄泄漏 !htrace -enable ,!htrace -sanpshot,!htrace diff
查询方法:
导入程序,暂停程序,输入命令 ~*kb打印线程信息
句柄参数是什么0000004c
输入命令 !handle 0000004c f 查询句柄在干什么
查看信息,根据线程id(Thread Id)查询并找到线程信息,查看线程在干啥
再输入命令 !cs 0031fe98
线程被锁了一次 LockCount
OwningThread 拥有的线程地址,查找这个线程的地址
8.死锁,互锁,竞争锁 windbg排查方法
9.dump文件分析
打开dump文件
输入命令 !analyze –v