windbug截取崩溃与分析崩溃文件

一、截取崩溃
1.设置windbug截取环境。
C:\Program Files (x86)\Debugging Tools for Windows (x86)\windbg.exe -i
windbug截取崩溃与分析崩溃文件_第1张图片
环境设置好之后,程序宕机之后,便会弹出windbug。
2.截取dump文件
.dump -ma d:\test.dmp(d:\test.dmp是路径)
windbug截取崩溃与分析崩溃文件_第2张图片
二、分析dump
1.设置符号路径:
.sympath srvC:\symbolshttp://msdl.microsoft.com/download/symbols; C:\crash\pdb;
在这里插入图片描述
备注:C:\crash\pdb 是自己程序的pdb的符号路径。
2.键入: .reload, 让windbug去重新加载符号。
3.键入: !analyze -v 分析就开始了
windbug截取崩溃与分析崩溃文件_第3张图片
windbug截取崩溃与分析崩溃文件_第4张图片
第一列就是ChildEbp,是函数调用的栈顶,第二列是函数的返回值保存的地址信息,然后第三个参数开始就是函数的入参了:
windbug截取崩溃与分析崩溃文件_第5张图片
4.键入:db 003fe898 就可以读取改地址的字节信息。(db就是readbyte,表示一个字节一个字节读取,命令dd就是readdword,表示四个字节四个字节读取)
dw = 双字节WORD格式;
dd = 4字节DWORD格式 ;
dq = 8字节格式;
df = 4字节单精度浮点数格式;
dD =8字节双精度浮点数格式;
dp = 指针大小格式,32位系统下4字节,64位系统下为8字节。
windbug截取崩溃与分析崩溃文件_第6张图片
OK没问题!
然后我们看看第二个参数:000020c5,这个值十进制就是8389,对了下代码,这个值也是ok的,没发现问题,然后看第三个参数:019121e0,
windbug截取崩溃与分析崩溃文件_第7张图片
现在读取不了,肯定是该地址信息被破坏了
5.是不是在其他线程呢,可以用 ~*k (打印所有线程堆栈信息),发现也没有。
(切换线程堆栈可以用:~2s(切换到二号线程))

6.看到崩溃堆栈需要切换到上下文当中,
用: .ecxr 命令,然后在 kp 一下(kp表示打印堆栈并附带参数信息):
windbug截取崩溃与分析崩溃文件_第8张图片
7.我们还是转到那行:
在这里插入图片描述
第一列(001ccdb4)是函数ebp地址信息,我们可以用:dd 001ccdb4
windbug截取崩溃与分析崩溃文件_第9张图片
我们看看第十个参数和第十一个参数信息:
windbug截取崩溃与分析崩溃文件_第10张图片
绝望了!
8.转到这行堆栈 .frame4
windbug截取崩溃与分析崩溃文件_第11张图片
在这里插入图片描述
9 .dv 来打印临时变量信息:
windbug截取崩溃与分析崩溃文件_第12张图片
这里可以看到log信息是:“Muted failed, errorcode:255”,
找到代码段
windbug截取崩溃与分析崩溃文件_第13张图片
在这里插入图片描述
发现原来这个函数用错了,其实应该用下面的:KSL_LOG_ERROREX,如果错误的使用上面的函数必然导致不确定的崩溃。

三.常用指令
1.设置windbg路径:
C:\Program Files (x86)\Debugging Tools for Windows (x86)\windbg.exe -i
2.截取dump
.dump -ma d:\test.dmp
备注:d:\test.dmp是路径
3.设置pdb
.sympath srvC:\symbolshttp://msdl.microsoft.com/download/symbols; C:\crash\pdb;
备注:C:\crash\pdb 是自己程序的pdb的符号路径。
4.让windbug去重新加载符号
.reload
5.分析
!analyze -v
6. 读取地址的字节信息
db* 003fe898
7. 打印所有线程堆栈信息
~*k
8.看崩溃堆栈切换到上下文当中
.ecxr命令,然后在 kp 一下
9.转到第5行堆栈
.frame4
10 来打印临时变量信息
dv

你可能感兴趣的:(windbg)