GDB 的命令还挺多,这是我记下来的一些常用命令,供大家参考,可能对应不上最新版的GDB,我参考的时候是GCC-8.0 对应的GDB 。
很多命令可以 show 显示出的,都可以用 set 来设置,譬如有 show inferior-tty 就有 set inferior-tty ,大部分情况下反之亦然。
开始调试:
运行一个程序
file [path] 打开一个可执行文件
set args [arg1] [arg2] .... 设置程序的运行参数
修改程序的运行环境
cd [dir] 修改启动程序的运行目录
pwd 查看启动程序的运行目录
set env A=B 设置程序的环境变量
运行代码
run / r [args] [> outfile] [< infile] 运行程序
kill / k 结束程序
set follow-fork-mode {master | child} 设定 fork 时的跟随模式
info terminal 查看GDB运行程序时所利用的terminal的信息
show inferior-tty 现在正在使用的tty (set 可以设置)
执行命令/函数
查看源代码
list [ n | - n | function | linenum ] 查看源代码的内容游标后n行,前n行,某个函数,某个
set listsize [n | unlimited] 设置每次 list 显示的行数 (show)
查看运行进度
bt [num | -n num | full] 查看调用堆栈信息 可以给出层数
+ set backtrace limit [n | unlimited] 设置默认的堆栈显示长度
set filename-display {relative/absolute} 设定文件名显示策略 相对/绝对
查看某个栈帧的信息
frame / f [address ... | function ... | view ... | level ...] 查看当前的栈帧信息
up [n] 去到外n层栈内,
down [n] 去到里n层栈内
info frame 查看当前过程帧的信息
info locals 查看局部变量的信息(对GCC版本有要求,要求DWARF信息, -g选项需要打开)
info args 查看参数信息
查看变量信息
print [expr] 查看某个变量的信息
print /f [expr] 查看变量,用格式
x = 十六进制, d = 十进制 , u = 非负十进制, o = 八进制, t = 二进制 (two), c = 字符, s = 字符串
a = 地址,f = 浮点, z = 类似 x,不过会补齐前缀0, r = 原始
TODO:
查看某个函数的信息
查看某个函数在变形前的名称 (或变形后)