Linux GDB调试命令

启动 GDB

gdb -tui:分屏显示源代码
gdb -q:不显示开始的提示信息

可以在.bashrc 中加入别名:

1
alias gdb="gdb -q -tui"

开始调试

执行 run(需要提前设置断点),也可以在调试过程中重新运行调试的程序,run 后可以跟随发给该程序的任何参数。

常用命令

命令 功能
list(简写 l) 显示当前行前面和后面的 10 行代码
list n1 n2 显示 n1 到行和 n2 行之间的代码
list main 显示 main 函数代码
info functions regex 列出符合正则表达式的函数名称
info breakpoints(简写 info b) 查看当前所有的断点信息(断点号,断点类型,断点位置)
break func 在当前文件的 func 函数处设置断点
break fileName:N 在某文件的第 N 行处设置断点,当前文件第 N 行设置断点可以忽略 fileName
break func(或 fileName:N) if exp 条件断点,exp 成立则断点
delete N 删除第 N 号断点
delete 删除所有断点
clear N 清除第 N 行上的断点
watch exp exp 成立程序停住
next(简写 n) 单步执行,遇到函数会跳过
next N 执行 N 次单步执行
step(简写 s) 单步执行,遇到函数会进入
finish 执行完当前函数,返回到调用它的位置
continue 运行到下一个断点处
until(简写 u) 鼠标放到代码行,运行到该代码行停止
jump N 跳转到第 N 行开始执行,不会主动在 N 行停住
run 重新运行调试的程序,可以带参数
[Enter] 直接回车执行上次执行的命令
print var(简写 p) 查看变量 var 的值
print /x var 按 16 进制格式显示变量值
ptype var 查看变量 var 的结构或类型
backtrach 查看调用堆栈

多进程调试

在调试多进程程序时 GDB 默认只会调试主进程,但是 GDB(>V7.0)支持对多进程分别或同时调试。换句话说,GDB 可以同时调试多个程序。只需要设置 follow-fork-mode(默认值:parent)和 detach-on-fork(默认值:on)即可。

follow-fork-mode detach-on-fork 说明
parent on 只调试主进程(GDB 默认)
child on 只调试子进程
parent off 同时调试两个进程,gdb 跟主进程,子进程 block 在 fork 位置
child off 同时调试两个进程,gdb 跟子进程,主进程 block 在 fork 位置

设置方法:set follow-fork-mode [parent|child] set detach-on-fork [on|off]

查询正在调试的进程:info inferiors
切换调试的进程: inferior
添加新的调试进程: add-inferior [-copies n] [-exec executable] ,可以用 file executable 来分配给 inferior 可执行文件。
其他:remove-inferiors infno, detach inferior