Linux——gdb的基本操作

一、调试器-gdb

在linux操作系统中,如果需要调试程序,需要在编译程序的时候,将程序编译成为debug版本,则需要增加“-g”命令参数。
在这里插入图片描述

gdb的基本操作

1.调试可执行程序
gdb + “可执行程序”
在这里插入图片描述
2.查看源代码
l(list)
X在这里插入图片描述
3.打断点 -> b + “源码文件中的行号”
在这里插入图片描述

4.查看断点:i b (info breakpoints)
在这里插入图片描述

5.去除断点: delete + “断点的序号”
在这里插入图片描述
6.使断点失效:disable + “断点的序号”
在这里插入图片描述
7.使断点生效:enable + “断点序号”
在这里插入图片描述
8.使程序运行:r(run)
在这里插入图片描述
9.逐语句执行:s(step)
10.逐过程执行:n(next)
11.打印变量的值:p(print) p + “变量名称”
Note:p + “变量名称”,不仅仅局限于普通变量,还可以打印指针变量,对象等。
12.继续执行:c。
注意:当程序遇到下一个断点的时候就会停止执行。
13.退出:q(quit)

调试coredump文件

coredump文件的产生是在调试程序崩溃之后的内存镜像文件,内存镜像文件保存的是在程序崩溃的一瞬间的内存当中的值。
产生coredump文件的条件如下:
1.linux操作系统中,需要设置core size的大小:使用ulimit -c或者ulimit -a

我们发现 core size 的大小为:0,下面修改core size的大小
在这里插入图片描述
修改完成!

2.磁盘的大小足够。

我们touch一个test.c,举个例子:
在这里插入图片描述
显然,这个程序会崩溃(具体原因大家都懂)
下面演示一下具体操作:
在这里插入图片描述
我们发现当执行./aa后,产生了我们需要的coredump文件,接下来,我们调试coredump文件:
在这里插入图片描述
通过上图我们发现第6行的 *p = 'a’发生的报错。
Notes:我们注意到有一句话是:
在这里插入图片描述
这句话的大概意思是程序发生了11号报错,这个11(11信号:解引用空指针,解引用野指针,越界访问内存)以后会在进程中学到,Segmentation fault的意思是:段错误。

还有一些调试操作:
1.查看调用堆栈:bt
2.跳转到某个具体的堆栈:f + “堆栈序号”

Notes:上述例子里只写入了一个明显错误,如果有函数之间调用产生的错误,则调试coredump文件时
在这里插入图片描述
会出现多个序号,切记找到最终bug点的分析顺序是:从下到上!。

猜你喜欢

转载自blog.csdn.net/xhuyang111/article/details/114457316
今日推荐