¶常用命令
help
,help command
:查看帮助
¶设置
gdb启动时会先应用.gdbinit文件中的所有命令,可以把本次调试前需要重复输入的命令写进去。
set disable-randomization off
:关闭程序的虚拟地址空间随机化set print pretty on
:优化结构体打印set print array-indexes on
set history save on
:保留历史命令set pagination off
:关闭分页显示set confirm off
:关闭确认请求
¶启动
set args xxx
,--args program xxx
:设置程序启动时的参数show args
:显示设置的参数ulimit -c unlimited
,gdb program core
:调试coredump文件attach pid
,gdb program pid
:附加到已运行的进程(ps aux | grep program
查看pid)file xxx
:指定要调试的程序symbol-file xxx
:单独加载分离的调试信息r
,run
:开始运行start
:开始运行并暂停在main函数入口!command
:执行shell命令source xxx
,-x xxx
:执行脚本
¶断点
info breakpoints
:查看已设置的断点b linenumber
b filename:linenumber
b function
b test.c:23 if b==0
:条件断点condition 1 b==0
:设置1号断点的条件rbreak regex
:作用于所有匹配regex的函数名tbreak
:设置临时断点,只生效一次watch cond
:观察某个变量或表达式的取值,每次发生变化时暂停(有硬件观察点和软件观察点,硬件观察点的数量有限)disable
:禁用断点enable
:启用断点delete
,delete number
:删除断点command number
:设置在达到number号断点时自动执行的命令
¶查看信息
p
,print
:打印变量p *d
:打印指针指向的值p *d@10
:打印指针指向地址处10个值p $sp
:打印寄存器中的值p/x
:十六进制打印p/t
:二进制打印p/c
:字符打印p/f
:浮点数打印
x
,examine
:查看内存地址的值x/nfu addr
:n是单元数,f是打印格式,u是单元大小,addr是内存地址u
包括b(字节)、h(双字节)、w(四字节)、g(八字节)x/4tb &e
:查看变量e所在地址开始的4个字节的值
bt
:查看调用栈bt n
:只显示前n层栈帧
frame number
:切换到number号栈帧,通常用来查看父函数中的局部变量info frame
:查看当前栈帧信息info args
:查看当前函数参数info locals
:查看当前函数内的局部变量值info registers
:查看寄存器的值info function
:查看函数info classes
:查看类info proc mappings
:查看内存区域映射call func(arg)
:调用函数;比如调用程序内提供的打印函数ptype
:打印变量类型set $a=xxx
:自定义变量,需要以$
开头,用来简化一些长变量dprintf location, formatting-string, expr1, expr2, ...
:在程序的某行插入printf命令(动态打印)
¶调试
l
,list
:显示当前所在行及之后的10行源代码n
,next
:单步执行s
,step
:单步执行,函数调用则会进入函数内(step into)ni
,nexti
:执行一条机器指令si
,stepi
c
,continue
:继续执行到下一个断点u
,until
:继续运行到指定位置或者运行完当前的循环体finish
:继续运行直至当前函数结束
¶多进程
set follow-fork-mode child
:在fork后跟踪调试子进程info inferiors
:查看调试的所有进程的信息(gdb称被调试进程为inferior)
¶多线程
info threads
:查看所有线程信息thread id
:切换到id号线程thread apply all bt
:将命令作用到所有线程上set scheduler-locking off/on
:默认关闭调度器锁,此时运行调试的线程,其它线程也会运行。在开启时,则只有调试的线程会执行,其它线程暂停执行。此外还有step
选项,它保证在单步执行时,永远保持在当前调试的线程下,但其它线程仍然会继续执行;而默认的off
下,如果其它线程遇到断点,会自动切换到其它线程中。
¶tui
layout src
:显示源代码窗口(Ctrl-x-a
切换)layout asm
:显示汇编代码窗口layout reg
:显示寄存器窗口Ctrl-l
:刷新窗口
¶pretty-printer
python/shell command
:运行python/shell命令define
:自定义命令
¶反向调试
record
:开始记录当前调试程序的状态reverse-step/reverse-next
:反向单步执行rr
工具更加好用