windbg使用教程(调试异常及死锁等) 您所在的位置:网站首页 windows内核教程博客 windbg使用教程(调试异常及死锁等)

windbg使用教程(调试异常及死锁等)

2024-01-11 20:05| 来源: 网络整理| 查看: 265

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 实验室设备网 版权所有