该文章是转自:http://lubobill1990.blog.163.com/blog/static/369303862010913105122718/
有利于快速查找gdb命令,备忘
常用查看命令
有利于快速查找gdb命令,备忘
常用查看命令
- 寄存器(也可以使用print 寄存器名称查看)
- info registers 查看寄存器情况(浮点寄存器除外)
- info all-registers 查看所有寄存器情况
- info registers
查看指定寄存器情况
- 栈信息
- backtrace 打印所有栈
- backtrace
只打印上n层栈信息 - backtrace <-n> 只打印下n层栈信息
- backtrace
- frame 当前栈层简要信息
- up
查看上一层栈 - up-silently
- up-silently
- down
查看下一层栈 - down-silently
- down-silently
- info frame 详细的栈层信息
- info args 函数参数名及其值
- info locals 当前函数所有局部变量及其值
- info catch 当前函数异常处理信息
- backtrace 打印所有栈
- 源程序
- list 当前行后的源代码
- list
某行的源代码 - list
- list
, 行数范围内的源代码 - list
某函数的源代码 - list
- list - 当前行前的源代码
- list +往后显示源代码
- list <+/- offset>
- set listsize
设置一次显示的行数 - show listsize 显示设置的参数
- list
- list 当前行后的源代码
- 源代码内存
- info line
- disassemble 查看源程序汇编码
- disassemble
- disassemble
- 查看单个数据
- print [/
] / 输出格式(十六进制/x) 表达式 - print $编号 每个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八字节
- x /
- 变量自动显示
- 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
- break
- 观察点操作
- watch
一旦表达式值有变化,停止程序 - rwatch
当变量被读,停止程序 - awatch
当变量被读写,停止程序 - info watchpoints 列出所有观察点
- watch
- 捕捉点操作 捕捉程序运行时的事件
- catch
throw catch exec fork vfork load[libname] unload[libname] - tcatch
只设置一次捕捉点,当程序停止,自动删除该点
- catch
- 重载函数的断点维护
- 各种断点的维护
- clear 清除断点
- 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次
- condition
- 断点自动化操作 当调试程序停止,自动执行命令
- commands [bnum]
- clear 清除断点
- 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= 跳转地址
- jump
- 函数控制命令
- return [expr] 强制函数返回
- call
/print 强制函数调用
- 运行环境设置
- 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
- [forward-]search
- 指定源文件路径
- directory
- directory