首先在编译时,必须把调试信息加到可执行文件中,使用gcc/g++的-g参数可以做到这点
指令介绍
help 查询指令,查看其它指令的用法,如help print
shell 启动标准shell执行command string,如shell ps,直接shell也可,输入quit退出shell
print 用于打印的指令,搭配参数使用,类似print/x(或p/x),[x/d/u/o/t/a/c/f/s]
set 用于设置gdb内部的一些环境与运行时的参数
set logging on 保存当前调试信息到gdb.txt
set args xxx 传递参数到程序(也可以通过r xxx传递参数)
show 描述GDB本身状态
info(缩写i) 描述程序的状态
info args
info registers
info breakpoints
info thread
-cd/directory 用于指定源码路径(当前gdb的位置不在源码目录下或二进制不在源码目录下,否则会自动查找)
file 用于加载调试用的二进制文件
backtrace(缩写bt) 查看调用栈,[full详细信息|n打印n层调用栈]
next 控制程序向下执行
list(缩写为l) 用于列出源码
thread(缩写为t) 用于切换线程
thread apply all + 指令,对所有线程执行指令
x 以多种格式查看内存
break 设置程序断点,例如 b [func]:num
break [func] if [cond] 条件断点
break *+地址,对地址打断点
delete + 断点号,删除断点
continue 继续执行程序
conmands 在break后增加一些指令,增加break的可操作性
commands + 断点号,输入断点触发信息,end结束
define 将gdb的指令组合起来,方便连续的重复使用,end结束