l(list) :显示代码b + 行号/函数名(breakpoint):在指定位置加断点delete + 断点号:删除指定断点clear + 行号:删除指定断点enable + 断点号:将断点设定为无效的,不加断点号,将所有断点设置为无效r(run):运行程序n(next):下一步c(continue):直接执行到下一个断点s (step):进入将要被调用的函数中执行finish :一直执行当前函数,直到碰到断点或执行完当前函数p + 变量名(print):打印变量值回车:重复上一行命令q:退出调试,中止进程info b/break:显示断点信息bt:显示函数调用栈
编译:
gcc -g -Wall -o test test.c
进入gdb调试界面,并在12行打断点

启动程序后,在14行打断点,然后继续运行,这时会先执行13行printf,然后阻塞在14行的断点处

我们打印一下n和g_var的值,看是否和printf的相同

使用s进入函数,finish结束当前函数

我们重新启动程序,进入add函数后bt打印一下函数调用堆栈

再次重新启动程序,删除第17行的断点

gdb attach 进程号:调试进程
info threads:显示当前进程的线程信息
thread 线程号:进入当前线程