Linux实验一:Linux环境及编程工具

目录

    • 一、实验目的
    • 二、实验内容
    • 三、参考代码
    • 四、实验步骤
      • 步骤1. 编辑源代码test1.c
      • 步骤2. 编译源代码test1.c
      • 步骤3. 调试test1
      • 步骤4. 重新编译运行test1.c
    • 五、实验结果
    • 六、实验总结


一、实验目的

1、掌握Linux C开发过程中的基本概念;
2、掌握如vim,GCC,GDB等开发工具的使用。

二、实验内容

  将参考代码录入到test1.c文件中,编译执行后发现结果与预期不一致,请使用GDB调试, 完成字符串反序输出功能。

三、参考代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int reverse_str(char *string);int main (void) {char string[]= "Linux C Tools : GCC and GDB";printf("The original string is %s \n", string);reverse_str(string);
}int reverse_str(char *str){char *new_str;int i,size;size = strlen(str);if((new_str=(char *) malloc (size + 1))==NULL){return -1;}for (i=0;i<size;i++)new_str[size-1]=str[i];new_str[size+1]=' ';printf("The reverse string is %s\n",new_str);free(new_str);return 0;
}

四、实验步骤

步骤1. 编辑源代码test1.c

mkdir test1
cd test1
vim test1.c

在这里插入图片描述

在这里插入图片描述

步骤2. 编译源代码test1.c

首先要安装GCC编译器:

yum install gcc

在这里插入图片描述

再进行编译:

gcc test1.c -o test1 -g

运行:

./test1

在这里插入图片描述

步骤3. 调试test1

gdb test1

(1)回顾调试的基本方法:跟踪语句执行过程,观察执行结果;

(2)设置断点的三种基本方法:
① b <line_number>
② b <line_number> if condition_expression
③ b <function_name>

调试,设置断点在21行和24行,并运行至21行和24行:

在这里插入图片描述

(3)查看中间输出结果:
① p <var>
② set print element 0
p <array_name>或<pointer>

说明:GDB中查看字符串变量值可通过“set print element 0”命令,一次性显示字符串所有内容;

(4)分析中间结果,修改22行语句为new_str[size - i-1] = str[i];

在这里插入图片描述

步骤4. 重新编译运行test1.c

gcc test1.c -o test1 -g
./test1

在这里插入图片描述

五、实验结果

最后正确的代码和运行结果如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int reverse_str(char *string);int main (void) {char string[]= "Linux C Tools : GCC and GDB";printf("The original string is %s \n", string);reverse_str(string);
}int reverse_str(char *str){char *new_str;int i,size;size = strlen(str);if((new_str=(char *) malloc (size + 1))==NULL){return -1;}for (i=0;i<size;i++)new_str[size - i-1] = str[i];new_str[size+1]=' ';printf("The reverse string is %s\n",new_str);free(new_str);return 0;
}

在这里插入图片描述

六、实验总结

  本次实验,我学到了许多关于Linux环境的基础知识和常用工具的使用技巧,并进行了实际操作和练习。
  通过实验,我更加熟悉了Linux操作系统的基本结构、文件系统、用户管理等方面的知识,掌握了常用的命令行操作。在实验中,我学习了常用的编程工具,如文本编辑器(例如Vi/Vim)、编译器(例如GCC)、调试器(例如GDB)等。通过实验,我能够熟练地使用这些工具进行代码编辑、编译和调试。
  通过GCC,我学会了如何将C/C++源代码编译成可执行文件。掌握了编译命令的语法和参数选项,比如指定输出文件名、调试信息等。使用GCC编译C语言代码很简单,例如,只需在终端中输入gcc test1.c -o test1 -g。其中,test1是编译后生成的可执行文件的名称,test1.c是要编译的C源代码文件。通过这个命令,gcc会将C源代码编译为可执行文件,并将其命名为test1。GCC提供了丰富的调试支持,我学会了如何在编译时生成调试信息,并使用GDB进行程序调试。通过设置断点、查看变量和内存状态,我能够有效地找出程序中的问题并进行调试修复。
  总的来说,通过《Linux环境及编程工具》的学习和实验,我不仅对Linux操作系统有了更深入的理解,还掌握了许多实用的编程工具和技能,这些对我的日常工作和项目开发都具有很大的帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/652560.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode和相关题目

1. 两数之和 直接利用hashmap存储值和对于索引&#xff0c;利用target-nums[i]去哈希表里找对应数值。返回下标。 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> mp;vector<int> res;fo…

CentOS安装SonarQube

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 sonar是一款静态代码质量分析工具,支持Java、Python、PHP、JavaScript、…

一分钟理解:比特币第一次严重漏洞,生产1844亿枚比特币!是如何发生的

1、事件 2010年8月15日&#xff08;也就是比特币诞生的第二年&#xff0c;创世区块于2009年1月3日诞生&#xff09;&#xff0c;有人发现&#xff0c;在比特币区块链的第74638块上&#xff0c;一笔让人惊愕的交易。 这笔交易出现了184 467 440 737.09551616个比特币&#xff…

C# WinForm —— 08 Form初始化、布局、注册事件

Form 初始化 Form初始化的时候会调用 Designer.cs 里的 InitializeComponent(); 函数&#xff0c;在InitializeComponent(); 函数里面有Load Form语句时会调用 FrmLogin_Load()函数 Form布局 两种方式&#xff1a; 拖控件到窗体&#xff0c;设置属性在Load事件中写代码添加…

算法 || 二分查找

目录 二分查找 在排序数组中查找元素的第一个和最后一个位置 搜索插入位置 一个数组经过划分后具有二段性的都可以用二分查找 二分查找 704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; ​ 暴力解法&#xff1a;直接遍历数组&#xff0c;找到 target 便返回下标&am…

基于微信小程序云开发实现考研题库小程序V2.0

不久之前&#xff0c;基于云开发的微信答题小程序搭建题库小程序V1.0&#xff0c;软件架构是微信原生小程序云开发。现在来回顾一下&#xff0c;已经实现的功能。 一、V1.0项目预览 1、页面结构 首页 答题页 结果页 我的页 排行榜页 答题历史页 登录页 使用指引页 2…

LeetCode57. 插入区间

LeetCode57.插入区间 题目思路: 代码 /* 前置知识&#xff1a; vector<vector<int>> a,b; 二维vector数组是可以将二维中的一维vector数组给push_back的&#xff0c; 不是只有单个元素才可以&#xff0c;整个一维的vector数组也可以 b[0] {1,2,3},b[1] {4,5,6}…

如何消除浏览器SmartScreen对网站“不安全”提示?

面对互联网时代用户对网站安全性和可信度的严苛要求&#xff0c;网站运营者时常遭遇Microsoft Defender SmartScreen&#xff08;SmartScreen&#xff09;提示网站不安全的困扰。本文将剖析SmartScreen判定网站不安全的原因&#xff0c;并为运营者提供应对策略&#xff0c;以恢…

element 分页切换时:current-page无效 页数不会跟着一起切换

问题回溯&#xff1a;使用el-pagination组件 选择切换当前分页 页数为2 问题结果&#xff1a;el-pagination组件 当前页切换失败 一直都是 1&#xff0c;接口传参分页数据是2&#xff0c;打印当前分页也是2 解决方案1&#xff1a;使用 current-page参数 .sync 修饰符 解决方案2…

DM8达梦数据库模式下,备份库中具体某一张表SQL操作

1、进行达梦数据库的安装路径&#xff0c;我的默认安装路径为 /home/dmdba/dmdbms/bin 2、执行表备份的命令dexp ./dexp MO_FORM_V5/"MO_FORM_V5"192.168.179.11:5236 DIRECTORY/opt/dm_back/ FILEsystem.dmp TABLES"MO_FORM_V5.FORM_WARN_RULE" LOGs…

【问题实操】银河高级服务器操作系统实例分享,配置hugepages启动异常

1.问题现象 某运营商国产服务器操作系统项目&#xff0c;部署Kylin-Server-0524-aarch64服务器系统&#xff0c;内核从4.19.90-24.4升级到4.19.90-25.14。在grub中配置huagepages大页内存后&#xff0c;系统在内核启动阶段黑屏&#xff0c;只显示一个光标。grub配置如下图&…

商店数据(八)

目录 57.后台权限表 58.推荐记录表 ​59.系统上传资源表 ​60.角色表 ​61.订单结算表 62.店铺表 63.店铺认证表 64.店铺申请&#xff08;移动端&#xff09;表 57.后台权限表 CREATE TABLE wat_privilgeid (privilegeod int(11) NOT NULL AUTO_INCREMENT COMMENT 自增…