GDB的学习

目录:

  • 什么是gdb?
    • gdb的安装
      • gdb的使用
  • gdb的一些骚操作
    • watch命令的使用
      • 调试core文件

什么是gdb?

gdb的全称是GNU debugger,看名字就知道 gdb 是用来对程序进行 debug 的,不管是学习还是工作中,用好gdb,能让你的程序更加丝滑!

gdb的安装

我是在腾讯云服务器上安装的gdb功能,大家也可以去阿里云等这些服务器上安装!

yum install gdb

gdb的使用

在linux环境下写一个程序编译运行:
GDB的学习_第1张图片

GDB的学习_第2张图片
-g:编译带上调试信息,这一步很重要不能丢了,有了这一步我们才能进入gdb调试。

gcc -g test.c

进入gdb调试

gdb ./a.out

GDB的学习_第3张图片
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命令的用法演示:
GDB的学习_第4张图片
这里我们给第三行代码打了断点,然后next可以一步步往下调试,命令是可以简写的哈,run运行就能显示出第几行的代码便于观察!

print命令的用法演示:
GDB的学习_第5张图片
通过print打印arr[0]和arr[1]的地址我们发现整型1和2相差了4个字节,说明p打印没有问题。

step命令的用法演示:
GDB的学习_第6张图片
这里我们复制了一份test.c文件的代码,里面加了个hello()函数,下面是list查看到里面的代码:
GDB的学习_第7张图片
GDB的学习_第8张图片
我们写的函数在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的学习_第9张图片
gdb的日志功能:

set logging on

GDB的学习_第10张图片
GDB的学习_第11张图片
输入vim gdb.txt我们看到刚才的gdb输入和调试过程就被记录在这个gdb.txt的文件里面了。

GDB的学习_第12张图片

我们在工作的时候需要调试很多代码,有时候有记不住,这时候就可以用到日志的一个功能。

watch命令的使用

观察变量是否变化,
GDB的学习_第13张图片
i是我们的一个变量,watch接变量名或地址设置观察点watchpoint,info查看我们的这个观察点,下面我们看到新的值从0变成1了,当我们要观察一个变量的时候就可以用到watch命令。

调试core文件

GDB的学习_第14张图片
GDB的学习_第15张图片

输入ulimit -a是显示目前资源限制的设定,也就是当前这个shell用户可以对这些资源进行限制,红线标记处的core file size默认设置是0,那么输入ulimit -c unlimited就可以重新设置我们的core文件的最大值,黄色标记处有了一个core dumped,生成这个文件之后,ll命令查看就有了一个名为24900的core文件,再次运行这个文件就找到了我们程序在呢挂掉的,下面画红线处,在第五行出错了。
GDB的学习_第16张图片
这就是今天的GDB的学习,当然GDB还要很多的命令,大家也可以去官网学,这些你们学到了吗?

你可能感兴趣的:(学习,linux,运维)