GDB基础操作
- 参考课程CppCon 2015: Greg Law " Give me 15 minutes & I’ll change your view of GDB" - YouTube
- GDB Tutorial: Essential GDB Tips to Learn Debugging (techbeamers.com)
Step1 开始调试
- 使用
gxx -g file选项,在编译时保留调试信息 gdb file.out启动调试
- 输入q退出
Step2 运行程序
-
run [args]开始运行程序[args]为可选命令行参数- 也可以使用缩写
r
-
start也可以启动程序,但是会在main函数第一行自动设置一个断点 -
在程序运行过程中,使用
run or start可以重新启动程序 -
使用
list查看源代码-
使用缩写
l -
l ([函数名],行号)可以显示指定函数或行号开始的代码 -
一般gdb还会显示指定位置之前的几行代码,如图所示
-

-
-
next执行下一行代码。注意:这个行不会进入函数 -
step,缩写s,进入函数 -
continue直到下一个断点
Step3 设置断点
-
break设置断点
- 同样的,可以使用b作为缩写
-
b linenum在(当前文件的)指定行设置断点 -
b file:line/func在指定文件的行或者函数设置断点 -
如果你想要在没有debug支持的文件(例如没有使用-g)中设置断点。
b *(memory address)可以在指定的位置设置断点 -
通过command,你可以在达到指定断点时,执行指令
-
(gdb) b CheckValidEmail Breakpoint 1 at 0x8049d87: file ../../test/testgdb.c, line 107. (gdb) command 1 # Note: #1: 1 is the breakpoint number. #2: Here you can specify set of commands to execute. #3: To close the command block, use the "end" keyword. >print port >print IPAddr >print User >print Pwd >end (gdb)
-
-
使用
info b显示所有断点 -
ignore b-index times来忽略指定断点指定次数 -
delete(或者缩写d) b-index删除指定断点,单写一个d可以删除所有断点
Step4 打印信息
-
frame打印当前的语句 -
backtrace可以显示堆栈信息- 或者使用缩写bt
-
使用where
-
例如一个简单的递归程序
-
// // Created by Anti on 2022/11/3. // void stack(int x) { if(x==10) return; stack(x+1); } int main() { stack(1); } -
通过
b stack打上一个断点,然后continue多次后使用bt查看堆栈信息 -

-
-
print打印变量
-
缩写p
-
p 变量(int,char等)
-
p 结构化变量
-

上图为用gdb打印数组信息
-
-
p *pointer打印指针的值
-
Step5 不知道怎么分类的操作
- 使用
finish完成当前函数(运行到直到这个函数返回之前)- 缩写fin
- 会被断点打断
return [exp]从当前函数返回,也可以指定一个值返回- 使用
watch <variable name>来给指定变量添加一个watchpoint,当该变量发生变化时停止程序

581

被折叠的 条评论
为什么被折叠?



