三板斧如下:

  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. Ubuntu 下 Python自由切换

    sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 sudo update-alternati ...

  2. Python Appium 开启Android测试之路

    1.获取 Android app的Activity 打开终端cmd,先cd进入到刚才下载的“新浪.apk”目录下,然后使用aapt dump badging xxx.apk命令获取包内信息.注意,启动 ...

  3. (10)进程---Manager数据共享

    Manager  能够实现进程之间的数据共享(dict list),但是必须上锁来确保数据的准确性, 队列则可以实现进程之间数据通信 from multiprocessing import Proce ...

  4. how-to-view-source-of-chrome-extension

    https://gist.github.com/paulirish/78d6c1406c901be02c2d Option 1: Command-line download extension as ...

  5. Ruby 基础教程 第二部分 Ruby 的基础 第4章

    第二部分 Ruby 的基础 第4章~第6章 这一部分是 Ruby 编程需要遵守的规则. 第四章 对象,变量与常量 对象 & 类 对象的常见种类: 数值对象 字符串对象 数组.散列对象 正则表达 ...

  6. 雷林鹏分享:XML 元素

    XML 元素 XML 文档包含 XML 元素. 什么是 XML 元素? XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分. 一个元素可以包含: 其他元素 文本 属性 或混合以上所有. ...

  7. LeetCode--231--2的幂函

    问题描述: 给定一个整数,编写一个函数来判断它是否是 2 的幂次方. 示例 1: 输入: 1 输出: true 解释: 2 0  = 1 示例 2: 输入: 16 输出: true 解释: 2 4   ...

  8. You Don't Know JS: this & Object Prototypes( 第3章 对象)

    前2章探索了this绑定指向不同的对象需要函数引用的call-site. 但是什么是对象,为什么我们需要指向它们? 本章探索细节. Syntax the rules  that describe ho ...

  9. p1457 The Castle

    原图找最大的房间及房间数很容易.然后从左下到右上找拆的位置.拆掉再bfs一次找面积. #include <iostream> #include <cstdio> #includ ...

  10. java.io.Serializable中serialVersionUID的作用

    把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中: 2) 在网 ...