Permalink
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
198 lines (125 sloc) 3.11 KB

GDB

启动 GDB

gdb 可执行文件名

比如要调试 beansdb,则直接输入 gdb beansdb

设置断点

break main

break 可以简写成 b

断点可以通过函数名,当前文件内行号等设置:

break 函数名
break 行号
break 文件名:行号
break 文件名:函数名
break +偏移量 #当前位置之后 3 行
break -偏移量
break *地址

如果不设置指定断点,则默认是下一行设置断点。

b

可以通过 info 来看有哪些断点

i b # info break

运行

直接在 gdb 里面执行 run 命令就可以,如果本身有参数,还可以在后面加参数,比如启动某一个服务的时候需要配置文件,则需要在 run 后面跟响应的参数:

run -conf /etc/xxxxoooo.conf

显示栈帧

显示所有栈帧

backtrace

bt

info stack

where

显示前 N 个栈帧

bt N

显示最后 N 个栈帧

bt -N

显示局部变量与栈帧

bt full

显示变量

print

p

显示寄存器

info reg

i r

也可以在寄存器前添加 $ 显示各个寄存器的内容。

p $sp

p 输出信息的可以使用不同的格式

p/格式 变量

格式列表如下:

格式 说明
x 十六进制
d 十进制
u 无符号十进制
o 八进制
t 二进制
a 地址
c 字符串
f float
s string
i 机器码

x 可以显示内存中的内容,格式跟 p 类似

x/格式 地址

x/10i $pc // 查看 pc 寄存器指向地址开始的10条汇编

单步调试

n/next 下一步
s/step 下一步,可以进入函数内部
nexti 下一行汇编
stepi 下一行汇编,可以进入函数内部
c/continue 继续执行直到下一个断点

监视点

watch xxx // xxx 发生变化时暂停, xxx 通常为变量
awatch xxx // xxx 被访问或者发生变化时暂停
rwatch xxx // xxx 被访问时

改变变量的值

set variable xxx=123

attach 到进程

需要调试一个已经启动的进程时,可以这么做。

gdb

(gdb) attach 1234 //1234 为进程号

保存历史记录:

  • set history hilename demo.gdb
  • set history save