Linux-GDB
GDB是GNU开发的开源命令行调试工具,主要用于C/C++程序调试,也支持Go、Rust等语言。使用时需用gcc -g参数编译程序。基本操作包括:启动调试(gdb)、查看代码(l)、设置断点(b)、管理断点(i b/d/en/dis)、调试运行(c/s/n/finish/until)、变量查看与修改(p/display/set var)等。GDB支持条件断点、多断点操作、单步调试等功能,可通过命令
声明:在b站上刷爱编程的大丙的视频后的笔记
介绍:
GDB,全称 GNU Debugger,是 GNU 开源组织发布的一个功能强大的命令行调试工具。它主要用于调试用 C 和 C++ 编写的程序(但也支持其他多种语言,如 Go、Rust、D 等)。
基本启动:
下载
sudo apt update #更新软件包
sudo apt install gdb #下载
gdb --version #检查
使用
gdb 可执行文件
对于可执行文件的要求:使用gcc编译时得使用-g参数,否则不可以调试,且建议加上 -Wall参数。-Wall能够提供gcc能提供的全部警告信息
退出
q或者quit
查看代码 l
命令:l
直接使用 l 会展示当前文件下的10行代码
查看当前代码的上一段代码:l -
指定查看某行的代码:l 文件名 : 行数
因为默认是只展示10行代码,如果需要展示更多就需要设置展示的行数:set list 行数
断点设置
设置断点 b
设置当前文件下的断点:b 行数
设置其他文件下的断点:b 文件名:行数
设置指定文件函数的断点:b 文件名:函数名 ---断点会放在函数的第一行代码处
设置条件断点:b 行数 if 条件 -- 当条件成立就会在指定行处设置一个断点,当有多个条件时用&&连接
查看断点
i b :可以展示断点的信息
删除断点 d
删除断点需要断点的id
删除指定断点:d 断点的id
删除多个断点:d 断点id1 断点id2 断点id3
删除范围断点:d 断点idStart - 断点idEnd
设置断点状态
将断点设置为无效:dis 断点id
将断点恢复为有效:ena 断点id
调试命令
继续运行gdb
当使用了 r 开始运行gdb后,会在断点处停止,想要继续运行,就要使用 c[continue]
打印信息
打印信息有两种实现方式。1是手动实现打印(print),和自动打印(display)
手动打印
print==p,可以简写为p。
p/c i :就是打印 i 这个变量的值,对于值的类型可以设置(和c语言中print输出变量的/x,/d 等等差不多)/x 16进制 ; /d 10进制; /u 无符号10进制;./o 8进制;/t 二进制;/f 浮点型;/c 字符型
ptype 变量:打印变量类型
自动打印
display 变量:也可加上/x等等来设置打印的值类型
i display :查看自动打印的列表
delete display id 或者 undisplay id:删除自动打印
disable display id:取消自动打印(不是删除,将ENA状态变为n)
ena display id :重新启用某个自动打印
单步调试
step:可以缩写为s,命令向下执行一行,如果当前行是函数调用,则进入函数体内部
next:可以缩写为n,也是命令向下执行一行,但如果当前行是函数,也不进入函数体
finish:当使用s进入函数体后,使用finish可以退出函数体,前提是该函数体没有有效断点
until:使用until可以跳出循环体。但条件是,循环体中无有效断点,以及 只能在循环开始行和结束行使用
设置变量值
set var 变量 =值:当执行到某处时在作用域范围内可以修改某个变量的值
更多推荐
所有评论(0)