gdb可以用来调试C和C++程序
gdb常用命令
gcc -Wall -g filename.c -o filename //编译时需要加-g参数
gdb filename //进入调试
l(list) //显示代码
b(break) //设置断点
bn //在第n行设置断点
r(run) //运行程序
n(next) //下一步,但不进入函数,相当于VS中的F10
s(step) //表示单步进入函数,相当于VS中的F11
p(print) //p I 打印变量I
c(continue) //运行到最后或者遇到新的断点
q(quit) //退出
gdb调试命令列表
set args 运行时的参数 指定运行时的参数,如set args 2
show args 查看设置好的运行参数
show paths 查看程序的运行路径
pwd 显示当前工作目录
info b 查看所设断点
break[文件名:]行号或函数名 <条件表达式> 设置断点
tbreak[文件名:]行号或函数名 <条件表达式> 设置临时断点,到达后被自动删除
delete[断点号] 删除指定断点,其断点号为info b中的数值,若缺省断点号则删除所有断点
disable[断点号] 停止指定断点,使用info b仍能查看此断点。同delete一样,缺省断点号则停止所有断点
enable[断点号] 激活指定断点,即激活被disable停止的断点
condition[断点号]<条件表达式> 修改对应断点的条件
ignore[断点号]<NUM> 在程序执行过程中,忽略对应断点num次
finish 从当前函数中退出
list<行号>|<函数名> 查看指定位置代码
bt 调用堆栈,可以查到调用哪些函数尚未返回
gdb调试段错误(Segmentation fault)
core文件中保存着程序崩溃的现场
针对段错误,可以通过ulimit -c unlimited设置core file size为不限制大小。
设置完毕后,可以通过ulimit -a进行查看,再次运行程序,就会产生core文件:
gcc -g test.c
./a.out
通过gdb可执行core文件,进行调试: gdb a.out core。
通过bt调用堆栈可以看到程序段错误时的现场,通过f1可以直接切换到程序现场。
查看程序运行过程中的内存:
x /20xb &arr
20为20个字节,x代表十六进制,b为一个字节形式,也可以将b换成w,每四个字节进行显示