GDB笔记
GDB环境
show
显示调试器相关信息的通用命令
info
显示被调试程序相关信息的通用命令,不可单独做命令,必须后跟info命令的名字
set
修改gdb环境变量
cd
同shell
pwd
打印当前工作目录
shell
执行后跟的Unix命令
make
重新build源代码
run
运行程序
path
设置程序的运行路径
showpaths
打印程序的所有运行路径
directory(dir)
添加或清除源文件搜索路径
showdirectories
打印所有的源文件搜索路径
setenvironment
设置环境变量。如:set envUSER=hchen
showenvironment
打印环境变量。
inforegisters
查看所有(不包括浮点寄存器)或指定寄存器的信息
infoall-registers
查看寄存器信息(包括浮点寄存器)
gdb提供了四个标准寄存器的全局变量:
$pc:程序计数器
$fp:当前调用栈指针
$sp:栈指针
$ps:处理器状态
@
数组
<自然数1>@<自然数2>:指定起始地址为“自然数1”,长度为“自然数2”的数组
::
域操作符
<字符串1>::<字符串2>:指定文件名(带后缀名)或函数名为“字符串1”,变量名为“字符串2”的域变量
$
GDB全局变量
$<字符串>:指定环境变量
showconvenience
查看所有的全局变量
/
输出格式:
/x:按十六进制格式显示变量
/d:按十进制格式显示变量
/u:按无符号十进制格式显示变量
/o:按八进制格式显示变量
/t:按二进制格式显示变量
/a:按地址格式显示变量
/c:按字符格式显示变量
/f:按浮点数格式显示变量
/s:按字符串格式显示变量
/i:按指令格式显示变量
设置断点
break(b)←→clear
设置断点
~<自然数>:设置当前文件指定行为断点
~ <+自然数>:设置当前行的后N行为断点
~ <-自然数>:设置当前行的前N行为断点
~<字符串>:设置指定函数入口作为断点
~*<自然数>:设置指定内存地址处为断点
~<…> if <表达式>:如果表达式为真,则设置断点
~<…> thread <自然数> [if <表达式>]:如果在指定线程,则设置断点
infobreak(info breakpoints)
显示被调试程序相关信息的通用命令,不可单独做命令,必须后跟info命令的名字
~ [<自然数>]:打印所有断点或指定断点信息
enable←→disable
应用断点
~ [<数字>[-<数字>]]:应用数字作为索引指定的断点
~breakpoint [<数字>[-<数字>]]:应用所有或指定索引范围的断点
~delete:
~display:
~mem:
~once:
~tracepoints:
delete(deletebreakpoint)
删除断点
~ [<数字>[-<数字>]]:删除所有或指定索引范围断点
condition
~ <自然数> [<表达式>]:修改或清除指定断点的停止条件
commands
设置停止点的运行命令
~[<自然数>]\n[<代码列表>]\nend:为指定断点或最后设置的断点设置或清除运行命令
display
当程序暂停时自动显示指定的表达式
~/<输出格式> 表达式:
Note:
display/i$pc:显示当前执行的机器码
undisplay
deletedisplay
enabledisplay
disabledisplay
infodisplay
设置观察点
watch <表达式>
表达式的值发生变化时停住程序
rwatch <表达式>
表达式被读时停住程序
awatch <表达式>
表达式被读或被写时停住程序
info watchpoints
列出当前所设置的所有观察点
设置捕捉点
catch
当event发生时停住程序
tcatch
只设置一次捕捉点,当程序停住以后,该点被自动删除。
调试
next
step over,逐过程单步运行
step
step into,逐语句单步运行
finish
step out,运行直至当前调用栈返回
until(u)
运行直至当前循环结束
nexti(ni)
单步跟踪机器指令
stepi(si)
单步跟踪机器指令
continue(c|fg)
恢复程序运行
~<自然数>:恢复程序运行并忽略指定数目的断点
以下函数将改变程序的执行
jump
跳转至指定行或地址继续运行
return
取消当前函数的执行,并立即返回;如果指定了参数,那么该表达式的值会被认作函数的返回值
call
调用表达式指定的函数
set(setvariable)
赋值命令
signal
恢复程序运行,并传送给程序一个信号,用以测试程序的信号处理函数
handle
指定如何处理信号
infosignals(info handle)
查看信号相关信息
查看栈信息
backtrace(bt)
打印出调用栈信息
~<自然数>:打印里N层调用栈信息
~-<自然数>:打印外N层调用栈信息
~full:打印所有局部变量的值
frame
选中当前栈(无参数)或指定栈(有参数)并显示其信息
select-frame
选中当前栈(无参数)或指定栈(有参数)
down←→up
选中被当前栈调用的栈并显示其信息
down-silently←→up-silently
选中被当前栈调用的栈
infoframe
显示当前栈的相关信息
infoargs
打印当前函数的参数列表
infolocals
打印当前函数的局部变量列表
x/
查看内存
x/<输出格式> <自然数>:显示由指定地址的内存数据
print(p)
打印表达式的值
~/<输出格式> 表达式:
infoline
打印源代码在内存中的地址
disassemble
打印指定函数的机器指令
查看源代码
list(l)
源代码清单
~<数字>:列出当前文件“数字”作为行号指定行的源代码
~<字符串>:列出“字符串”作为函数名指定函数的源代码
~*<数字>:列出包含“数字”作为地址指定位置的源代码
~<字符串>:<数字>:列出“字符串”作为文件名指定文件,“数字”作为行号指定行的源代码
~<字符串1>:<字符串2>:列出“字符串1”作为文件名指定文件,“字符串2”作为函数名指定函数的源代码
setlistsize
设置一次显示源代码的行数
showlistsize
打印一次显示源代码的行数
search(forward-search)
从最后被列出的源代码行开始向后搜索正则表达式
reverse-search
从最后被列出的源代码行开始向前搜索正则表达式
whatis
打印表达式的数据类型
ptype
打印数据类型的定义
showlanguage
显示当前的编程语言
setlanguage
设置当前的编程语言
infosource
显示当前源文件的信息