加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

GDB单步调节程序

发布时间:2022-07-11 17:24:30 所属栏目:语言 来源:互联网
导读:《调用GDB调试器的几种方式》一节中提到,借助 next 命令可以控制 GDB 单步执行程序。所谓单步调试,就是通过一行一行的执行程序,观察整个程序的执行流程,进而尝试发现一些存在的异常或者 Bug。 根据实际场景的需要,GDB 调试器共提供了 3 种可实现单步
  《调用GDB调试器的几种方式》一节中提到,借助 next 命令可以控制 GDB 单步执行程序。所谓单步调试,就是通过一行一行的执行程序,观察整个程序的执行流程,进而尝试发现一些存在的异常或者 Bug。
 
  根据实际场景的需要,GDB 调试器共提供了 3 种可实现单步调试程序的方法,即使用 next、step 和 until 命令。换句话说,这 3 个命令都可以控制 GDB 调试器每次仅执行 1 行代码,但除此之外,它们各自还有不同的功能。
 
  本节就来一一给大家讲解这 3 个命令的功能和用法。讲解过程中,将以调试如下 C 语言程序为例:
  #include <stdio.h>
  int print(int num){
      int ret = num * num;
      return ret;
  }
  int myfunc(int num){
      int i = 1;
      int sum = 0;
      while(i <= num){
          sum += print(i);
          i++;
      }
      return sum;
  }
  int main(){
      int num =0;
      scanf("%d", &num);
      int result = myfunc(num);
      printf("%d", result);
      return 0;
  }
  此程序存储在~/demo/main.c源文件中(~ 表示当前用户的主目录),功能是根据用户输入的 num 值,输出 12+22+...+num2 的值。
  GDB next 命令
  next 是最常用来进行单步调试的命令,其最大的特点是当遇到包含调用函数的语句时,无论函数内部包含多少行代码,next 指令都会一步执行完。也就是说,对于调用的函数来说,next 命令只会将其视作一行代码。
  
  参数 count 表示一次执行的行数,默认为 1 行。
 
  仍以 main.exe 为例:
  (gdb) b 18
  Breakpoint 1 at 0x4005ab: file main.c, line 18.
  (gdb) r
  Starting program: ~/demo/main.exe
  Breakpoint 1, main () at main.c:18
  18     int result = myfunc(num);
  (gdb) step                                         <-- step 命令进入 myfunc() 函数内部执行
  myfunc (num=0) at main.c:7
  7     int i = 1;
 
  可以看到,当程序暂停到包含 mufunc() 函数的代码行处时(此时该行代码尚未执行),如果使用 step 命令,则 GDB 在执行该函数代码的同时,会进入 mufunc() 函数内部,并暂停在函数内部的第一行代码处。反之如果使用 next 命令,则程序下一次会执行第 19 行代码,而不是第 7 行,这就是它们最大的不同之处。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读