使用windbg分析程序崩溃后附加windbg dump出来的dmp文件

在程序崩溃后附加windbg,.dump生成的dmp文件并不是直接保存着程序崩溃时的状况,而是保持着windows在做崩溃处理时的状况,因此此时的调用堆栈并不是崩溃时的调用堆栈。 下面是实际崩溃时的调用栈

输入图片说明 下面是崩溃处理时的调用栈

输入图片说明 两个调用栈中都有,对比一下可以猜测是__RtlUserThreadStart中启动程序,崩溃后回到__RtlUserThreadStart中,接着调用UnhandledExceptionFilter,进行异常处理,函数原型如下 LONG WINAPI UnhandledExceptionFilter( In struct _EXCEPTION_POINTERS *ExceptionInfo); 参数中有个 struct _EXCEPTION_POINTERS 指针,用于传递异常信息

typedef struct _EXCEPTION_POINTERS { PEXCEPTION_RECORD ExceptionRecord; //异常记录 PCONTEXT ContextRecord; //异常上下文 } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS; 使用 .exr ExceptionRecord 可以获得异常的一些基本信息,包括发生异常的位置,异常编号,基本的说明等 .cxr ContextRecord 可以获得异常时的一些上下文信息,包括寄存器状态,代码,调用栈等

注:附加后dump下来会有多个线程,要进行线程切换找到异常的线程,线程相关命令 ~编号[操作],编号可以是*,表示所有线程, 操作可以有k -输出调用栈,s-切换线程

转载于:https://my.oschina.net/u/1171187/blog/478091

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值