windbg 定位崩溃问题

摘要:
在windg的“edit”-˃“open/closelofile”中设置日志路径“d:a.log”,输入命令“~*er?$t1=-˃StackLimit;r?$t2=-˃StackBase;!Teb;dps@$t1@$t2”,等待完成,最后打开d:a.log,找到“KiUserExceptionDispatcher”,记录第二个地址xxxxxxxx,最后是“.cxrxxxxxxxx”,您可以看到异常点。例如,在下面的代码中,在访问空指针并等待异常之后,我们根据上述方法分析int*p=null;inta=*p+1;1.异常发生后,找到相应的条目,保存dump2,找到KiUserExceptionDispatcher3,然后切换Cxr0010e7e0。通常,您会遇到以下问题:1.~*er?teb;Dps@$t1@$t2,输入后,将提示“Count'tresolveerror'ntdll!_NT_TIB*)……”:因为没有为窗口设置符号文件。

windbg 定位崩溃问题第1张

三板斧如下:

  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”,就可以看到异常点了。

windbg 定位崩溃问题第2张

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

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 定位崩溃问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇GitLab版本管理工具Code::Blocks代码自动提示设置及常用快捷键下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WinDbg符号表设置的基础

  现在正在学windbg,记录一些基本的知识。 每次调试开始都会新开始一个workspace,其实就是跟工程差不多,记录了你这次调试的配置。当然有一个默认workspace,当你没有调试的时候。感觉最重要的就是设置符号表,每次都得弄好,要不然符号看不了的,设置如下.sympath srv*d:\symbols*http://msdl.microsoft....

如何安装windbg调试助手

最近要用到windbg用于代码调试,于是先研究了一下如何安装windbg 先下载Win10 SDk 链接:https://pan.baidu.com/s/1nAVKqKUlM6ePep4_8DsfZA 提取码:b2a0 双击下载的exe执行文件 点击Next 我只用到了windbg,所以只勾选了windbg选项,点击Download开始下载 根据...

windbg笔记

数据结构 Module EEClass MD(Method Desc) MT(Method desc Table) Object 基本命令 ~*e!clrstack 查看所有持有和等待锁的线程(的下一条要执行的代码) k 观察非托管堆栈 x <模块名>!*<函数名>* 查看符号 lm -f 显示已经载入的模块及其完整路径 sx...

利用WinDbg找出程序崩溃的代码行号

之前碰到论坛里有几个好友,说程序不时的崩溃,什么xxoo不能read的! 如果光要是这个内存地址,估计你会疯掉~~所以分享一下基本的调试技巧,需要准备的工具有WinDbg + VC6.0,下面是自己整理的一份自动生成DUMP文件的源代码,只需要添加到工程即可,源代码如下:MiniDump.hMiniDump.cpp<具体请参考附件SRC中,太大就不贴...

【内存检测系列】window下windbg内存泄漏检查

文章目录 1、使用windbg中的umdh检查 1.1、 工具下载 1.2、环境配置 1.3、利用工具umdh(user-mode dump heap)分析 1.4、利用umdh创建heap快照 2、使用windbg中的htrace检查 2.1、准备工作 2.2、快照 2.3 、执行操作,比较差异 2.4、找到代码行 2.5、Process E...

windbg

http://www.codemachine.com/article_x64deepdive.html https://sites.google.com/site/jozsefbekes/Home/windows-programming/windbg http://www.codeproject.com/Articles/Toby-Opferman#Art...