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的基本操作的主要内容,如果未能解决你的问题,请参考以下文章