使用WinDbg调试程序异常和死锁等问题
一、在使用WinDbg调试之前,我们先使用VS的调试功能
1、文件 -> 打开 -> 文件 -> 打开Dump文件
2、调试 -> 选项 -> 调试 -> 符号 -> 添加该应用的.pdb所在的文件夹
3、使用 仅限托管 进行调试
正常情况下会执行到抛出异常的位置,并且显示异常详情。
二、WinDbg
下载路径:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debugger-download-tools
旧版需要单独配置符号路径,某些版本符号路径没办法全部下载下来,有一些遗漏导致功能用不了,推荐去上面的官网下载新版本
SRV*C:Symbols*http://msdl.microsoft.com/download/symbols
![](https://img2022.cnblogs.com/blog/2919751/202208/2919751-20220814100403351-1391508518.png)
下面的都是新版的操作,使用Open dump file打开dump文件
自动下载符号文件,下载完毕使用 !analyze -v分析(第一次使用还会下载分析使用的符号文件,之后就不会再下载了),FAULTING_SOURCE_CODE指出了源码错误的位置
异常信息解读
下面分别介绍比较重要的关键字段:
1、各个参数的详解
FAULTING_IP :
即出错的指令地址,指出发生错误时所执行的指令,这的IP值EIP
EXCEPTION_RECORD:
异常记录的地址,即该地址是PEXCEPTION_RECORD类型,并且这里给出了分析异常的命令(.exr -1)
ExceptionAdddress:
发生异常的地址
ExceptionCode:
异常所代码的错误码,这是因为非法访问导致的
ExceptionFlag:
异常标志(1,表示不可继续的异常 0,表示可继续的异常)
NumberParameters:
异常相关联的参数,第一个参数是空指针,第二参数是结构体成员地址
FAULTING_THREAD:
发生错误的线程ID
CONTEXT:
是发生异常时的上下文地址,这里给出的地址是0x002afb08 ,这个很重要。
FAULTING_SOURCE_CODE:
给出了执行异常时所对应的源代码,>符号表明了异常语句。
STACK_COMMAND:
是堆栈相关的命令,获取程序执行错误时堆栈调用情况,这给出了.cxr 0x2afb08 和 kb两个命令, 这个也很重要。
2、STACK_TEXT栈文本
该字段是栈文本信息,它反映了错误堆栈的调用情况,从中可以知道以下两个信息:
函数执行顺序为从MainWindow_Loaded函数到Run函数,执行Test11111函数时发生异常。
每一行中的每列地址分别为 ChildEBP地址、函数返回地址、函数前三个参数,共计五个。
例如:
00d92104参数1 00000000参数2 00000005 参数3 若参数少于三个,按照实际顺序对号入座即可。
相关文章
- 金融服务领域的大数据:即时分析
- 影响大数据、机器学习和人工智能未来发展的8个因素
- 从0开始构建一个属于你自己的PHP框架
- 如何将Hadoop集成到工作流程中?这6个优秀实践必看
- SEO公司使用大数据优化其模型的5种方法
- 关于Web Workers你需要了解的七件事
- 深入理解HTTPS原理、过程与实践
- 增强分析:数据和分析的未来
- PHP协程实现过程详解
- AI专家:大数据知识图谱——实战经验总结
- 关于PHP的错误机制总结
- 利用数据分析量化协同过滤算法的两大常见难题
- 怎么做大数据工作流调度系统?大厂架构师一语点破!
- 2019大数据处理必备的十大工具,从Linux到架构师必修
- OpenCV中的KMeans算法介绍与应用
- 教大家如果搭建一套phpstorm+wamp+xdebug调试PHP的环境
- CentOS下三种PHP拓展安装方法
- Go语言HTTP Server源码分析
- Go语言HTTP Server源码分析
- 2017年4月编程语言排行榜:Hack首次进入前五十