zoukankan      html  css  js  c++  java
  • 一起talk GDB吧(第二回:GDB单步调试)


    各位看官们,大家好。我们在上一回中说简单地介绍了GDB。这一回中,我们介绍GDB的调试功能:单步

    调试。

    闲话休提,言归正转。

    让我们一起talk GDB吧!


    看官们,我们先说一下什么是单步调试。大家都知道。程序是依照指令。一步一步地执行,仅仅是程序执行

    的非常快,所以你没有办法看到走过的每一步。

    这个有点类似我们寻常走路,一步一步地向前走,在路上可

    以看到很多风景,假设坐车,那么车速太快了,就会看不清楚路上的风景。单步调试就是不让程序非常快地

    执行,通俗点说,说是不让程序“坐车”走,让程序一步一步地执行。


    我们来看看怎样使用GDB让程序一步一步地执行。具体的过程例如以下:

    • 1.启动GDB:gdb file.o(表示使用GDB对file.o这个程序进行调试);
    • 2.開始调试:start.这个时候。GDB会从file.o程序中的main函数開始执行;
    • 3.单步调试:next(能够缩写为n)。

      程序执行到下一条语句;

    • 4.重复调试:继续输入n,程序就会跳到下一行。如此重复,程序就会一步步地执行。

    这里有个技巧和大家共享一下:运行完第一个n命令后,假设想继续运行n命令,那么仅仅须要按下回车键就

    能够继续运行n命令。而不须要继续输入n,由于在GDB中回车键表示反复运行它前面的命令,这个有点类似

    Linux中的点命令。


    在单步调试过程中遇到程序中的函数时。会把函数调用当做一个总体。大家可能不理解。没关系,咱们举个

    样例:程序中有下面三条语句:

    a =5;b = 3;

    c =min(a,b); //min是求最小值的一个函数

    printf("min is :%d",c);

    当程序执行到“a =5;b = 3;”这行时。使用单步调试命令n,程序会执行到“c =min(a,b);”这一行,假设再执行

    单步调试n。那么程序会执行到“printf("min is :%d",c);“这一行。大家都知道,函数是多个语句组成的,不

    会一步就执行完,可是单步调试的时候把函数看成了一个总体,让它一步执行完。

    假设我们想看函数中每

    个语句的执行步骤,怎么办?看官莫急。强大的GDB不会让我们失望的。我们能够使用GDB的命令:step

    (缩写为s),使用该命令能够进入函数中。

    然后就能使用单步调试命令。一步一步地看清楚函数中每条语句

    的执行步骤了。

    假设想从函数中跳出来能够使用命令:finish.这时程序会调用函数的地方,也就是我们样例

    中“printf("min is :%d",c);“这一行。


    看官们,通过单步调试,我们能够看到程序执行的“脚印”。

    在调试过程中,假设看到程序执行步骤与我们

    事先给程序设计好的步骤不一样,那么说明程序没有依照我们设计的步骤走。这肯定是有地方出问题了。

    我们须要把出问题的地方找出来。由于程序是一步一步地执行,所以我们非常easy找到哪一步出了问题,进

    而找出问题的解决办法。这便是单步调试的作用。当然了。单步调试还有其他的作用。它能够和其他调试方法

    一起配合使用,至于是什么调试方法。我们以后在的章回中会介绍。


    我们平时还认为电脑上的程序不够快呢,你还不让它“坐车”,让它步行。这不让电脑更加慢了吗?看官说的

    有道理。只是,我们通过单步调试让程序运行慢下来,目的是为了看清楚程序每一步运行时的样子,这样

    有助于我们发现程序中错误。进而方便我们改动程序中错误。试想一下。程序“坐着车”跑的那么快,你还没

    有看清楚它的样子。它已经跑的无影无踪,更不要说找它的运行时的错误了。


    看官们,关于GDB的内容。今天咱们就讲到这里。

    欲知后事怎样,且听下回分解!


  • 相关阅读:
    Spring Annotation注解进行aop的学习
    使用ADO读取SQL数据库
    GetInventTable组装SQL语句使用通配符
    获取当前用户所属的所有仓位,DictRelation,
    UnitConvert,单位换算,单位转换
    数字货币书写转英文货币书写
    导出xml
    存储过程IN参数疑难问题解决方法
    TempTable 临时表
    多栏报表 多列报表
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/6825037.html
Copyright © 2011-2022 走看看