美文网首页
一、调试-使用gdb调试linuxC程序

一、调试-使用gdb调试linuxC程序

作者: zhile_doing | 来源:发表于2018-08-13 16:32 被阅读0次
    1. gdb是linux操作系统特有的调试工具,可以完成一般IDE提供的所有调试功能。使用gdb调试程序之前,必须使用gcc的-g选项编译程序,使生成的可执行文件中附带有源代码文件的信息。
    2. 编写例程如下,随后使用gdb调试该程序
      #include<stdio.h>
      int add_range(int min, int max){
          int sum ;
          for(int i = min; i < max + 1 ; i++){
              sum = sum + i;
          }
          return sum;
      }
      int main(){
          int range[5];
          range[0] = add_range(1, 10);
          range[1] = add_range(1, 100);
          printf("range[0]=%d\n", range[0]);
          printf("range[1]=%d\n", range[1]);
          return 0;
      }
      

      gdb exec_name进入调试界面,使用help查看当前可用的命令种类



      使用l(list)查看源代码,一次10行,当我们在gdb中直接回车,默认执行上次命令



      使用start命令开始执行程序,程序停留在main函数第一行

      n(next)可以单步执行程序,s(step)命令可以跳入函数中查看函数执行的细节



      使用bt(backtrace)命令查看程序栈帧,可以在不同栈帧中切换来查看不同环境的变量值。使用i(info)查看变量值

      切换至main堆栈,查看main函数中本地变量的值

      p(print)打印某变量的值

      display可以现实每步程序运行之后某变量的值

      如果不再需要display的结果,可以使用undisplay取消显示



      finish使当前函数运行至return返回

      在程序中,如果发现某变量赋值不当,可以直接在调试中更改该变量的值,查看程序运行结果set var name=value

      初步调试指令如下
      backtrace\finish\frame\info\list\next\print\set var\start\step
    3. 断点
      编写例程如下
      #include<stdio.h>
      #include<string.h>
      int main(){
          char num[10];
          int sum = 0;
          while(1){
              scanf("%s", num);
              long sum = 0;
              if(strcmp(num, "q") == 0){
                  break;
              }
              for( int i = 0; i< strlen(num); i++ ){
                  sum = sum*10 + num[i] - '0';
              }
              printf("sum=%d\n", sum);
          }
          return 0;
      }
      

      使用gdb调试程序,break命令在某行设置一个断点



      break后不仅可以跟行号,还可以跟函数名称,使用continue命令继续执行程序,遇到断点自动停止。使用disable breakpoints num可以暂时禁用某个断点



      可以使用delete breakpoints num删除断点,使用break(b)查看当前断点分布

      断点调试常用指令
      break n\break function_name\break ... if ...\continue\ delete breakpoints num\disable breakpoints num\enable num\run\

    4. 观察点
      观察点可以让我们监视某个内存单元,当单元的内容改变时,提示我们它发生了那些变化,常用在程序某个变量发生改变,但我们又不知道它何时发生了改变的情况
      使用watch设置观察点,查看某个变量的变化情况



      使用info watchpoints查看当前观察点



      x命令用来打印内存空间的值,b表示按字节,5表示打印5组
    5. 使用gdb的backtrace指令可以让我们容易发现段错误由何引起


    相关文章

      网友评论

          本文标题:一、调试-使用gdb调试linuxC程序

          本文链接:https://www.haomeiwen.com/subject/mvlubftx.html