by yejinlei 0.1 beta
断点相关
disable/enable/delete 断点号
clear //删除当前帧函数、行内所有断点
b/break if 条件 //条件断点
watchpoint //观察点(数据断点)
catchpoint //捕捉断点
tcatch/catch [throw] //C++抛出异常 catch //C++捕获异常 exec //系统调用exec fork //系统调用fork vfork //系统调用vfork load //系统调用load unload //系统调用unload
tracepoint //跟踪点
breakpoint [条件] //普通断点
tb/b 函数名 文件名:函数 行号 文件名:行号 +/-偏移量 *地址
checkpoint //书签
checkpoint
restart n
指令选项
disass func //查看函数指令
设置选项
显示选项
其他选项
其他
shell shell命令 //gdb中执行shell命令
set history expansion on //允许使用历史命令,Ctrl+R
make 参数
日志输出
set logging on //日志 set logging off set logging file file set logging overwrite [on|off] set logging redirect [on|off] show logging
show version
apropos 表达式 //在gdb命令和文档中搜索内容
show environment [varname] //显示环境变量 set environment varname=[value] unset environment varname
FAQ
出现"No such file or directory", 首先找到文件目录,(gdb)cd 目录
出现“ptrace:Operation not permitted”, 查看是否已经存在gdb进程,kill掉再重新attatch
信号量相关
handle 信号量名 stop/nostop //出现信号量时,停止/不停止
signal 信号量 //gdb发送信号量给程序
线程相关
thread 线程号 //切换线程
进程相关
set follow-fork-mode [parent|child] //程序调用fork后,选着父进程还是子进程
set detach-on-fork [on|off]
info相关
info break/watch //显示用户断点
info locals //显示当前栈帧局部变量
info win //窗口大小
info program //程序运行状态
maint info break //所有断点
info threads //线程信息
info signals/handle //信号量信息
info catch //异常信息
info trace //跟踪信息
info checkpoint //书签信息
info functions //函数信息
info sources //源码列表
info source //源码
info reg //寄存器信息
info all-reg //所有寄存器,包括浮点
info display //自动显示的信息
info inferiors //被调试程序信息
line func/line //源码在内存的地址
堆栈相关
bt/backtrace [full][+/-N] //显示堆栈
f/frame i //选择帧
调试相关
s/step //单步,步入 si/stepi //同s,并显示机器指令 n/next //单步,步过 ni/next1 //同n,并显示机器指令
start //同b main
finish //退出程序
return //退出函数
kill //kill进程
attach 进程号 //附着进程 detach 进程号
call 函数 //gdb直接调用函数
GDB7.0反向调试
record /record stop //开启和关闭反向调试
Reverse-continue('rc') Reverse-finish Reverse-next('rn') Reverse-nexti('rni') Reverse-step('rs') Reverse-step set exec-direction
command
jump func/addr //改变流程 set $pc=value
代码相关
l/list [m,n] //显示代码
gdb -tui 程序
layout next //切换到下一个布局模式 layout prev //切换到上一个布局模式 layout src //只显示源码 layout asm //只显示汇编指令 layout split //显示源码和汇编指令 layout regs //显示寄存器 focus cmd/src/asm/regs/next/prev //切换当前窗口 refresh //刷新所有窗口 tui reg next //显示下一组寄存器 tui reg system //显示系统寄存器 update //更新源码窗口和当前执行点 winheight name +/- line //调整name窗口高度 tabset //设置tab的字符数
search 表达式
变量内存相关
file:var //全局变量
func:var //函数内部变量
p/print [/x][/F] var //变量值 x 按十六进制格式显示变量 d 按十进制格式显示变量 u 按十六进制无符号格式显示变量 o 按八进制格式显示变量 t 按二进制格式显示变量 a 按十六进制格式显示变量 c 按字符格式显示变量 f 按浮点数格式显示变量
whatis var //变量类型 ptype var
set var=value //变量赋值
print *数组名@长度 //显示动态数组 print 数组名 //显示静态数组
display 表达式/变量 //自动显示内容
x/<长度/格式/字节> <地址> //显示内存内容
装载相关
file 程序 //装载程序和符号
gdb 程序
start 参数列表 set args 参数列表 //修改main参数
gdb 程序 进程号 //attach方式 (gdb)attach 进程号
gdb -p 进程号 //attach方式 (gdb)file 程序
gdb --args 程序 参数
gdb -s 程序名 //加载符号,等同file
gdb -c core //加载核心文件
gdb -d 目录 //搜索源码程序路径
编译相关
gcc -g demo.c -o demo //注意-g
核心文件相关
ulimit -c unlimited/0 //产生/取消核心文件
~/.bash_profile中加入ulimit -S -c unlimited > /dev/null 2>&1 或 /etc/profile加入 或 /etc/security/limits.conf加入 * soft core 0
gdb 程序名 -c core