dump分析

本文介绍了使用Windbg分析程序异常栈的几种方法,包括利用特定命令定位异常发生的线程及调用栈信息,适用于未设置Windbg为默认调试器的情况。

Q:如果出现异常时windbg没有设置为默认调试器,那么异常发生将弹出一个异常框,我保存了dump后,如何查找到异常出现的栈信息呢?

A:通常有以下几个方法:

1:获取到dump时,可以首先运行命令“!analyze –v”,如果输出如下:STACK_TEXT: 00bbffc8 7c971e68 00000005 00000004 00000001 ntdll!DbgBreakPoint00bbfff4 00000000 00000000 00000380 00001000 ntdll!DbgUiRemoteBreakin+0x2d说明这个dump是事后使用调试工具获取的,windbg会认为是dbg线程导致,所以这个分析没有效果;

2:使用命令“~*kv”,打印出所有线程栈,然后查看线程栈中是否有类似throwException或UnhandledExceptionFilter类的函数,说明该线程存在异常,使用命令~Ns,切换到该线程,执行“kv 100”或使用!Teb命令打印调用栈信息,查看异常点。

相同的方法:

搜索  !findstack kernel32!UnhandledExceptionFilter
 !findstack ntdll!KiUserExceptionDispatcher

看到出现第几个线程,则跳转到第几号线程

3:如果使用以上方法都还没有效果的话,就采用这种方法,对大部分异常均有效果:使用命令(不带引号)“~*e r? $t1 = ((ntdll!_NT_TIB *)@$teb)->StackLimit; r? $t2 = ((ntdll!_NT_TIB *)@$teb)->StackBase; !teb; dps @$t1 @$t2”,对输出信息查找函数“KiUserExceptionDispatcher”,并记录下第二个地址值,使用“.cxrxxxxxxx”,切换栈信息,kv 即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值