• Ubuntu 16.04下GDB调试


      在linux中还有一个更受大家欢迎的调试工具:GDB。GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。可以用来调试C,C++程序。

    GDB功能强大,调试命令也有很多,但是对于普通程序调试中经常使用的命令并不多,如下表所示:

      常用的指令:

      

    例子程序如下所示:

    #include <stdio.h>
    
    int getSum(int num1,int num2);
    
    int main(int argc, char *argv[])
    {
        int num1 = 20;
        int num2 = 30;
        int sum = 0;
    
        num1 = num1 - 10;
    
        sum = getSum(num1,num2);
    
        printf("The sum is %d
    ", sum);
    
        return 1;
    
    }
    
    int getSum(int num1,int num2)
    {
        
        printf("The numbers are %d and %d
    ", num1,num2);
    
        return (num1 + num2);
    }
    View Code

    第一步:

    对源程序进行编译,加上-g选项,使其可以进行调试。其结果是生成可执行文件test_gdb,并且可以对其进行gdb调试(对于该命令的详细解释,可以查看gcc命令)

     

    第二步:

    进入gdb调试:

     

    如上图最后一行所示,代表进入gdb调试,等待用户命令输入。

    第三步:

    加载进行调试的可执行文件,方便进行调试,以及源程序的显示。命令如下:

     

    显示加载成功。

    第四步:

    (1)如果在设置断点之前,输入r

     

    程序正常运行,打印输出结果,并正常退出。

    (1)在运行之前,设置断点,为了确定设置断点的位置(行号)可以使用list(l)命令,显示出程序的内容,从而方便的设置断点

    (2)设置断点

    第一个断点设置在main函数的入口处,第二,三个断点为普通断点,第四个断点设置在函数调用的入口处,第5个断点为条件断点。

     

    (3)开始调试运行

    输入r开始运行,在第一个断点处(即main函数入口)停止运行。

     

    此时打印输出num1的值,显示的并不是20,而是一个随机值,因为此时还没有完成初始化操作,如下所示:

     

    输入n执行下一步,此时再次打印输出num1,即可完成初始化。

    输入c,执行到第二个断点处停止运行。如下图所示

     

    当程序执行到getSum函数的调用处时,执行s,进入到getSum函数内部,继续调试执行

     

    一直进行单步调试,直到函数结束运行,退出函数的调用

     

    在getSum函数结束之前以及结束之后分别打印输出sum值:

     

    很明显,函数getSum完成计算num1与num2的和之后并对sum赋值。

    最后程序结束运行.

      每日一句:善日者强,善时者霸 --荀子

      参考文档:https://blog.csdn.net/longshen1990/article/details/47778269

  • 相关阅读:
    Hibernate检索策略与检索方式
    获取分组后的TOP 1和TOP N记录
    Oracle 高级排序函数 和 高级分组函数
    Java中的字符串常量池
    代码的完整性:打印1到最大的n位数
    代码的完整性:数值的整数次方
    递归和循环:矩形覆盖
    位运算:二进制中1的个数
    递归和循环:变态跳台阶
    递归和循环:跳台阶
  • 原文地址:https://www.cnblogs.com/dylancao/p/9183223.html
Copyright © 2020-2023  润新知