文先生的博客 求职,坐标深圳。(wenfh2020@126.com)

GDB 使用

2019-02-19

gdb 常用命令和使用方法。


1. 命令

1.1. 基础命令

详细文档通过命令查看:

1
man gdb
命令 操作
r 运行调试
n 下一步
c 继续运行
ctrl + c 中断信号
c/continue 中断后继续运行
s 进入一个函数
finish 退出函数
l 列出代码行
b 断点
显示断点列表 info b
删除断点 delete
清除断点 clear
until 跳至行号
until number
p 打印
打印数组信息 p *array@len
p/x 按十六进制格式显示变量
bt/backtrace 堆栈bt <-n>
-n表一个负整数,表示只打印栈底下n层的栈信息。
f/frame 进入指定堆栈层
f number
thread apply all bt 显示线程所有堆栈
info threads 查看多个线程
thread <thread id> 调试某个线程。
attach 绑定进程调试
attach -p pid
detach 取消绑定调试进程
disas/disassemble 看二进制数据
disassemble func
x 查看内存
focus 显示源码界面
display 显示变量
info registers / register <reg> 查看寄存器
info win 窗口切换
fs cmd
fs src
display 追踪查看具体变量值。
undisplay 取消追踪观察变量。
watch 监控变量,当变量发生修改时,打印显示。删除对应监控变量,可以先 info watch,然后 delete 对应的号码。
i watch 显示观察点。

1.2. 内存命令

可以用 examine 命令(简写 x ) 来查看内存地址中的值,x 命令语法:

n/f/u 三个参数可以一起使用

1
x/<n/f/u> <addr>
  • 参数。
参数 描述
n 正整数,内存的长度
f 表示显示的格式,如果地址所指的是字符串,那么格式可以是 s,地址是指令地址,格式是 i
u 从当前地址往后请求的字节数,GDB默认是4个bytes。u 参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字 节,g表示八字节
  • f 显示格式。
命令 操作
x 按十六进制格式显示变量
d 按十进制格式显示变量
u 按十六进制格式显示无符号整型
o 按八进制格式显示变量
t 按二进制格式显示变量
a 按十六进制格式显示变量
c 按字符格式显示变量
f 按浮点数格式显示变量
  • demo。
1
2
-exec x/1xg 0x400c6a
0x400c6a <Drived::Drived()+68>:	0xb01840c748f8458b

1.3. 其它

1.3.1. 带参数调试

1
2
gdb --args ./proc <arg1> <arg2>
# (gdb) show args

1.3.2. 打印完整的数据结构

1
set objects print on

2. 可视化

2.1. tui

1
info win

gdb 可视化,layout 用于窗口操作

1
2
3
4
5
6
7
8
9
10
11
12
13
(gdb) help layout
Change the layout of windows.
Usage: layout prev | next | LAYOUT-NAME
Layout names are:
   src   : Displays source and command windows.
   asm   : Displays disassembly and command windows.
   split : Displays source, disassembly and command windows.
   regs  : Displays register window. If existing layout
           is source/command or assembly/command, the
           register window is displayed. If the
           source/assembly/command (split) is displayed,
           the register window is displayed with
           the window that has current logical focus.
  • 查看具体窗口
命令 操作
layout src 显示源代码窗口
layout asm 显示汇编窗口
layout regs 显示源代码/汇编和寄存器窗口
layout split 显示源代码和汇编窗口
layout next 显示下一个layout
layout prev 显示上一个layout

2.2. gdb-dashboard

gdb-dashboard 可以优化 gdb 的可视化终端,比原生的体验更好一点,安装也比较简单,但需要 python 支持。

1
2
3
4
# 安装 python 插件。
pip install pygments
# 支持 gdb 低版本的配置。
wget -P ~ https://raw.githubusercontent.com/wenfh2020/shell/master/gdb/.gdbinit

3. 参考


作者公众号
微信公众号,干货持续更新~