• 用gdb调试有问题的程序:练习使用gcc编译器和gdb调试器


    内容

    1.用gdb调试有问题的程序:练习使用gcc编译器和gdb调试器;

    2.练习使用make工程管理器。

    实操流程:

    1)编制greet.c文件。

    此代码的原意为倒序输出main函数中定义的字符串,但结果显示没有输出。代码如下所示:

    //greet.c

    #include

    #include

    #include

    int display1(char *string);

    int display2(char *string);

    int main ()

    {

        char string[] = "Embedded Linux";

        display1 (string);

        display2 (string);

    }

    int display1 (char *string)

    {

        printf ("The original string is %s \n", string);

    }

    int display2 (char *string1)

    {

        char *string2;

        int size,i;

        size = strlen (string1);

        string2 = (char *) malloc (size + 1);

        for (i = 0; i < size; i++)

        string2[size - i] = string1[i];

        string2[size+1] = ' ';

        printf("The string afterward is %s\n",string2);

    }

    为了达到这项要求,我首先要建立一个文件夹储存这个C代码,当做存储位置。

     文件夹名称为test,之后创建了greet.c文件

    基本操作流程,复制代码,选择黏贴到终端,

    退出.c文件流程,

    1.先按esc键,退出插入模式。

    2.之后,按住shift和:键,输入wq,保存退出。

    之后,使用gcc命令,对greet.c文件进行编译

    ./greet,运行生成的可执行文件,观察运行结果。

            之后,运行了一下,就会发现这个程序的目的本来是让语句能够倒序输出,但是结果并没有,我们需要进行debug来看看到底是哪里出了问题。 

    (打了gdb greet之后出现了介绍,我看到了著名的红帽 red hat)

     之后是下断点,之后指导书上写的是 设在30

    但是一直提示我,这个不太行,因为我的程序行数还没有到30,之后我vim进去数了一下我的for循环位置在哪里,发现是第24行,下移三行27是printf的位置。

    之后执行了一下,看了一下运行过程。

     

    k)程序在printf前停止运行,此时依次查看string2[0]、string2[1]…,发现string[0]没有被正确赋值,而后面的复制都是正确的,这时,定位程序第31行,发现程序运行结果错误的原因在于“size-1”。由于i 只能增到“size-1”,这样string2[0]就永远不能被赋值而保持NULL,故输不出任何结果。

    l)退出gdb,使用命令q。

    接着,按照指导书要求退出gdb

     

    5)纠正错误,更改源程序并得到正确的结果。

    a)重新编辑greet.c,把其中的“string2[size - i] = string1[i]”改为“string2[size – i - 1] =string1[i];”即可。

    之后,进去按照要求修改,之后再执行  . /greet  成功

    运行倒序。

  • 相关阅读:
    设备树——dtb格式到struct device node结构体的转换
    Nginx 代理sftp,访问Nginx服务器就间接访问sftp服务器
    OnChainMonkey VoxEdit 大赛来袭!赢取16,000 SAND + OnChainMonkey 奖励
    uniapp使用nfc功能及详解
    Failed to start mysql.service Unit mysql.service not found
    魅族MX4安装Ubuntu Touch 16.04
    pandas
    WiFi无线通信技术详解
    文件上传下载
    init进程 和 终端进程的关系
  • 原文地址:https://blog.csdn.net/m0_62574889/article/details/128020267