声明:在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 变量 =值:当执行到某处时在作用域范围内可以修改某个变量的值

Logo

更多推荐