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 和许多其他语言的在线编译器和调试器工具。
附上原文链接
 如果文章对您有用,请随手点个赞,谢谢!^_^



















