三板斧如下:

  1. 使用windbg打开dump文件,设置好对应进程的 pdb 文件(这个很关键。为了避免releas优化导致符号文件错乱,我发布的所有                      release 版都是关闭代码优化的)。
  2. 在windbg的"edit"->"open/close log file"  设置log 路径 “d:\a.log”
  3. 输入命令 “~*er?$t1=((ntdll!_NT_TIB*)@$teb)->StackLimit;r?$t2=((ntdll!_NT_TIB*)@$teb)->StackBase;!teb;dps@$t1@$t2”

等待完毕,最后打开 d:\a.log ,查找"KiUserExceptionDispatcher", 并记录下第二个地址xxxxxxxx, 最后 “.cxr  xxxxxxxx”,就可以看到异常点了。

有时候我们会遇到这样的情况,软件突然崩溃了,而这时候我还没开调试器呢,怎么办? 比如如下代码,因为访问了空指针,等待异常出现后,我们再按照如上方式来分析

int *p = NULL;

int a = *p + 1;

1、异常出现后,找到对应进场,并保存dump

2、查找KiUserExceptionDispatcher

3、切换 .cxr 0010e7e0

    一般大家会碰到如下几个问题:

1、~*er?$t1=((ntdll!_NT_TIB*)@$teb)->StackLimit;r?$t2=((ntdll!_NT_TIB*)@$teb)->StackBase;!teb;dps@$t1@$t2   ,输入后,会提示“Couldn't resolve error at 'ntdll!_NT_TIB*) .......” : 因为没有设置windows的符号文件。

2、使用KiUserExceptionDispatcher 找到多处异常地址,需要你一个个切换查看可疑点

3、KiUserExceptionDispatcher找到地址,但是.cxr  没有切换到奇怪的栈信息, 那么崩溃可能是由于 踩内存导致(这个需要后面的章节)

4、对于某些栈异常无法捕获dump,需要设置函数 http://www.cnblogs.com/txk1452/archive/2012/08/11/2634022.html

--------------------- 本文来自 corrupt 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/corrupt/article/details/51352318?utm_source=copy

windbg 定位崩溃问题的更多相关文章

  1. [转]gdb结合coredump定位崩溃进程

    [转]gdb结合coredump定位崩溃进程 http://blog.sina.com.cn/s/blog_54f82cc201013tk4.html Linux环境下经常遇到某个进程挂掉而找不到原因 ...

  2. VS2008通过 map 和 cod 文件定位崩溃代码行

    VS 2005/2008使用map文件查找程序崩溃原因 一般程序崩溃可以通过debug,找到程序在那一行代码崩溃了,最近编一个多线程的程序,都不知道在那发生错误,多线程并发,又不好单行调试,终于找到一 ...

  3. WinDBg定位asp.net mvc项目异常崩溃源码位置

    项目介绍:asp.net mvc + angular +iis(windows)+windows server 系统莫名崩溃 最近有个系统默认奇妙崩溃50x,服务整体变成无响应,当运维告知我只有重启应 ...

  4. 利用windbg分析崩溃,句柄泄漏,死锁,CPU高,内存泄漏

    Windbg的一些简单使用命令 一.崩溃 1.  输入.ecxr;kbn得到崩溃的堆栈 其中源代码如下 2.  查看堆栈和源代码,发现第0帧导致崩溃,代码也是本地代码 输入.frame  0,切到第0 ...

  5. [原]调试实战——使用windbg调试崩溃在ole32!CStdMarshal::DisconnectSrvIPIDs

    原调试debugwindbg崩溃crash 前言 最近程序会不定期崩溃,很是头疼!今晚终于忍无可忍,下决心要干掉它!从之前的几个相关的dump可以猜到是有接口未释放导致的问题,但没有确认到底是哪个接口 ...

  6. [原]调试实战——使用windbg调试崩溃在ComFriendlyWaitMtaThreadProc

    原调试debugwindbgcrash崩溃COM 前言 这是几年前在项目中遇到的一个崩溃问题,崩溃在了ComFriendlyWaitMtaThreadProc()里,没有源码.耗费了我很大精力,最终通 ...

  7. 使用windbg定位内存问题【入门级】

    1. 背景 在开发过程中,我们可能遇到应用程序线程占用过大的问题,可以通过windbg命令去定位哪些类型,哪些内存一直占用堆资源,从而查出问题,解决问题. 2. 准备工作 工具: 抓取DUMP文件的工 ...

  8. 强大的windbg定位内存泄露,两句命令搞定!

    1.简单配置在windbg程序目录下有个gflags.exe,运行后设置: 运行CMD.EXE,输入"D:\Debugging Tools for Windows (x86)\gflags. ...

  9. Andoid 利用ndk-stack定位崩溃代码

    Android NDK自从版本R6开始, 提供了一个工具ndk-stack( 在目录{ndk_root}/中 ). 这个工具能自动分析dump下来的crash log, 将崩溃时的调用内存地址和c++ ...

随机推荐

  1. ones测试用例管理平台

    https://ones.ai 团队信息: 公司信息,公司logo付费信息:绑定第三方账户: 成员信息: userid,user_email,激活状态,所属部门组织架构:所属部门: 新建组 团队权钱: ...

  2. 深入JVM对象引用

    在jdk 1.2以前,创建的对象只有处在可触及(reachaable)状态下,才能被程序所以使用,垃圾回收器一旦发现无用对象,便会对其进行回收.但是,在某些情况下,我们希望有些对象不需要立刻回收或者说 ...

  3. Git Gui 常见错误

  4. Implicit super constructor Object() is undefined for default constructor. Must define an explicit constructor

    转自:https://blog.csdn.net/u013125680/article/details/43887987 解决方案:把java的类库加载进去,在工程上右键选择属性->Java B ...

  5. lua --- 局部变量

    1.block(代码块) --- 一个控制结构.一个函数体.一个chunk   chunck --- 变量被声明的那个文件或者文本串 2.局部变量只在声明的那个block中有效 3.可以使用 do . ...

  6. 在linux中,我为什么不能安装VMware Tools?

    在linux中,我为什么不能安装VMware Tools? 应该是操作不正确导致,以下为linux安装VMware Tools的方法. 1.在安装Linux的虚拟机中,单击“虚拟机”菜单下的“安装Vm ...

  7. FreeRTOS

    一.内核配置 1.configUSE_PREEMPTION 设置为1,使用抢先式内核:设置为0,为合作轮转内核. 2.configCPU_CLOCK_HZ 内部处理器执行的频率.这个值需要正确配置外围 ...

  8. 练习 配置WCF服务

    http://blog.csdn.net/suntanyong88/article/details/8203572   目录(?)[+] 1OrderTrackWindowsKZT   控制台应用 程 ...

  9. 20171022xlVBA练手提取入所记录

    Sub GetWordText改进() Dim Wb As Workbook Dim Sht As Worksheet Dim Rng As Range Dim wdApp As Object Dim ...

  10. [LintCode] Binary Tree Level Order Traversal(二叉树的层次遍历)

    描述 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 样例 给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \ 9 20 / \ 15 7 返回他的分层遍历结果: [ [3] ...