windbg使用教程
windbg是微软开发的用于在win平台调试程序的强大工具,支持内核态、用户态调试。可以调试程序、正在运行的进程和动态库,本教程主要介绍在用户态模式下调试应用程序。
相比VS调试程序,windbg开箱即用,不需要安装负责的编译环境,方便在生产环境调试。但是缺点是windbg上手难度大,对新手非常不友好。
安装
微软应用商店
建议直接从微软应用商店中安装,直接安装最新版,注意该版本不带有gflags等工具,需要安装相关工具需要从下载。
windows sdk
可以从Windows SDK安装包中安装,选择只安装**Debugging Tools for Windows,**下载地址见:Windows SDK - Windows 应用开发 | Microsoft Developer
可以只安装**Debugging Tools for Windows,**其它的组件按需安装即可。
基本使用
功能布局
与所有调试工具一样,windbg提供基本的调试功能,例如断点,步过、步入、步出。具有反汇编窗口、寄存器窗口、内存窗口、调用堆栈、局部变量窗口、线程/进程窗口和输出窗口。支持按钮交互控制和命令控制台。
基本命令
命令可以参考微软官方命令手册:Using WinDbg and the debugger commands - Windows drivers | Microsoft Learn
以下是我收集和翻译的Cheat Sheet,用于速查命令。
运行程序
加载PDB文件
默认条件下会加载可执行文件路径下的pdb文件,使用lm命令可以判断是否加载。如果没有加载可以使用.sympath+
命令手动加载符号文件目录
1 | .sympath+ C:\Your\PDB\Directory |
再强制重新加载符号
1 | .reload /f |
加载源文件
可以通过上方的打开源码按钮来加载源码,也可以使用.open
命令打开源码文件。
1 | .open -a C:\Path\To\file.cppp |
如上图布局所示,基本的调试环境已经全部加载完成了。
其他
wingdb功能非常强大,但是想要快速定位和解决内存的问题还是不足,需要借助gflags工具进行快速定位。以下为一些比较好的博客推荐:
https://blog.hawkhai.com/blog/2020/12/26/memory-leak-gflags#%E5%AE%8C%E5%85%A8%E9%A1%B5%E5%A0%86