type
status
date
slug
summary
tags
icon
password

GDB的一些调试小技巧

1、 next

next命令(简写为n),是让GDB完整的执行当前行(包含行里的函数调用)然后调到下一个命令去(在这里的下一行命令指的是逻辑上的下一行,而不是有关于位置上的下一行)

2、 step

step命令(简写为s),是进行单步调用,遇到函数的调用的话就进入当函数内部。完整的,一步步的进行步骤。

3、 finish

在某个函数里面调试一段时间之后,不再需要一步步执行到函数返回处,希望直接执行完当前函数并且返回到上一层调用处。可以使用finish命令。(finish命令是会执行剩下的代码,然后返回到上一层)

4、 return

命令是立即结束执行当前函数并返回,也就是说,如果当前函数还有剩余的代码未执行完毕,也不会执行了(最后可能会导致未执行的地方没有处理导致最后得到的结果错误)。
例子:finish-return_test.c
notion image

5、 jump

形式为:jump <location>
location 可以是程序的行号或者函数的地址,jump 会让程序执行流跳转到指定位置执行,当然其行为也是不可控制的,例如您跳过了某个对象的初始化代码,直接执行操作该对象的代码,那么可能会导致程序崩溃或其他意外行为。jump 命令可以简写成 j,但是不可以简写成 jmp,其使用有一个注意事项,即如果 jump 跳转到的位置后续没有断点,那么 GDB 会执行完跳转处的代码会继续执行。
jump命令除了跳过一些正常代码的执行以外,还有一个好用的方式就是可以执行一些我们想执行的代码。比如说,判断语句if…else…的判断下只执行了if而没有执行else,如果我们想要执行else的话,就可以使用jump指令,跳转到任意想执行的地方。
例:jump_test.c

6、 查看变量

① 值

查看变量值有两种方式:
第一种是根据地址来查看变量,这个时候用到的指令是x
格式:x 地址 作用:查看指定地址的内存
格式:x </n/f/u> 地址              作用:以指定形式输出内存内容
n:是正整数,表示需要显示的内存单元的个数,即从当前地址向后显示n个内存单元的内容,
一个内存单元的大小由第三个参数u定义。
f:表示addr指向的内存内容的输出格式,s对应输出字符串,此处需特别注意输出整型数据的格式:
x 按十六进制格式显示变量.
d 按十进制格式显示变量。
u 按十进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
u:就是指以多少个字节作为一个内存单元-unit,默认为4。u还可以用被一些字符表示:
如b=1 byte, h=2 bytes,w=4 bytes,g=8 bytes.
第二种是根据变量名来显示,这个时候用的指令是p
格式:p 变量名         作用:查看变量

② 类型

所谓类型就是看这个变量属于什么类型
格式:ptype 变量 查看变量

7、 frame

简写为f,切换到当前调用线程指定堆栈,具体堆栈通过堆栈序号指定
格式:frame 堆栈序号
CMake的一些小技巧数据预处理优化
Loading...
JucanaYu
JucanaYu
干饭人,干饭魂🍚
最新发布
Python练习-add
2025-5-16
Pytorch中的TensorBoard如何使用
2025-5-8
deepspeed转huggingface格式
2025-5-5
在大模型的训练文件中加入swanlab来监控实验进程
2025-4-29
Python练习-类型转换
2025-4-9
Python练习-count、remove、append、extend
2025-4-8