【Linux】实验报告3 vi、gcc 和 gdb 的使用

2023-05-16

实验三 编辑器 vi 、编译器 gcc 和调试器 gdb 的使用

文章目录

  • 实验三 编辑器 vi 、编译器 gcc 和调试器 gdb 的使用
    • 实验目的
    • 实验原理
      • 1. vi和vim简介
        • 1.1 vi
        • 1.2 vim
      • 2. vi的三种工作模式
        • 2.1 **命令模式**
        • 2.2 **末行模式**
        • 2.3 **编辑模式**
      • 3. vi的基本操作
        • 3.1 vi打开/新建文件
          • vi [file]
          • vi [file] +[line]
        • 3.2 vi光标移动
          • 1) 上、下、左、右
          • 2) 行内移动
          • 3) 行数移动
        • 3.3 vi整行操作
          • 1) 删除整行
          • 2) 复制整行与粘贴
          • 3) 撤销和恢复撤销
        • 3.4 vi末行搜索
        • 3.5 vi行号显示与语法高亮
        • 3.6 vi的异常退出
      • 4. indent缩进排版程序
          • indent程序的安装
          • indent [file.c]
      • 5. gcc编译器
        • 5.1 gcc简介
        • 5.2 gcc安装(以Ubuntu为例)
        • 5.3 gcc下的编译过程
          • gcc -E [file.c] -o [name.i]
          • gcc -S [file.c] -o [name.s]
          • gcc [file.c]
          • gcc [file.c] -o [name]
      • 6. gdb调试器
        • 5.1 gdb简介
        • 5.2 gdb常用命令
        • 5.3 gdb基础调试过程
    • 实验作业

实验目的

掌握编辑器 vi的基本操作,能够使用 vi 来编辑 C 语言源程序;学习indent缩进排版程序的使用;掌握用 gcc 进行编译;掌握用gdb进行调试

实验原理

1. vi和vim简介

Vi的使用相关博文

1.1 vi

  • viVisual interface 的简称,是 Linux最经典 的文本编辑器

  • vi 的核心设计思想 —— 让程序员的手指始终保持在键盘的核心区域,就能完成所有的编辑操作image-20220627113058377

  • vi的特点:

    • 不是图形界面

    • 只能编辑 文本内容,不能对字体、段落进行排版

    • 不支持鼠标操作

    • 没有菜单

    • 只有命令

1.2 vim

  • vim 是从 vi 发展出来的一个文本编辑器,支持 代码补全编译错误跳转 等方便编程的功能特别丰富,在程序员中被广泛使用,被称为 编辑器之神

2. vi的三种工作模式

2.1 命令模式

  • 敲击键盘上的 ESC 进入
  • 打开文件首先进入命令模式,是使用 vi入口
  • 通过 命令 对文件进行常规的编辑操作,例如:定位翻页复制粘贴删除……
  • 在其他图形编辑器下,通过 快捷键 或者 鼠标 实现的操作,都在 命令模式 下实现

2.2 末行模式

  • 敲击键盘上的 : 进入
  • 要退出 vi 返回到控制台,需要在末行模式下输入命令
  • 末行模式vi出口
命令英文功能
wwrite保存
qquit退出,如果没有保存,不允许退出
q!quit强行退出,不保存退出
wqwrite & quit保存并退出

2.3 编辑模式

  • 敲击键盘上的 **i **进入
  • 正常的编辑文字
image-20220519094412188

3. vi的基本操作

3.1 vi打开/新建文件

vi [file]
vi test.c  #若test.c存在,则打开test.c文件
vi new.c   #若new.c不存在,则新建new.c文件

image-20220519095620094

image-20220519100802635

vi [file] +[line]
vi test.c +3  #打开test.c文件,并且定位至第3行

image-20220519101502719

PS:如果只带上 + 而不指定行号,会直接定位到文件末尾

3.2 vi光标移动

1) 上、下、左、右
命令功能手指
h向左食指
j向下食指
k向上中指
l向右无名指

image-20220627112926865

2) 行内移动
命令功能
w向后移动一个单词
b向前移动一个单词
0行首
^行首,第一个不是空白字符的位置
$行尾
3) 行数移动
命令功能
gg文件顶部
G文件末尾
[line]gg行首,第一个不是空白字符的位置
[line]G行首,第一个不是空白字符的位置
:数字行首,第一个不是不是空白字符的位置

3.3 vi整行操作

1) 删除整行
命令功能
dd删除当前光标所在的整行
[num]dd删除当前光标开始的n整行
2) 复制整行与粘贴
命令功能
yy复制当前光标所在的整行
[num]yy复制当前光标开始的n整行
p将复制内容粘贴光标的后面
P将复制内容粘贴至当前光标前
3) 撤销和恢复撤销
命令英文功能
uundo撤销上次命令
CTRL + rredo恢复撤销的命令

3.4 vi末行搜索

命令功能
/[string]+Enter搜索当前string,光标跳转至第一个string出现位置
n光标跳转至下一个string出现位置
shift+n光标跳转至上一个string出现位置

3.5 vi行号显示与语法高亮

命令功能
set nu添加行号显示
set nonu取消行号显示
syntax enable on显示语法高亮
syntax off取消语法高亮

3.6 vi的异常退出

假设使用vi编辑hello.c时,出现异常退出

image-20220525235519697

系统会自动生成**.swp**隐藏文件

image-20220525235623882

再次使用vi进入hello.c时,会出现如下提示
image-20220526000046611
按D键后,之前的编辑未生效,.swp文件也被删除
image-20220627141133834
image-20220526000801005

4. indent缩进排版程序

indent程序的安装
sudo apt install indent  #安装indent程序

image-20220519112839532

indent [file.c]
indent test.c  #对test.c程序进行缩进排版

image-20220519110244254

5. gcc编译器

5.1 gcc简介

GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。GNU编译器套件包括C、C++、Objective-C、Java前端,也包括了这些语言的库,如libstdc++,libgcj等。

5.2 gcc安装(以Ubuntu为例)

查看当前

cd /usr/bin #查看当前Linux系统是否安装了gcc编译器
find gcc

image-20220519111115959

未安装,执行下行命令

sudo apt-get install build-essential  #Ubuntu安装gcc

已安装,查看当前gcc版本

gcc -v  #查看当前gcc版本

image-20220519111230722

5.3 gcc下的编译过程

image-20220526200112865

gcc -E [file.c] -o [name.i]
gcc -E test.c -o test.i    #预处理test.c,生成test.i文件
vim test.i                 #查看生成的汇编文件

image-20220526201210897

gcc -S [file.c] -o [name.s]
gcc -S test.c -o test.s  #编译test.c,生成test.s汇编文件
vim test.s               #查看生成的汇编文件

image-20220526200530491

gcc [file.c]
gcc test.c  #编译test.c,默认生成文件名为a.out的可执行文件
./a.out     #执行生成的a.out文件(./代表当前目录)
image-20220519113658431
gcc [file.c] -o [name]
gcc test.c -o test.out  #编译test.c,生成文件名为test.out的可执行文件
./test.out              #执行生成的test.out文件(./代表当前目录)

image-20220519114144529

6. gdb调试器

5.1 gdb简介

GDB(the GNU Project Debugger)是 GNU开源组织发布的一个强大的Linux下的程序调试工具,可以调试 C、C++、Objective-C 和 Pascal 等多种语言的程序

5.2 gdb常用命令

命令示例功能
filefile [name]装入想要调试的可执行文件
breakbreak [line]设置断点
deletedelete [line]清除单行的单个断点
clearclear [line]清除单行的所有断点
disabledisable [num]设置序号为num的断点暂时失效
enableenable [num]设置序号为num的断点重新生效
runrun运行调试程序
listlist [line1],[line2]查看line1-line2的源代码
nextnext执行一行源代码但不进入函数内部
stepstep执行一行源代码而且进入函数内部
infoinfo [command]显示相关命令当前信息
killkill结束当前调试
printprint [var]在屏幕上打印var变量的值
quitquit退出gdb调试程序

5.3 gdb基础调试过程

  1. 编译文件,进入gdb调试器
    image-20220527152006587

  2. 使用list命令显示当前文件源代码
    image-20220527152209097

  3. 设置断点,显示断点信息
    image-20220527152402031

  4. 运行程序至断点1
    image-20220527152512260

  5. 单步调试运行
    image-202205271633486746. 结束当前调试
    image-20220527163739129

  6. 退出gdb调试程序image-20220527163807245

实验作业

用 vi 编辑器写一段 C 语言的程序,并对这个程序的格式进行整理,对程序进行编译,最后运行这个程序。写出你的程序和实现以上操作的全部的指令。

touch test.c   #创建test.c文件
vi test.c      #使用vi编辑器修改test.c文件的内容
indent test.c  #使用indent程序对test.c文件内容缩进排版
gcc test.c -o test.out  #使用gcc对test.c编译
./test.out

image-20220519153039644

image-20220519153004303

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Linux】实验报告3 vi、gcc 和 gdb 的使用 的相关文章

  • 计算机操作系统知识点总结(2.1.2)——进程的状态与转换

    进程的三种基本状态 xff1a xff08 1 xff09 运行态 xff1a 占有CPU xff0c 并在CPU上运行 xff08 单核处理机每一时刻最多只能有一个进程处于运行态 xff0c 双核环境下可以同时有两个进程处于运行态 xff
  • Daily practice——2021/1/31

    1 函数若无返回值 则它一定无形参 请问这个说法是正确的吗 xff1f 答 xff1a 这个说法不正确 一个函数可以有参数 xff0c 没有返回值 xff1b 可以没有参数 xff0c 有返回值 xff1b 可以没参数 xff0c 没返回值
  • 6.RTT-UART-串口接收不定长数据

    本期来分析一下串口接受不定长度数据的源码 xff0c 这个demo也在手册里面 xff0c 可以去手册上结合着API说明观看 先把代码粘出来 xff0c 后面对重点代码进行分析 程序清单 xff1a 这是一个串口设备接收不定长数据的示例代码
  • learn-AJAX(第一天)

    AJAX的简介 一 简介及其简单使用 1 概述 web程序最初的目的就是将信息放到公共的服务器上 xff0c 让所有的网络用户都可以通过浏览器进行访问 在此之前 xff0c 通过以下的方式可以使浏览器对服务器发送请求 xff08 无法通过编
  • 纯C++实现的HTTP请求(POST/GET)

    原文地址 xff1a http www cnblogs com lidabo p 6404533 html 纯C 43 43 实现的HTTP请求 xff08 POST GET xff09 xff0c 支持windows和linux xff0
  • 3--STM32多功能小车(6)--硬件电路连接

    1 电源及接线 xff1b 对于stm32和所用到的外设来说 xff0c 基本都要用5V作为输入电压 xff0c 但是市面上的电池基本没有是5V输出的 xff0c 但是却有12V的 xff0c 因此我们就需要采用12V转5V xff08 一
  • Unable to fit model using “lrm.fit”R语言使用logistic回归时

    当初笔者遇到这个错误时上网搜了常见办法 就是在lrm后面加参数 tol span class token operator 61 span span class token number 1e 9 span 或者加 maxit span c
  • 激光雷达RPLIDAR A1使用教程

    激光雷达RPLIDAR A1使用教程 一 雷达硬件连接 1 A1雷达包含组件 RPLIDAR A1开发套装包含了如下组件 xff1a o RPLIDAR A1模组 xff08 内置 PWM电机驱动器 xff09 o USB适配器 o RPL
  • 4G远程小车1-树莓派读取WTGPS+BD模块

    树莓派python读取WTGPS 43 BD模块 WTGPS 43 BD模块 模块可以通过type C线连接 xff08 自带ch430芯片 xff09 USB口 xff1b 也可以通过串口与硬件串口号相连接 IPX天线接头为IPX1代 连
  • 3.ROS&PX4--PX4环境部署

    部署PX4 amp ROS开发环境 1 安装mavros Noetic版本 span class token function sudo span span class token function apt get span span cl
  • 4.ROS&PX4--运行官方offboard起飞程序

    1 创建空间 span class token function mkdir span catkin ws span class token builtin class name cd span catkin ws span class t
  • 5.ROS&PX4--offboard模式多航点代码编写

    4 ROS amp PX4 offboard模式多航点代码编写 offboard模式多航点代码编写等待更新 offboard模式多航点代码编写 等待更新 span class token comment 64 file offb node
  • Canal安装和配置,实现监听binlog日志

    1 下载canal Release v1 1 5 alibaba canal GitHub 2 直接解压 windows和linux下都是一样 3 conf example目录下 xff0c 编辑instance propertities
  • 看论文需要用到的一些专业词汇【SOTA,Benchmark,Baseline】

    看论文需要用到的一些专业词汇 SOTA Benchmark Baseline 1 SOTA2 Benchmark xff08 基准 xff09 Baseline 基线 1 SOTA SOTA实际上就是State of the arts 的缩
  • STM32中断-外部中断

    STM32中断 外部中断配置 外部中断配置 1 配置向量中断控制器NVIC xff0c 设置中断优先级 a 配置优先级组别 b 配置相关结构体参数 中断源 抢占优先级 子优先级 c 使用函数写入参数 代码参考如下 span class to
  • Ubuntu20 网络助手无法运行

    最近开始正式啃python高级教程 xff0c 遇到第一个问题 xff0c Ubuntu20版本下 xff0c 网络助手安装后 xff0c 点击开启无反应 经过好几天晚上的折腾 xff0c 终于搞定 xff0c 贴下解决过程 Step1 终
  • 通过服务器搭建一个短视频系统(含推荐算法)

    一 前端开发 前端使用的是uni app框架 xff0c 用到的开发软件是HBuiderx xff0c 前端界面如下所示 xff1a 主要包括五大功能 xff0c 一是热门视频展示 xff08 用到了热门视频推荐算法 xff09 个人推荐视
  • 【已解决】error: ‘CV_GRAY2BGR’ was not declared in this scope

    这是运行高翔 slambook2 代码出现的问题 xff0c 有两种方法解决 error CV GRAY2BGR was not declared in this scope home diyu slambook2 ch8 optical
  • 镜像备份工具rsync

    文章目录 1 概述2 rsync的认证协议3 rsync命令详解4 rsync 43 inotify 1 概述 什么是rsync xff1f rsync 即 Remote Sync 是linux系统下的数据镜像备份工具 使用rsync可以远
  • 系统调用的理解

    文章目录 系统调用什么是系统调用系统调用的分类系统调用与库函数的区别 系统调用 什么是系统调用 什么是系统调用 xff1f 答 操作系统的接口函数是连接应用软件与操作系统的中间桥梁 xff0c 系统调用其实就是操作系统提供给应用程序的接口函

随机推荐

  • ROS与C++入门教程(记录步骤)(一)

    ROS与C 43 43 入门教程 xff08 记录步骤 xff09 0 记录学习生活1 构建工作空间1 1 建立工作空间1 2 设置成自动加载环境 2 构建Catkin包2 1 构建2 2 查看程序包依赖关系2 3 解读package xm
  • C语言:全局变量在多个c文件中公用的方法

    用C语言编写程序的时候 xff0c 我们经常会遇到这样一种情况 xff1a 希望在头文件中定义一个全局变量 xff0c 然后包含到两个不同的c文件中 xff0c 希望这个全局变量能在两个文件中共用 举例说明 xff1a 项目文件夹proje
  • 迭代器(iterator)看这篇就够了

    文章目录 前言一 迭代器是什么二 迭代器如何使用2 1 迭代器正常遍历集合2 2 完全版迭代器可以一边遍历一边删除元素2 3 简易版迭代器 总结 前言 迭代器很重要 xff0c 是遍历线性数据结构 xff08 链表 xff09 的重要方法之
  • Jquery 获取元素属性值

    获取属性 获取内置属性获取自定义属性prop value name value attr value name value jquery中内置属性只能用来获取内置 自定义只能用来获取内置 内置属性 span class token func
  • 使用evo测评工具测评性能

    防止健忘 参考EVO工具github链接 xff1a link1 开源室内激光场景数据 xff1a link2 总体来说 xff0c evo是用于处理 评估和比较里程计和SLAM算法的轨迹输出 支持的轨迹文件格式 xff1a Tum文件Ki
  • DNS内网欺骗(仅供参考)

    DNS内网欺骗 仅供参考 下面展示一些 内联代码片 span class token comment 启动apche2 span systemctl start apache2 在 span class token operator spa
  • linux下安装nodejs(附带安装npm)

    一 下载nodejs的二进制文件 附官网链接 xff1a 下载 Node js 右键 xff0c 复制下载链接地址 二 安装解压 mkdir boke cd boke wget https nodejs org dist v16 13 2
  • stm32F103C8T6核心板 使用ST-Link无法烧写程序的解决方案

    stm32F103C8T6核心板 使用ST Link无法烧写程序的解决方案 本人也是小白一名 希望我的回答能对你有所帮助 以下是我遇到的问题 1 首先是插入连接线 电脑显示如图 网上找了很久还没有找到解决方案 不过不影响烧写 其次是FlyM
  • 【无标题】

    stm32最小核心板串口通讯连接方式 首先需要一个含有CH430的usb转ttl模块 3 3v接板子上的3 3v GND接板子上的GND 注意 不要接反了 接反的话usb转ttl模块不会亮 如果接反了并且usb转ttl模块插到电脑上 板子会
  • selenium 滑块问题解决

    滑块问题解决 问题解决分为两步 图片处理 滑块移动处理 图片处理 1 图片获取 这里获取的是背景以及滑块图片 获取图片 通过requests get 将图片下载到本地 with open 39 yuan image html 39 39 r
  • VisionPro 9.0 安装完,没有在Visual Studio 2019工具箱中上显示控件

    VisionPro 9 0 安装完 没有在Visual Studio 2019工具箱中上显示控件 步骤 右键工具箱 然后点击 选择项 然后点击浏览选项 3 目录位置 C Program Files x86 Cognex VisionPro
  • visionPro通过网线连接海康相机踩过的坑

    visionPro通过网线连接海康相机踩过的坑 1 搞了两三天 xff0c 笔者用的是笔记本是小新 xff0c 没有网口 xff0c 通过USB转网口连接摄像头 xff0c 明确的告诉你不行 xff0c USB即使达到所谓的千兆 xff0c
  • 完成select的TCP客户端

    include lt stdio h gt include lt sys types h gt include lt sys socket h gt include lt arpa inet h gt include lt netinet
  • vins概述

    基本框架如上 xff0c VINS的功能模块可包括五个部分 xff1a 数据预处理 初始化 后端非线性优化 闭环检测及闭环优化 代码中主要开启了四个线程 xff0c 分别是 xff1a 前端图像跟踪 后端非线性优化 xff08 其中初始化和
  • 软件项目管理总结(全)

    软件项目管理知识综述 第一章知识总结 软件项目管理的作用和重要性 项目管理就是将知识 技能 工具与技术应用于项目活动 xff0c 以满足项目的要求 项目管理通过合理 运用与整合特定项目所需的项目管理过程得以实现 项目管理使组织能够有效且高效
  • FreeRTOS 的任务调度方式和具体任务是怎么切换的

    FreeRTOS操作系统主要是两种任务调度方式 xff1a 抢占式调度 每个任务都有不同的优先级 xff0c 任务会一直运行直到被高优先级任务抢占或者遇到阻塞式的 API 函数 xff0c 比如 vTaskDelay 时间片调度 每个任务都
  • linux/UNIX中如何使用fork函数调用exec函数族,实现子进程做特定操作

    前言 在 Unix Linux 操作系统中 xff0c 进程是一种非常重要的概念 进程是程序执行的实例 xff0c 操作系统会为每个进程分配资源 xff0c 进程之间相互独立 xff0c 可以进行通信 在 Unix Linux 中 xff0
  • Opencv学习----矩阵操作-基本操作

    5 1 基本操作 cv absdiff InputArray src1 InputArray src2 OutputArray dst 计算两个数组之间或数组与标量之间的每元素绝对差值 注意 当阵列具有深度CV 32S时 xff0c 不应用
  • 【Linux】实验报告2 Linux基础命令

    作者 xff5c Ricky 水果摊 时间 xff5c 2022年6月27日 文章目录 实验目的实验原理1 Linux文件系统2 Linux存储位置常用命令存放位置头文件存放位置 3 Linux常用命令路径目录文件 实验内容1 Linux常
  • 【Linux】实验报告3 vi、gcc 和 gdb 的使用

    实验三 编辑器 vi 编译器 gcc 和调试器 gdb 的使用 文章目录 实验三 编辑器 vi 编译器 gcc 和调试器 gdb 的使用实验目的实验原理1 vi和vim简介1 1 vi1 2 vim 2 vi的三种工作模式2 1 命令模式