当前位置: 首页 > news >正文

【vim文本编辑器gcc编译器gdb调试器】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、vim
    • vim安装
    • vim常用快捷键
    • vim使用
    • vimtutor zh文档
  • 二、gcc编译器
    • 安装gcc工具
    • 编译源代码
  • 三、gdb调试器
    • gdb安装
    • gdb常用指令
    • gdb简单上手使用
    • gdb的单步调试功能
  • 总结


一、vim

vim是vi发展出来的一个文本编辑器,具有代码补全、快速跳转、查找等功能,在linux中被广泛使用。
vim官方网站(https://www.vim.org/)

vim安装

sudo apt-get install vim

vim常用快捷键

在这里插入图片描述

vim xxx 进入(正常模式)
i、a、o键 (输入模式)
esc(回到正常模式)
:键 (命令模式)
:wq (保存、退出)

Nodepad可以使用CTRL+F实现查找、替换功能

vim使用

创建工作空间目录workspace/src

在终端中打开上述工作空间目录;
创建.c源码文件vim test.c
按键i 进行编辑

#include <stdio.h>int main(void)
{
printf("hello world");return 0;
}

ESC 回到正常模式
:wq 保存、退出

vimtutor zh文档

输入vimtutor zh查看中文文档
里面有详细的vim教学,在练习中记忆并熟练掌握常用操作;

二、gcc编译器

gcc(GNU Compiler Collection)是GNU(GNU’s Not Unix)开源项目的编译器套件。gcc的初衷是为GNU操作系统专门编写的一款编译器,用于编译C代码。现如今已经拓展为可以编译C++、Java、Objective-C等多种编程语言的集合。gcc本身也遵循GPL发行许可证,linux就是基于gcc搭建的编译系统。

gcc官方网站可以参考https://gcc.gnu.org/

安装gcc工具

sudo apt-get install build-essential

查看是否安装成功
gcc -v

编译源代码

使用vim打开前文的test.c文件
vim test.c

gcc -o bin test.c

查看文件列表
ls -la

运行可执行文件
./bin

如果想知道调试信息,可以加上-g的参数
gcc -o bin test.c -g

对比不加-g参数时文件的大小
gcc -o bin test.c
ls -lh
加入-g参数,文件占据的存储空间会变大
gcc -o bin test.c -g
ls -la

生成汇编
gcc -o bin test.c -s

生成.o文件
gcc -o bin test.c -c

加入定义的宏
gcc -o bin test.c -D

三、gdb调试器

gdb是GNU Project Debugger的简称,也是是GNU(GNU’s Not Unix)开源项目中遵循GPL发行许可证的free software,

gbd官方网站 https://sourceware.org/gdb/
一般来说GDB主要能提供以下四个方面的帮助:
1.start your program,specifying anything that might affect its behavior指定一些参数
2.make your program stop on specified condition 断电
3.examine what has happened,when your program has stopped分析crash现场
4.change things in your program,so you can experiment with correcting the effects of one bug and go on to learn about another 直接修改程序,查看结果

What Languages does GDB Support? (gdb支持的语言)
GDB supports the following languages (in alphabetical order):
Ada
Assembly
C
C++
D
Fortran
Go
Objective-C
OpenCL
Modula-2
Pascal
Rust

gdb安装

sudo apt-get install gdb

查看gdb版本
gdb --version

gdb常用指令

通过gdb调试正在运行的程序:
ps -A (查看进程列表)
gdb -p 进程号

程序挂掉后调试:
gdb xxx core

gdb简单上手使用

工作空间目录workspace/src
cd /home/workspace/src
vim test.cd

编译(-g参数是为了输出调试信息)
gcc -o bin test.c -g

调试可执行文件:
gdb ./bin
按q可退出gdb调试界面

去掉gdb调试界面的版本等信息(便于观察调试界面):
gdb ./bin -q

在gdb运行界面输入run即可运行程序;

查看对应行号的代码:
在gdb运行界面输入list 代码的行号
这里再vim文本编辑界面显示行号: 输入:set nu 回车即可显示代码行号

清空gdb的历史输出信息窗口
!clear

gdb的单步调试功能

设置断点:在gdb输入break 代码的行号,比如break 8;
输入run(或者r),代码会停止在设定的断点位置;

在gbd界面单步执行:next 回车;

在gbd界面继续执行:c 回车,即continue;

在gbd界面查看变量信息:gdb界面输入print 变量名称

!clear

在gbd界面修改变量的值:
run
set var 变量名称=新的数值

清除断点
info break (展示断点信息)
delete 断点序号,例如delete 1

通过访问地址的形式打印变量
例如:正在运行的源码程序中b=20
gdb中输入print &b,得到一个地址,
gdb中输入x 地址,即可得到变量的值(以十六进制数展现)
gdb x /d 地址(以十进制展现)

查看当前寄存器的值:
info register

查看当前进程的信息:
info thread

切换到对应的进程
thread 进程号,比如thread 1

将C语言切换成汇编语言
disass


总结

简单讲解了vim、gcc编译器、gdb调试器的使用。

相关文章:

【vim文本编辑器gcc编译器gdb调试器】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、vimvim安装vim常用快捷键vim使用vimtutor zh文档 二、gcc编译器安装gcc工具编译源代码 三、gdb调试器gdb安装gdb常用指令gdb简单上手使用gdb的单步调试功能 总结…...

解决使用Golang的email库发送qq邮件报错short response,错误类型为textproto.ProtocolError

问题阐述 使用email库发送QQ邮件&#xff0c;采用465端口&#xff1a; package mainimport ("fmt""net/smtp""github.com/jordan-wright/email" )func SendEmail(sendTo string, subject string, body string) (err error) {e : email.NewEmai…...

为什么说高级工程师研究的不仅是器件的稳态,模拟器件的开关过程

高级工程师研究器件的开关过程而不仅仅是稳态&#xff0c;主要有以下几个原因&#xff1a; 1. 动态性能优化&#xff1a;开关过程中的特性&#xff0c;如上升时间、下降时间、过冲、振铃等&#xff0c;直接影响系统的性能。了解和优化这些动态特性对于提高系统的速度、精度和稳…...

Matlab实现白鲸优化算法(BWO)求解路径规划问题

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 白鲸优化算法&#xff08;BWO&#xff09;是一种受自然界白鲸捕食行为启发的新型优化算法&#xff0c;它通过模拟白鲸的群体捕猎策略和社会互动来探索问题的最优解。BWO因其强大的全局搜索能力和高效的局部搜索能…...

SQLserver索引的优化和使用

在SQL Server中&#xff0c;索引的优化和有效使用是提高查询性能的关键。以下是一些详细的步骤和最佳实践&#xff0c;帮助你优化和使用索引。 1. 理解索引类型 聚集索引&#xff08;Clustered Index&#xff09; 定义&#xff1a;表中数据的物理排序顺序与索引的逻辑顺序相…...

Linux 安装nacos

1.下载版本 https://github.com/alibaba/nacos/tags 2.解压压缩包&#xff0c;启动 (1)将压缩包放到/usr/local目录下&#xff0c;解压 tar -xvf nacos-server-2.0.0-BETA.tar.gz(2)删除压缩包 rm -f nacos-server-2.0.0-BETA.tar.gz(3) 找到nacos的mysql的数据库脚本,在数…...

水仙花判断

一个三位整数&#xff0c;如果满足条件&#xff1a;个位数的立方十位数立方百位数立方这个数&#xff0c;那么称之为“水仙花数” 编程判断一个三位整数是不是水仙花数。 输入格式: 输入一个三位整数 输出格式: 是则输出YES&#xff0c;不是输出 NO &#xff08;注意是大写字母…...

在VS中安装chatGPT

2、在VSCode中打开插件窗口 3、输入ChatGPT 4、这里有个ChatGPT中文版&#xff0c;就它了 5、安装 6、这时候侧边栏多了一个chatGPT分页图标&#xff0c;点击它 7、打个招呼 8、好像不行 9、看一下细节描述 10、根据要求按下按下快捷键 Ctrl Shift P 11、切换成国内模式 12、…...

算法笔记:Day-09(初始动态规划)

509. 斐波那契数 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;其中 …...

“探索未来医疗:生成式人工智能在医疗领域的革命性应用“

生成式人工智能&#xff08;GenAI&#xff09;在医疗领域的应用具有巨大的潜力和变革性&#xff0c;以下是一些关键的应用领域&#xff1a; 医学影像分析&#xff1a; GenAI模型通过深度学习技术&#xff0c;能够自动识别医学影像中的病变区域&#xff0c;提高诊断的准确性和速…...

数字IC后端实现Innovus 时钟树综合(Clock Tree Synthesis)典型案例

对于如下所示电路&#xff0c;要求以下几路做到等长&#xff0c;clock skew控制在50ps以内&#xff0c;clock tree insertion delay做到800ps! from FF/Q to FF1_1/D through the FF1 CK from FF/Q to FF2_1/D through the FF2 CK from FF/Q to FF3_1/D through the FF3 CK fr…...

Matlab应用制作入门

要在 MATLAB 中创建一个简单的应用程序&#xff0c;你可以使用 App Designer&#xff0c;这是一个用于构建交互式应用的工具。以下是一个简单的步骤&#xff0c;帮助你创建一个基本的 MATLAB 应用程序&#xff1a; 1. 打开 App Designer 在 MATLAB 命令窗口中输入 appdesigne…...

什么是声明式编程什么是函数式编程,打比方说明

在前端开发中&#xff0c;声明式编程和函数式编程是两种不同的编程范式&#xff0c;各自有其特定的理念和用法。下面详细介绍这两种编程范式&#xff0c;并通过比喻进行说明。 声明式编程 定义&#xff1a; 声明式编程是一种编程风格&#xff0c;强调“你想要什么”而不是“怎…...

SpringBoot+Shiro权限管理

Shiro是一个强大的Java安全框架&#xff0c;提供了身份验证、授权、加密、会话管理以及与Web集成等多种安全功能。以下是对Shiro权限管理的详细总结&#xff1a; 一、Shiro权限管理的基本概念 权限管理&#xff0c;一般指根据系统设置的安全规则或者安全策略&#xff0c;用户…...

前端面试题22 | 什么是跨域问题?怎么解决?

哈喽小伙伴们大家好!新的一周开始啦~距离2024年结束也仅有两个月了,不知道大家年初给自己制定的目标实现了多少?不管怎样,接下来的两个月都请继续加油哦!我们坚持下来了,我们就是最棒的! 今天,继续来给大家分享一道面试题 在开发中,我们经常会遇到跨域的问题,尤其是开发前后…...

HarmonyOS Next星河版笔记--界面开发(3)

属性 1.1.设计资源-svg图标 需求&#xff1a;界面中展示图标→可以使用的svg图标(任意放大缩小不失真、可以改变颜色) 使用方式&#xff1a; ①设计师提供&#xff1a;基于项目的图标&#xff0c;拷贝到项目目录使用 Image($r(app.media.ic_dianpu)) .width(40) fillColor…...

科研绘图系列:R语言组合连线图和箱线图(linechart+boxplot)

文章目录 介绍加载R包数据数据预处理画图1画图2系统信息介绍 连线图(Line Chart)是一种常用的数据可视化图表,它通过将一系列数据点用直线段连接起来来展示数据随时间或有序类别变化的趋势。以下是连线图可以表示的一些内容: 时间序列数据:展示数据随时间变化的趋势,例如…...

对象的接口与设计模式在其中的作用

对象的接口 对象的接口定义了对象的行为和如何与外界进行交互。以下是对象接口的详细解释&#xff1a; 成员函数&#xff08;Member Functions&#xff09; 定义&#xff1a;成员函数是定义在类中的函数&#xff0c;用于实现类的行为。成员函数可以通过对象来调用&#xff0…...

如何自学机器学习?

自学机器学习可以按照以下步骤进行&#xff1a; 一、基础知识准备 数学基础&#xff1a; 高等数学&#xff1a;学习微积分&#xff08;包括导数、微分、积分等&#xff09;、极限、级数等基本概念。这些知识是后续学习算法和优化方法的基础。 线性代数&#xff1a;掌握矩阵…...

python中应该使用while 1吗?按位运算符可以代替逻辑运算符使用吗?

while 1 很多初学者都很喜欢使用while 1&#xff0c;原因可能是&#xff0c;1只需要输入一个字符&#xff0c;更加“省事”&#xff0c;可以“偷懒”&#xff0c;并且&#xff0c;1看起来更加简洁明了。 实际上&#xff0c;在python中&#xff0c;while 1与while True是等价的…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

JDK 17 序列化是怎么回事

如何序列化&#xff1f;其实很简单&#xff0c;就是根据每个类型&#xff0c;用工厂类调用。逐个完成。 没什么漂亮的代码&#xff0c;只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...

二叉树-144.二叉树的前序遍历-力扣(LeetCode)

一、题目解析 对于递归方法的前序遍历十分简单&#xff0c;但对于一位合格的程序猿而言&#xff0c;需要掌握将递归转化为非递归的能力&#xff0c;毕竟递归调用的时候会调用大量的栈帧&#xff0c;存在栈溢出风险。 二、算法原理 递归调用本质是系统建立栈帧&#xff0c;而非…...