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