windbg使用教程(调试异常及死锁等) | 您所在的位置:网站首页 › windows内核教程博客 › windbg使用教程(调试异常及死锁等) |
1.背景
最近由于线上的程序发生了死锁,而且重现的概率很低,正好客户反馈一个任务超时了,登上线上环境发现有一个“僵尸”进程,占用内存不波动,cpu仍在占用, 那么用创建转储文件,用windbg调试吧。 2.准备 2.1.下载windbg 需要下载Windows 调试工具 (WinDbg):Windows 10 SDK,安装时候根据需要,可以只安装Debugging Tools For Windows,即windbg;如果已下载并安装Windows 10 SDK,而没有安装Windbg,那么在控制面板》程序》Windows Software Development Kit》右键选择更改》change》勾选Debugging Tools For Windows》安装 即可;可参考官方文章:下载 Windows 调试工具 2.2.相关知识可参考官方文章: Windows 调试入门 WinDbg 入门(内核模式) WinDbg 入门(用户模式) 使用 WinDbg 进行调试后文还会贴出一些有参考价值的博客文章; 2.3.所需文件 2.3.1.DMP文件 .dump(创建转储文件) 可以为进程创建转储文件(dmp),既可以在任务有管理中选中进程》右键》创建转储文件;也可以用windbg附加到进程(附加后会让程序暂停,注意这时候要用windbg的g(go)或者step out、step over等让程序继续运行,运行完再创建dmp文件)让程序运行到出错位置后,windbg会发现异常并中断,然后输入:.dump /f e:dump/XXXX.dmp,生成全信息的dmp文件;当然转储文件有多种,详细参考官方文章; 2.3.2.符号文件需要符号文件,就像VS里面设置符号加载,这里可以包含调试目标程序的符号文件(pdb)路径、microsoft符号文件及符号缓存目录;借助符号文件和源代码可以准确的定位堆栈位置及异常位置; 在windbg中符号路径设置里注意事项:SRV*e:\symbols*http://msdl.microsoft.com/download/symbols;C:\Users\heuwz\source\repos\x64\Release 其中*e:\symbols*为符号缓存目录(就像VS中设置符号缓存目录),http://msdl.microsoft.com/download/symbols为microsoft符号服务器,C:\Users\heuwz\source\repos\x64\Release为目标程序符号(pdb文件)所在目录; 在Windbg中Ctrl+s快捷键可以打开设置符号路径面板; 设置时可以合理的利用面板中的Browser按钮选择本地目录,这样可以最大化的避免手动输入可能带来的格式问题; 2.3.3.源代码文件需要结合符号文件和源代码文件来分析确定堆栈位置、异常位置等再源代码中的位置,从而提供更准确的调试信息,供使用者进一步的分析问题; 设置源代码文件路径(ctrl+p),仅仅是相关的代码文件就可; 同样可以合理的利用面板中的Browser按钮选择本地目录,这样可以最大化的避免手动输入可能带来的格式问题; 3.开始为方便说明,下面以一个例子进行讲解, 3.1.准备程序代码(会引发异常)如下, #include "pch.h" #include #include #include using namespace std; class TestClass { // 该类仅做示例用,有很多不规范的地方,比如构造函数,析构函数,赋值重载,成员字段公开等问题 // 读者可批判的看待 public: int NTest; }; int main() { std::cout NTest = 3; std::cout NTest |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |