C++初学者指南-4.诊断—用gdb调试
幻灯片
gdb / 前端
gdb | GNU的命令行调试器 |
cgdb | 基于终端的gdb前端 Linux安装:sudo apt-get install cgdb |
gdbgui | 基于浏览器的gdb前端 网址:https://gdbgui.com/ 安装:sudo pip install gdbgui |
Qt Creator | 可以连接gdb |
Visual Studio Code | 可以连接gdb |
Vim | "termdebug"包包含在Vim 8.1中 |
示例:sum.cpp,根据命令行参数进行等差数列的累加求和计算。
用于调试的编译
- 在执行文件中增加调试信息,注意“-g”参数。
- 避免优化等级为-O1、 -O2、 -O3,使用 -O0或 -Og参数替代。
启动调试器
你现在处于gdb的控制台中。
运行您的程序
带命令行参数运行
程序结束
设置断点
命令 | 程序停止在… |
---|---|
break 12 | 在当前激活的源代码文件第12行 |
break sum_up_to | 函数sum_up_to在所有源代码文件中的第一个可执行代码行 |
break sum.cpp:7 | 源代码文件sum.cpp的第7行 (如果不在同一目录中,请使用相对路径名或完整路径名) |
break sum.cpp:main | 在sum.cpp源文件中的main函数的第一个可执行代码行 |
单步执行你的程序
管理断点
info breakpoints | 显示所有断点 |
delete | 删除所有断点 |
delete 1 | 删除1号断点 |
clear | 在下一条指令中删除断点 |
disable 2 | 禁止2号断点 |
enable 2 | 使能2号断点 |
save breakpoints file | 保存断点到文件 |
source file | 载入文件中的断点 |
有用的gdb命令
按键/命令 | 快捷命令 | 解释 |
---|---|---|
<Enter> | 重复前个命令 | |
<Tab> | 完整的命令或函数名 | |
run [<arg>…] | r [<arg>…] | 运行程序(带命令行参数) |
break <loc> | b <loc> | 在函数开始或者指定行设置断点 |
step | s | 执行下一条指令,进入函数单步执行 |
next | n | 执行下一条指令,不进入函数单步执行 |
jump <loc> | j <loc> | 跳转到指定位置(用于退出长循环或无限循环) |
continue | c | 继续执行程序直到下个断点或者程序结束 |
until <loc> | u <loc> | 继续执行直到指定位置(函数或某行) |
finish | fin | 完成(跳出)当前函数 |
print <expression> | p | 打印表达式的值,例如:变量 |
info breakpoints | i b | 列出所有断点 |
info locals | i locals | 列出所有局部变量和其值 |
backtrace | bt | 显示调用堆栈 |
gdb前端
cgbd (Linux/Win/MacOS/WSL)
- 在命令行中运行
- 分屏显示,带有源代码窗口
- 显示断点和当前指令
- 在Ubuntu/Debian/WSL中安装:sudo apt install -y cgdb
gdbgui
- 基于浏览器的 GDB 前端
- 通过 pip 安装: sudo pip install gdbgui
DDD (Linux/Win/WSL/X-Server)
- 官方 GNU 调试器前端
- 用户界面有点老式,但实际上如果你花一些时间使用它,它非常有用。
- 在Ubuntu/Debian/WSL中安装: sudo apt install -y ddd
WinDBG (Win)
在 Microsoft Visual Studio 中的GDB调试器。
seer (Linux)
相对较新的基于Qt的GDB GUI前端
Online GDB
适用于 C、C++、Python 和许多其他语言的在线编译器和调试器工具。
附上原文链接
如果文章对您有用,请随手点个赞,谢谢!^_^