GDB调试器快速参考手册。自用

388阅读 0评论2012-06-13 nanye1984
分类:

该文章是转自:http://lubobill1990.blog.163.com/blog/static/369303862010913105122718/
有利于快速查找gdb命令,备忘

常用查看命令
  • 寄存器(也可以使用print 寄存器名称查看)
    • info registers 查看寄存器情况(浮点寄存器除外)
    • info all-registers 查看所有寄存器情况
    • info registers 查看指定寄存器情况
  • 栈信息
    • backtrace 打印所有栈
      • backtrace 只打印上n层栈信息
      • backtrace <-n> 只打印下n层栈信息
    • frame 当前栈层简要信息
    • up 查看上一层栈
      • up-silently
    • down 查看下一层栈
      • down-silently
    • info frame 详细的栈层信息
    • info args 函数参数名及其值
    • info locals 当前函数所有局部变量及其值
    • info catch 当前函数异常处理信息
  • 源程序
    • list 当前行后的源代码
      • list 某行的源代码
      • list
      • list , 行数范围内的源代码
      • list 某函数的源代码
      • list
      • list - 当前行前的源代码
      • list +往后显示源代码
      • list <+/- offset>
      • set listsize 设置一次显示的行数
      • show listsize 显示设置的参数
  • 源代码内存
    • info line
    • disassemble 查看源程序汇编码
      • disassemble
变量操作命令
  • 查看单个数据
    • print [/] / 输出格式(十六进制/x) 表达式
    • print $编号 每个print都会被编号,使用编号可以查询以前查询过的表达式
  • 输出格式
    • x 十六进制格式显示变量
    • d 十进制格式显示变量
    • u 十六进制格式显示无符号整型
    • o 八进制格式显示变量
    • t 二进制格式显示变量
    • a 十六进制格式显示变量
    • c 字符格式显示变量
    • f 浮点数格式显示变量
  • 查看变量类型
    • whatis <变量>
  • 修改变量的值(修改运行时的变量值)
    • print <变量>=<赋值>
    • set [var] <变量>=<赋值> 加var是为了防止变量名和gdb配置文件中的变量名相同,因为set <变量>=<赋值>同样可以修改gdb配置文件
  • 全局变量和局部变量
    • 如果全局变量和局部变量名称相同,通过名称访问局部变量,通过file::<变量>访问全局变量
  • 表达式
  • 数组
    • print *array@len 查看动态分配内存的数组的值
  • 查看内存
    • x /
      • n表示正整数表示显示内存长度
      • f表示显示格式,s地址所指的是字符串,i地址是指令地址,输出指令,u浮点
      • u从当前地址往后请求的字节数,b单字节,h双字节,w四字节,g八字节
  • 变量自动显示
    • display 每当遇到断点,都将自动显示出来
    • undisplay delete display
    • disable display
    • enable display
    • info display 打印自动显示项目的信息
程序断点运行调试命令
  • 断点操作
    • break
    • break
    • break +/- offset
    • break filename:lineNum
    • break filename:function
    • break *address
    • break if
    • info breakpoint
  • 观察点操作
    • watch 一旦表达式值有变化,停止程序
    • rwatch 当变量被读,停止程序
    • awatch 当变量被读写,停止程序
    • info watchpoints 列出所有观察点
  • 捕捉点操作 捕捉程序运行时的事件
    • catch throw catch exec fork vfork load[libname] unload[libname]
    • tcatch 只设置一次捕捉点,当程序停止,自动删除该点
  • 重载函数的断点维护
  • 各种断点的维护
    • clear 清除断点
      • clear
      • clear
      • clear
      • clear
    • delete 删除所有断点
      • delete 断点号或者断点范围
    • disable 禁用所有断点
      • disable 断点号或者断点范围
    • enable 开启断点
      • enable [breakpoints] once range... 当程序在该点停止后,马上禁用该断点
      • enable [breakpoints] delete range... 当程序在改点停止后,马上删除该断点
    • 条件断点维护 当条件成立时,停止程序
      • condition 修改断点号为bnum的停止条件是expr
      • condition 清除断点号为bnum的停止条件
      • ignore 忽略bnum停止条件count次
    • 断点自动化操作 当调试程序停止,自动执行命令
      • commands [bnum]
command-list end break foo if x>0 commands printf "x is %d\n",x end 单步调试
  • step 单步调试,可以进入函数
  • next 单步调试,不进入函数
  • continue/c/fg [ignore-count] 程序继续运行,忽略断点次数 count次
  • finish 运行程序直到当前程序完成返回,并且打印返回时的堆栈地址,返回值和参数值
  • until 运行程序直到推出循环体
  • stepi nexti 单步跟踪一条机器指令,display/i $pc
信号调试
  • handle
    • signal 定义收到什么信号之后产生操作,可以是单个信号,信号范围,all
    • keywords 定义收到信号后执行什么操作
      • nostop 打印信息表示收到信号,但不停止
      • stop 收到信号停止程序
      • print 收到信号显示信息
      • noprint 收到信号不显示信息
      • pass/noignore 收到信号,gdb不处理,把信号交给调试程序处理
      • nopass/ignore 收到信号,gdb不会让被调试程序处理
    • info signals/info handle 哪些信号在被gdb检测
    • signal 信号量1~15
多线程调试
  • break thread [if...]
    • linespec 断点行号
    • threadno 指定线程id,id由gdb分配,通过info threads来查看,如果不设置,表示对所有线程
    • if 用来指定条件
程序控制命令
  • 跳转控制命令
    • jump 跳转行
    • jump
      /set $pc=
      跳转地址
  • 函数控制命令
    • return [expr] 强制函数返回
    • call /print 强制函数调用
gdb环境设置命令
  • 运行环境设置
    • set args
    • show args
    • path
    • show paths
    • set environment varname [=value]
    • show environment [varname]
    • cd
    • pwd
  • 显示设置 每个设置都可以通过show print xxoo来查看,每个set都是on/off
    • set print address 显示函数时是否显示地址信息
    • set print array 不打开,元素以逗号分隔,打开,每个元素占一行
    • set print elements
    • set print pretty
    • set print seven-bit-strings
    • set print union
    • set print object
    • set print static-members
    • set print vtbl
  • 环境变量
    • set $abc=*object_ptr;
  • 搜索源代码
    • [forward-]search
    • reverse-search
  • 指定源文件路径
    • directory
上一篇:Linux 定时器
下一篇:linux的进程地址空间映射图解