Linux工具——gdb

Linux工具——gdb_第1张图片

目录

一,gdb简介

二,gdb的指令

1.查看gdb是否有下载

2.需要明确的知识点

 3.调试指令

1.打开调试代码

 2.以某行为起点显示代码

3.打断点,查看断点,删除断点,禁用断点,启用断点

4.逐过程,逐语句,断点与断点之间的跳转。

5,监视变量

6.其它命令


一,gdb简介

gdb其实就是Linux下的调试工具。这个调试工具具有许多的功能。比如说打断点,监视,在debug模式下运行代码等等。

二,gdb的指令

在gdb这个工具里边具有许多的指令,今天我们只学习最简单的几条指令来帮助我们能够上手gdb这个调试工具。

1.查看gdb是否有下载

这条指令是:gdb -- v。如下:

Linux工具——gdb_第2张图片

显示了这样的信息就表示你的Linux下已经装载了gdb这个调试工具了。如果显示没有下载这个工具的话便可以使用yum工具进行下载。如下:

因为我是普通账户所以要用到sudo指令来下载这个工具。

2.需要明确的知识点

在这里我们需要明确的便是在Linux下使用gcc编译好的可执行文件的默认模式是release模式。那我们该如何证明呢?其实我们只需要将默认模式下编译好的代码的大小与使用-g选项编译好的代码进行大小比较通过两者的大小便能证明这一点。如,现在我写了以下代码:

#include
  2 int Addtotop(int top)
  3 {
  4    int sum = 0;
  5    int i = 1;
  6    for(;i<=top;i++)
  7    {
  8      sum+=i;
  9    }
 10    return sum;
 11 }
 12 
 13 
 14 int main()
 15 {                                                                                                                                                                                      
 16   printf("%d\n",Addtotop(100));
 17   return 0;
 18 }

现在再来写一个Makefile文件,该文件如下:

code:gdb_test.c                                                                                                                                                                        
  2   gcc $^ -o $@
  3 .PHONY:clean
  4 clean:
  5   rm- f code

现在便生成了一个文件叫作code,然后我在指令后面加上选项-g便能生成debug版本的文件,操作如下:

1 code-g:gdb_test.c                                                                                                                                                                      
  2   gcc $^ -o $@ -g//加入指令-g能够生成debug模式的可执行文件
  3 .PHONY:clean
  4 clean:
  5   rm- f code

现在我的列表里便有如下可执行文件,一个是默认生成的code,一个是debug模式下的code-g:

现在使用ll指令查看这两个文件的信息如下:

可以看到在对同一份代码,默认生成的可执行文件code的大小是8392,使用-g选项生成的可执行文件code-g的大小是9568从这里便可以证明code可执行文件明显就是release模式下的可执行文件。

 3.调试指令

1.打开调试代码

打开调试代码的指令是gdb+debug模式下的可执行文件。如:

成功打开会显示以下信息:

Linux工具——gdb_第3张图片

 2.以某行为起点显示代码

这样做的指令是l+行数,比如我要从第零行开始显示:

Linux工具——gdb_第4张图片

可以发现这段代码是从第零行开始显示了,但是只显示了十行。如果要全部显示的话多按几下回车键就行了:

Linux工具——gdb_第5张图片

3.打断点,查看断点,删除断点,禁用断点,启用断点

这些操作在调试代码时都是必不可少的操作,现在我们来一一对这些操作的指令介绍一番:

1.打断点b+代码行号,b+文件名+冒号+代码行号,b+函数名,b+文件名+冒号+函数名

打断点如下:

Linux工具——gdb_第6张图片

2.查看断点:info+b

在上面打完断点以后我便可以查看这些断点,操作如下:

Linux工具——gdb_第7张图片

使用info b选项后便可以查看这些断点的信息。

3.删除断点:d+断点的断点编号

在这里要注意的是我们在删除断点时删除的时d后面加的是断点的编号而不是行号。比如现在我有如下断点:

比如我要删除第四行的断点,我的指令便是d 1 而不是 d 4:

4.禁用断点:disable+断点编号

如我要禁用掉第二个断点:

5.启用断点:enable+断点编号

如我要启用第二个断点:

4.逐过程,逐语句,断点与断点之间的跳转。

在Linux下这两个功能实现的按键便是n与s。n表示逐过程,s表示逐语句。当使用逐过程的方式调试的时候,当遇到函数的时候就会跳过整个函数。当使用逐语句的时候,当遇到函数的时候就会进入到函数中一条一条指令的执行。断点与断点之间跳转的指令是c,表示continue。当执行这个指令时,程序跑起来时就会按照断点与断点之间的代码块一块一块的跑起来。

5,监视变量

要发现程序之中是否有错误,最重要的便是监视变量的值。我们该如何监视呢?这里有三种指令:1.p 2.display 3.undisplay。

1.这里的p+x表示显示变量x的值,但是使用p做不到常显示。使用p只能在这一步执行时显示要显示的值。

2.如果要常显示一个值的话就要使用display+x命令,这样在每一次执行代码时都能够显示x变量的值。

3.undisplay+变量的显示编号表示取消对变量x的常显示。

6.其它命令

在gdb下,除了上面的重要的命令之外。还有些不那么重要的命令。

1.finish:表示将一个函数给执行完。

2.bt:查看调用堆栈。

3.set var +变量名+数值:给变量赋值。

你可能感兴趣的:(Linux系统编程,linux,学习,学习笔记)