GDB 简略手册

杂项

命令用法说明
h[elp]help显示可用帮助文档
h CMD显示关于指定命令的帮助
apr[opos]apr REGEXP使用正则表达式搜索命令
i[nfo]info显示可展示的信息
ENTER无命令回车重复执行上一次命令

断点

命令用法说明
info breaki b显示全部断点和检查点信息
info watchi wat显示全部检查点信息
b[reak]break在当前位置添加断点
b N在指定行添加断点
b +N在当前行偏移 N 行后添加断点
b FUNC在指定函数开头添加断点
wa[tch]wa EXPR添加检查点,当表达式值变化时程序中断
rw[atch]rw EXPR添加检查点,当表达式被读取时程序中断
aw[atch]aw EXPR添加检查点,当表达式被读写时程序中断
d[elete]delete删除全部断点和检查点
d N删除指定编号的断点或检查点
cl[ear]clear删除当前位置的断点
cl LOC删除指定位置的断点 (参数同 b)
dis[able]disable使全部断点和检查点失效
dis N使指定编号的断点或检查点失效
en[able]enable使全部断点和检车点生效
en N使指定编号的断点或检查点生效

运行

命令用法说明
r[un]run [ARGS]开始运行程序
filefile FILE使用 FILE 为被调试程序
at[tach]at PID将调试器 attach 到已经在运行的程序
q[uit]quit退出 GDB
Ctrl-C按下组合键终止正在运行的程序
n[ext]n [N]单步运行
s[tep]s [N]单步运行,会进入被调用函数
fin[ish]finish执行完当前函数
c[ontinue]c [N]继续执行程序直到下一 (N) 个断点
adv[ance]adv LOC执行到指定位置 (参数同 b) 或者当前函数结束

汇编相关

命令用法说明
disas[semble]disassemble显示反汇编指令
n[ext]ini [N]单步指令运行
s[tep]isi [N]单步指令运行,会进入被调用函数

变量

命令用法说明
p[rint]p EXPR打印表达式值
p *PTR打印指针指向的变量值
p VAR@N打印从 VAR 起的 N 个连续变量
p/FMT EXPR格式化打印
pt[ype]pt VAR显示变量类型
info locali lo显示所有局部变量
info argsi ar显示所有函数参数
disp[lay]disp [/FMT] EXPR]持续显示表达式值
und[isplay]und N取消持续显示
info displayi disp查看所有被持续显示的表达式
setset VAR设置变量的值

print 支持的 FMT 格式:
x (16进制)、z (前面填充0的16进制)、d (10进制)、u (无符号10进制)、o (8进制)、t (2进制,Two)、f (浮点数)、a (地址)、c (字符)、s (字符串)

栈回溯

命令用法说明
b[ack]t[race]backtrace / bt显示当前函数调用栈
f[rame]frame显示当前 (调用栈) 位置
upup在当前函数调用栈中上移一层
do[wn]do在当前函数调用栈中下移一层

多线程程序中 thread apply all bt 可用于显示所有线程的函数调用栈。

多线程

命令用法说明
i threadi thread查看所有线程状态
t [t_id]t N切换到指定线程

查看源码

命令用法说明
l[ist]list显示当前位置附近的源码
l *$rip显示当前位置附近的源码
l N显示指定位置 (行) 附近的源码
l CLASS/FUNC显示指定类/函数源码

TUI (Text User Interface) 模式

三种进入方法:

  • 启动 GDB 时加入 -tui 参数
  • 在 GDB 命令行输入 tui enable
  • 在 GDB 命令行中按下 Ctrl+X, A 组合键
命令用法说明
la[yout]la src显示源码视图
la asm显示反汇编指令视图
la regs显示寄存器视图
la prev显示前一个视图
la next显示后一个视图
focusfs [WIN | prev | next]移动窗口焦点
info wini wi显示窗口信息

关于窗口焦点:如果除了 cmd 之外的窗口获得了焦点,则可以通过方向键或者在命令行中输入 -, +, <, > 来移动显示。

Coredump

在终端执行 ulimit -a 命令查看系统的用户限制中 -c 一项的值,如果是 0 则表示禁止生成 corefile,我们可以将其设为 unlimited,即执行 ulimit -c unlimited (注意:ulimit 设置只对当前终端有效,如果想一直生效,可以把该命令写入 /etc/profile 文件)。

默认 corefile 生成在当前目录下,文件名为 core,其生成模板定义在 /proc/sys/kernel/core_pattern 中,可自定义生成模板,比如:

sudo bash -c 'echo "/home/core-%e-%p-%s-%t" > /proc/sys/kernel/core_pattern'

生成模板中支持的变量有:

  • %e 可执行文件名 (无路径)
  • %E 可执行文件完整路径
  • %i 出 core 的线程 TID
  • %p 出 core 的进程 PID
  • %s 导致 core 的信号数字
  • %t 时间戳
  • %u 出 core 的进程 UID

加载 corefile 来分析 core 原因:gdb EXEFILE COREFILE

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值