Linux——gdb的基本操作

Posted 一棵灬胡杨树

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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点的分析顺序是:从下到上!。

以上是关于Linux——gdb的基本操作的主要内容,如果未能解决你的问题,请参考以下文章

在Linux上利用core dump和GDB调试

Linux下的gdb调试

Linux gdb调试器用法全面解析

Linux——gdb的基本操作

linux下GDB的使用方法

无法在 GDB 中提取发生 FPE 的值