Linux gdb
gdb(GNU Debugger)是一款命令行调试工具,主要用于定位和修复程序中的错误。
它支持设置断点、单步执行代码、查看变量值、检查内存状态等功能,能帮助开发者追踪程序执行流程,找到崩溃、逻辑错误等问题,广泛适用于 C、C++ 等语言的程序调试。
1.进入 gdb
我们创建写好的c语言文件或者c++文件 要通过gcc\g++ 变成可以执行程序
才能呗gdb调试
gdb是debug模式
但是gcc和g++编译器默认生成的可执行文件是release文件
因此我们在使用gcc 生成可执行文件要加上 -g
这样我们的.out文件才可以被调试
gdb 可执行文件名 --进入gdb
2.l(list)
这个地l和list可以混用是等价的
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l 函数名:列出某个函数的源代码。

3.b(break)
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点

4.i b(info breakpoint)
info break和info breakpoint是完全等价的
info break :查看断点信息

5.d breakpoint(delete breakpoints)
这个地方breakpoint不可以缩写成b
因为这个地方b除了breakpoint 还有可能是bookpoints
容易产生歧义
delete breakpoints:删除所有断点
delete breakpoints n:删除序号为n的断点
6.dis b(disable breakpoints)
和delet breakpoint一样 如果后面不加列 就是代表禁用所有断点
disable breakpoints:禁用断点

7.en b(enable breakpoints)
enable breakpoints:启用断点
和delet breakpoint一样 如果后面不加列 就是代表禁用所有断点

8.r(run)
run(或r):从开始连续而非单步执行程序
run会在第一个断点停下来

9.!clear
!clearh和Linux中的clear功能相同
10.n(next)
n 或 next:单条执行
等同于vis中的F10

11.s(step)
s或step:进入函数调用
等同于vis中的F11
不是函数的时候和n(next)没什么区别
12.finish
finish:执行到当前函数返回,然后挺下来等待命令
对代码做一些小的改动

13.until
until X行号:跳至X行
14.display
display 变量名:跟踪查看一个变量,每次停下来都显示它的值

15.undisplay
undisplay:取消对先前设置的那些变量的跟踪

16.set var
set var:修改变量的值

17.q(quit)
quit:退出gdb
18.p(print)
print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
(1)打印变量或者表达式的值
p x --打印变量的值
p a + b --打印表达式的值
(2)通过表达式修改变量值
p x = 20
(3)调用函数
p add(2, 3)
19.c(continue)
continue(或c):从当前位置开始连续而非单步执行程序
程序已处于暂停状态(如命中断点、被信号暂停)时,从当前暂停的位置继续执行,直到遇到下一个断点或程序结束。
20.bt(breaktrace)
breaktrace(或bt):查看各级函数调用及参数

#0、#1…:栈帧编号(#0 是当前最内层函数,编号越大越接近程序入口)。
add(a=2,b=3):函数名 + 参数值(显示当前层函数及传入的参数)。
at example.c:6:代码位置(函数所在的文件名和行号)。
21.ifo locals
info(i) locals:查看当前栈帧局部变量的值
