gdb调试命令
启动gdb调试:
gdb program --------> 启动名为program可执行文件的调试
gdb program PID ----> 调试一个正在运行的程序,根据程序名和进程号PID(ps可以查看PID)
gdb program . attach PID --> 调试一个正在运行的程序,根据程序名进入gdb,attach关联进程
gdb program core ---> 用gdb同时调试一个程序和其执行出错产生的core dump文件
显示源代码:
l/list ------------> 从第一行开始列出源码
list LINENUM -------> 显示程序第LINENUM行周围的源程序
list FUNC ----------> 显示FUNC函数的源程序
list/list- ---------> 显示当前行后面/前面的源程序,一般是5行
set listsize COUNT -> 设置一次显示源代码的行数
show listsize ------> 查看当前listsize的设置
list FIRST, LAST --> 显示从first行到last行的源码
设置断点:
break NUM ---------> 在源码的第NUM行设置断点
break FUNC --------> 在FUNC函数入口处设置断点
info break --------> 查看断点信息
break +offset/-offset ------> 在当前行号的 前面或后面的offset行停住
break filename:linenum -----> 在源文件filename的linenum行停住
break filename:func --------> 在源文件filename的func函数入口处停住
break …… if <condition> ----> 当if语句条件成立时,停住
运行步骤:
r/run --------------> 运行程序
n/next -------------> 逐语句执行
c/continue ---------> 继续运行程序
p/print ------------> 打印变量的值
finish -------------> 退出函数
q ------------------> 退出gdb
命令行参数:
set args -----------> 设置命令行参数
show args ----------> 显示命令行参数
线程信息:
info threads -------> 查看线程信息
thread TID ---------> 切换到TID对应的线程
break LINENUM thread TID -----> 在源程序的LINENUM行给TID线程设置断点
例:(gdb) break frik.c:13 thread 28 if bartab > lim
堆栈信息:
bt -----------------> 打印当前函数调用栈的所有信息
bt N ---------------> 只打印栈顶上N层的栈信息
bt -N --------------> 只打印栈底下N层的信息
f/frame NUM --------> 切换到NUM对应的栈,0表示栈顶
up/down NUM --------> 向栈的上面/下面移动NUM层
info f/frame -------> 打印详细的当前栈层信息
info args ----------> 打印出当前函数的参数名及其值
info local ---------> 打印出当前函数中所有局部变量及其值
info catch ---------> 打印当前函数中的异常处理信息
补充:
p *array@len -------> 显示数组内容
x/examine ADDR -----> 显示内存地址ADDR的值
display EXPR -------> 自动显示EXPR变量的值