gdb备忘

1870阅读 0评论2013-03-23 lzj123
分类:C/C++

为了方便,我们可以把一些启动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   浮点数格式



上一篇:俄罗斯方块小游戏
下一篇:关于printf