为了方便,我们可以把一些启动gdb后需要执行的命令写到一个文件中,执行gdb时可以通过设定参数让gdb自动执行文件中的命令而不用我们再去手工一个一个的去执行了。
比如我们一个文件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 设置有条件的断点,条件condition成立时停住(例:b 100 if i == 50)
查看断点
info b [n] n为断点号,省略时显示全部断点
删除断点以及观察点
clear
清除所有定义的停止点
clear <function>
clear >
清除所有设置在函数上的停止点
clear
clear
清除指定行上的停止点
d [breakpoints] [range...]
删除指定的断点,breakpoints为断点号,range表示断点号的范围(如:1-4)
设置观察点
watch 当expr值有变化时,程序停住
rwatch 当expr被读时,程序停住
awatch 当expr被读或写时,程序停住
info watchpoints 显示所有的观察点
恢复程序运行
continue
c continue的缩写
fg
单步跟踪
step
s step的缩写
此命令遇到函数时,会进入该函数,count表示前进步数,省略时前进一步
next
n next的缩写
遇到函数时不会进入该函数,count表示前进步数,省略时前进一步
运行至当前函数返回
finish
fini finish的缩写
返回时打印返回值
运行至当前循环结束
until
u until的缩写
单步跟踪一条机器指令
stepi
si stepi的缩写
nexti
ni nexti的缩写
查看栈信息
bt 打印栈顶上n层的栈信息
bt <-n> 打印栈底下n层的栈信息
显示源代码:list缩写为l
l 显示程序第linenum行的周围的源代码
l 显示函数名为function的函数的源代码
l 显示当前行后面的源程序
l - 显示当前行前面的源程序
l , 显示first到last之间的源代码
l
l
源代码的内存
info line
info line linenum>
info line
info line
打印出所指定的源码在运行时的内存地址
查看运行时数据:print的缩写为p
p
p /f 是输出的格式
p *array@len 查看一段连续内存空间的值,@的左边是第一个内存地址的值,右边是数据的长度
输出格式如下
x 十六进制格式
d 十进制格式
u 无符号整型
o 八进制格式
t 二进制格式
a 十六进制格式
c 字符格式
f 浮点数格式
阅读(1874) | 评论(0) | 转发(0) |