• Linux调试器--gdb使用


    1.背景

    • 程序的发布方式有两种,debug模式和release模式。
    • debug模式下增添了一些调试信息,一般debug比release模式的程序要大。
    • Linux gcc/g++出来的二进制程序,默认是release模式。
    • 要使用gdb调试,必须在源代码生成的二进制程序的时候,加上-g选项。

    2.gdb的使用

    2.1 安装gdb命令

    sudo yum install -y gdb(如果安装过了,就不必再安装)

    2.2 学习gdb的常见指令

    2.2.1 测试代码

    学习之前我们先写一段用于测试的代码,你也可以边看边敲

      1 #include 
      2 #include 
      3 
      4 int AddToVal(int from,int to)
      5 {
      6     int i = 0;
      7     int result = 0;
      8     for(i = from;i <= to;++i)
      9     {
     10         result += i;
     11     }
     12 
     13     return result;
     14 }
     15 
     16 void print(int sum)
     17 {
     18     long long time_t = time(NULL);
     19     printf("sum = %d time = %lld\n",sum,time_t);                                                
     20 }
     21 
     22 int main()
     23 {
     24     int sum = AddToVal(0,100);
     25 
     26     print(sum);
     27     return 0;
     28 }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    2.2.2 编译代码:

    gcc -g mytest.c(或者gcc -g mytest.c -o mytest用来指定生成的可执行程序)。切记:务必带上-g选项,表明生成的是debug模式,如果不带,生成的是release模式。release模式中没有调试信息。

    在这里插入图片描述

    2.2.3 调试代码:

    • 调试代码本质就是调试可执行程序

    指令: gdb + 可执行程序(进入调试状态)

    在这里插入图片描述

    调试代码是在命令行上调试的,所以我们要看到代码才能更好的完成调试工作,那么如何查看代码呢?

    指令: l + 行号
    在这里插入图片描述
    注意:如果要继续往下面看,直接enter就好

    指令: r(run调试运行)
    在这里插入图片描述
    注意:如果执行r指令,但程序中间也没有断点,那么程序就直接跑完了。如果有断点,就执行到断点处。

    指令: c(跳到下一个断点处)

    在这里插入图片描述

    在VS下面我们经常设置断点,来加快调试效率,那么,在gdb关于断点都有哪些知识呢?
    指令: b + 行号(设置断点)
    在这里插入图片描述
    指令: info b(查看断点)
    在这里插入图片描述
    指令: d + 编号(去掉断点)
    在这里插入图片描述
    指令: n (逐过程执行)
    在这里插入图片描述
    指令: s (逐语句执行)
    在这里插入图片描述
    指令: p (查看变量)
    在这里插入图片描述
    但是用p查看变量具有临时性,一但执行其他指令,查看的临时变量就消失了。所以我们一般用display来查看变量,来达到常显示。

    指令: display + 变量
    在这里插入图片描述
    指令:undisplay + 变量(取消常显示)
    在这里插入图片描述
    指令: until + 行号(跳转到指定行)
    在这里插入图片描述
    注意:这个跳转具有一些特殊性质,它会首先跳出当前函数,所以跳转到了24行

    指令: bt (查看调用堆栈)
    在这里插入图片描述

    3.gdb常见指令总结

    在这里插入图片描述

  • 相关阅读:
    Spring事务和事务传播机制
    Visual Studio 2019 c#的winform开发,基本操作
    【.Net实用方法总结】 整理并总结System.IO中StringReader类及其方法介绍
    POJ 3481:双端队列 ← 数组模拟
    元数据管理-解决方案调研一:元数据概述
    讲讲 Redis 缓存更新一致性,看了都说好!
    大咖说|翼辉丁晓华:我们已经真正意义上感受到了原始创新带来的巨大价值
    二十二,加上各种贴图
    Docker之nacos集群部署(详细教你搭建)
    ext文件系统
  • 原文地址:https://blog.csdn.net/SASCII/article/details/127777944