比如我们一个文件gcmd,它的内容如下
set args 1
b main
r可以这样执行gdb
gdb -x gcmd a.out上面这个命令有点长,我们将它写入一个短文件名的文件(比如:g)中,设定这个文件g的执行权限,执行这个文件g就可以了。
文件g的内容如下
#!/bin/bash
gdb -x gcmd a.out常用命令
设置断点命令:break,缩写为b
b
b
b filename:linenum 在源文件filename的linenum行停住
b filename:function 在源文件filename的function函数入口处停住
b ... if
查看断点
info b [n] n为断点号,省略时显示全部断点
删除断点以及观察点
clear
清除所有定义的停止点
clear <function>
clear
清除所有设置在函数上的停止点
clear
clear
清除指定行上的停止点
d [breakpoints] [range...]
删除指定的断点,breakpoints为断点号,range表示断点号的范围(如:1-4)
设置观察点
watch
rwatch
awatch
info watchpoints 显示所有的观察点
恢复程序运行
continue
c continue的缩写
fg
单步跟踪
step
s
此命令遇到函数时,会进入该函数,count表示前进步数,省略时前进一步
next
n
遇到函数时不会进入该函数,count表示前进步数,省略时前进一步
运行至当前函数返回
finish
fini finish的缩写
返回时打印返回值
运行至当前循环结束
until
u until的缩写
单步跟踪一条机器指令
stepi
si stepi的缩写
nexti
ni nexti的缩写
查看栈信息
bt
bt <-n> 打印栈底下n层的栈信息
显示源代码:list缩写为l
l
l
l 显示当前行后面的源程序
l - 显示当前行前面的源程序
l
l
l
源代码的内存
info line
info line
info line
info line
打印出所指定的源码在运行时的内存地址
查看运行时数据:print的缩写为p
p
p /f
p *array@len 查看一段连续内存空间的值,@的左边是第一个内存地址的值,右边是数据的长度
输出格式如下
x 十六进制格式
d 十进制格式
u 无符号整型
o 八进制格式
t 二进制格式
a 十六进制格式
c 字符格式
f 浮点数格式