美文网首页
一、调试-使用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程序

    gdb是linux操作系统特有的调试工具,可以完成一般IDE提供的所有调试功能。使用gdb调试程序之前,必须使用g...

  • iOS安全防护方案

    1.阻止动态调试 GDB、LLDB是Xcode内置的动态调试工具。使用GDB、LLDB可以动态的调试你的应用程序(...

  • Linux调试-GDB

    启动GDB调试 在使用GDB之前,编译出带调试信息的程序,调试信息中包含了函数和变量所在文件和行号信息,通过gcc...

  • Vscode配置GDB调试Nginx环境

    配合remote-ssh,可以很好地使用gdb直接调试远程服务器上的程序 比如我们此次使用GDB来直接调试ngin...

  • 【实践】gdb调试golang程序入门及gdb命令列表

    1. 摘要 本文讲解gdb调试GOLANG程序的入门配置,以及gdb命令详解备忘。 2. gdb调试go程序入门...

  • GDB学习笔记

    本文介绍使用gdb调试程序的常用命令。 简介 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。如果...

  • delve:Golang的最佳调试工具

    推荐使用Golang原生调试器delve,gdb不能切换goroutine。 推荐文章Golang程序调试工具介绍...

  • gdb调试基本方法

    gdb调试基本方法 gdb调试常用命令 在GDB中运行程序 断点(BreakPoint) 观察点(WatchPoi...

  • linux编程入门(七)-使用gdb调试程序

    程序开发离不开调试,可以断点调试,也可以打log调试,linux下断点调试c,c++程序用gdb。 断点调试虽然很...

  • gcc常用命令

    gdb相关 gcc加-g才能使用gdb调试gdb -tui a.out打开调试界面run/stop/continu...

网友评论

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

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