目录:
- 什么是gdb?
- gdb的安装
- gdb的使用
- gdb的一些骚操作
- watch命令的使用
- 调试core文件
什么是gdb?
gdb的全称是GNU debugger,看名字就知道 gdb 是用来对程序进行 debug 的,不管是学习还是工作中,用好gdb,能让你的程序更加丝滑!
gdb的安装
我是在腾讯云服务器上安装的gdb功能,大家也可以去阿里云等这些服务器上安装!
yum install gdb
gdb的使用
在linux环境下写一个程序编译运行:
-g:编译带上调试信息,这一步很重要不能丢了,有了这一步我们才能进入gdb调试。
gcc -g test.c
进入gdb调试
gdb ./a.out
run命令可以让我们程序跑起来,就可以看到输入,结果1,2,3,4了,后面我们可以使用gdb相应的命令执行一些基本的操作:
b break :打断点
1.在函数的地方或接函数名子打断点
如:gdb b main
2.gdb b x 在第x行打断点
quit:退出gdb模式
list:查看我们的源代码 行数太多可以重复使用list
next:一步一步调试
info b:查看断点
print:打印变量
step:进去某一个具体的函数调试 +next
这里演示几条相关的命令:
break命令的用法演示:
这里我们给第三行代码打了断点,然后next可以一步步往下调试,命令是可以简写的哈,run运行就能显示出第几行的代码便于观察!
print命令的用法演示:
通过print打印arr[0]和arr[1]的地址我们发现整型1和2相差了4个字节,说明p打印没有问题。
step命令的用法演示:
这里我们复制了一份test.c文件的代码,里面加了个hello()函数,下面是list查看到里面的代码:
我们写的函数在14行,那么我们就在14行这里打一个断点,这样就可以使用step命令进入到hello()这个函数调试,第4行表示函数写在test1.c文件的第4行,然后next就打印出来了我们这个函数 hello echo~。
那么我们step命令和next命令有什么关联呢?
next / step —— 让程序往下走“一步”:当程序执行到我们设置断点的地方然后停下来了,这个时候我们想要看看程序接下来是怎么变化的,可以使用 next / step命令。其中step和next都表示让程序单步执行一行代码,但是它们的主要区别在于如果下一行是函数调用的话,step会跳进函数里面继续执行,而next命令则直接执行完这个函数。
gdb的一些骚操作
gdb还可以用来查看我们当前路径下的文件,也也是说gdb可以通过shell去输入一些shell的命令的。
gdb的日志功能:
set logging on
输入vim gdb.txt我们看到刚才的gdb输入和调试过程就被记录在这个gdb.txt的文件里面了。
我们在工作的时候需要调试很多代码,有时候有记不住,这时候就可以用到日志的一个功能。
watch命令的使用
观察变量是否变化,
i是我们的一个变量,watch接变量名或地址设置观察点watchpoint,info查看我们的这个观察点,下面我们看到新的值从0变成1了,当我们要观察一个变量的时候就可以用到watch命令。
调试core文件
输入ulimit -a是显示目前资源限制的设定,也就是当前这个shell用户可以对这些资源进行限制,红线标记处的core file size默认设置是0,那么输入ulimit -c unlimited就可以重新设置我们的core文件的最大值,黄色标记处有了一个core dumped,生成这个文件之后,ll命令查看就有了一个名为24900的core文件,再次运行这个文件就找到了我们程序在呢挂掉的,下面画红线处,在第五行出错了。
这就是今天的GDB的学习,当然GDB还要很多的命令,大家也可以去官网学,这些你们学到了吗?