文章目录
零.前言
在Windows系统中,程序的运行调试等等全都被一个编译器完全封装了起来,但是在Linux系统中,程序的运行和调试是有不同的软件进行操作处理的,在上一节中分享了Linux下代码编译器gcc/g++,本文将详细介绍Linux系统下的调试器gdb的使用。
1.debug和release
我们在使用VS编译器的时候,通常在上方会有这样的选项:
 
 只有debug版本才可以进行调试!
 当一个程序是debug版本的时候,在其二进制.o文件中一定加入了debug的信息。而release版本中没有加入debug信息。
 Linux下默认生成的是release版本,二进制文件并没有加入debug信息。
2.进入debug模式
我们首先先创建文件test.c并向其中写入如下内容:
#include<stdio.h>                                                                   
 int sum(int a)                                                                      
     {                                                                                   
       int i;                                                                            
       int sum=0;                                                                        
     for(i=1;i<=a;i++)                                                                 
       {                                                                                 
      sum+=i;                                                                        
       }                                                                                 
  return sum;                                                                        
    }                                                                                   
    int main()                                                                          
    {                                                                                   
    int a=100;                                                                       
     int result=sum(a);                                                               
     printf("result=%d",result);                                                           
     return 0;                                                                                                
    }                     
 
只需要加入-g指令就可以将可执行文件转换成debug版本。
如果你的代码使用了C99原则,可以在后面加上-std=c99不然会有报错:

 我们将原来的可执行文件a.out与test进行对比,发现test的空间更大一些,这是因为它其中加入了debug调试信息。
3.调试程序
(1)进入调试模式
(2)运行程序指令:r
进入调试之后,我们需要先让程序跑起来才能继续进行调试:

 注意我们要先打断点再跑程序,不打断点的话程序直接跑完了。
(3)显示代码:l
我们可以通过l指令去显示代码内容,查看当前行的上下文,默认显示十行。

 当我们再继续执行l指令时,会继续向下显示十行:
 
这里没有显示十行,是因为程序已经完全显示结束。
(4)打断点/显示断点指令:b/info b
在VS中F9是专门打断点的键,而在gdb中我们使用b来打断点。

(5)逐过程与逐语句:s/n
逐过程就相当于VS中的F11,逐语句就相当于F10。
 
(6)查看/关闭查看变量变化:display/p/undisplay
显示sum:
 
 关闭显示sum:
 
 只显示一次sum:
 
 注意:display和p后面是变量名,display后面是变量编号,接变量名会报错。
(7)结束函数与跳转:finish/continue/until
finish直接执行完for函数,可以看到sum变成了5050
 
我们在第18行再打一个断点,通过continue直接到达第18行:
 
 until同理,这里不再演示了。
(8)在debug中修改变量的值

 这个在调试的时候不常用,了解一下即可。
4.总结
本文重点内容有三个:
 一是Linux下默认release版本的可执行程序,需要加-g选项变成debug版本。
 二是其中一些重要指令要记牢比如l,r,n,s,b,display等。
 三。。。三连?欢迎大佬们的高质量评论,三连必回,冲冲冲。










