Linux开发工具

在这里插入图片描述

Linux开发工具

我们在Linux下

  • 编写代码:vim
  • 编译代码:gcc/g++
  • 调试代码:gdb
  • 运行或者自动化构建程序:make/makefile

Linux编辑器 vim

编辑器 – 只负责写代码

打开vim时是命令模式(默认打开的模式),如果想从其他模式回到命令模式按ESC

在命令模式下输入

  • i:进入编辑/插入模式
  • ::进入底行模式
  • shift + r:进入替换模式

在底行模式下输入

  • q退出,q!强制退出
  • w保存,w!强制保存
  • wq保存退出 ,wq!强制保存退出
  • ESC回到命令模式

命令模式的常见命令

命令作用
yy将当前光标所在行复制
p将复制行进行粘贴
dd将当前光标所在行,剪切(删除)
nyy,np,nddn是具体的数字,nyy指一次复制n行,np将复制的内容粘贴n次,剪切(删除)n行
u撤销命令
ctrl + r撤销u操作
shift + g光标定位到文件结尾
n + shift + g光标定位到第n行
gg光标定位到文件开头
shift + 4($将光标定位到当前行的最结尾
shift + 6(^将光标定位到当前行的最开始
w以单词为单位进行光标的后移
b以单词为单位进行光标的前移
h,j,k,l左,下,上,右
shift + ~大小写切换
r替换光标所在的字符,支持nr
x or X删除光标所在的字符,包括之前或者之后

底行模式常见命令

命令作用
set nu/nonu打开行号/取消行号
vs 文件名分屏操作
w写入
q退出
!cmd:不退出vim执行对应的命令(执行命令行,编译,运行,查看man)

在vim的底行模式中,

  1. 😒 表示substitute,也就是替换, 格式为以下:
    • :[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
    • range 表示区间 % 用于表示全文, 2,3 表示从第2行开始到第3行
    • {pattern} 表示字符串匹配规则,要匹配什么样的字符串 , 比如^a 表示以a字符起始的字符串
    • {string} 表示要将匹配到的字符串替换为的新的string字符串
    • [flags] s_flags中,g比较常用,通常使用g表示全部替换,默认如果不给的话,表示只替换一次
    • [count] 表示在一行中匹配多少次,很少会用到…
    • 如果想要将文件中所有 nihao 替换为 hello 则命令为: %s/nihao/hello/g
  2. :p 用于打印指定区间的行
    • :[range]p[rint] [flags]
  3. :i 在指定行上方添加文本
    • :{range}i[nsert] [!]

Linux编译器 gcc/g++

程序的翻译过程

文本的C – 计算机二进制

  1. 预处理(a.去注释 b.宏替换 c.头文件展开 d.条件编译 …).i
  2. 编译(C -> 汇编).s
  3. 汇编(汇编 -> 可重定向二进制目标文件).o
  4. 链接(链接 -> 多个 .0,.obj -> 合并形成一个可执行 .exe,.out)
[hmy@VM-8-15-centos ~]$ gcc mytest.c -o hmy //-o指定生成可执行文件的名称,hmy是可执行文件的名称

gcc/g++

选项作用
-o指定生成可执行文件的名称
-E从现在开始进行程序的翻译,如果预处理完成,就停下来
-S从现在开始进行程序的编译,如果编译完成,就停下来
-c从现在开始进行程序的翻译,如果汇编完成,就停下来

动静态库

一般链接的过程,是有两种方式的:

  • 动态链接,需要动态库 Linux:.so Windows:.dll

    将库中我要的方法的地址,填入我的可执行程序中,建立关联!!

  • 静态链接,需要静态库 Linux:.a Windows:.lib

    将库中方法的实现,真的拷贝到我们的可执行程序中!!

gcc/g++默认形成的可执行程序是动态链接的

-static表明使用静态链接的方法形成可执行程序

[hmy@VM-8-15-centos ~]$ gcc mytest.c -o hmy -static

Linux项目自动化构建工具make/makefile

make是一个命令

makefile是一个文件

他们的作用是自动化构建项目

编写makefile

  • 依赖关系
  • 依赖方法
mytest:test.c  //依赖关系
	gcc test.c -o mytest  //依赖方法

.PHONY:clean  //伪目标
clean:  //依赖关系
	rm -f mytest  //依赖方法

make会自顶向下执行第一个依赖关系,当mytest没有写在第一个时,可以显式执行 make mytest

.PHONY伪目标:总是会根据依赖关系,执行依赖方法。习惯给clean设置

Linux软件包管理器 yum

YUM 是 “Yellowdog Updater, Modified” 的缩写,它是一个包管理工具,用于简化在系统上安装、更新和删除软件包的过程。

YUM可以理解为Linux上的软件应用市场

yum的作用:1.搜索、下载、安装 2.解决依赖关系

yum的操作

yum源:就是一个配置文件 [hmy@VM-8-15-centos lesson7]$ ls /etc/yum.repos.d 里面配置了你的下载网址

yum三板斧:

  1. yum list(查找所有软件) yum list | grep py(查找所有软件名包含py的软件)
  2. yum install
  3. yum remove

扩展:

  1. yum makecache 命令:该命令用于将服务器上的软件包信息缓存到本地系统。
  2. yum search 命令:该命令用于在所有可用的软件包中搜索包含指定关键字的软件包。
  3. yum clean all 命令:该命令用于清除缓存中的软件包头文件和旧的软件包。
  4. yum upgrade 命令
    • yum -y update:升级所有包同时,也升级软件和系统内核;
    • yum -y upgrade:只升级所有包,不升级软件和系统内核,软件和内核保持原样。 所以D选项不完整严谨

版本控制器 git

git三板斧:

预备:

  1. git clone 你的git仓库链接 例如:git clone https://gitee.com/h-miyang/for_-linux.git
  2. git add 你的文件 #添加我们的代码到本地仓库 例如:git add . 或 git add test.c
  3. git commit -m “这里必须写提交日志!” #提交代码到本地仓库中
  4. git push #提交我们的代码到远端仓库

其他情况:

  1. 有时候无法提交,会出现提交冲突 无脑 git pull
  2. .gitignore #不想提交某些后缀的文件同步到远端的git仓库,就可以添加到.gitignore
  3. git rm 删除文件

调试器 gdb

(no debugging symbols found). gcc && g++默认形成的可执行程序是release的!!故无法直接被调试!

gcc mytest.c -o mytest-debug -g # -g表示该程序是debug方式发布的

gdb操作:

gdb会记录最近一条命令,如果命令无变化,就直接回车2

命令作用
quit退出gdb
r(run)开始调试,如果没有设置断点,就直接结束运行!
b(breakpoint)+ 行号给特定的行号打断点
info(information) b查看断点
d(delete)+ 断点编号删除断点在这里插入图片描述
n(next)逐过程
p(print)+ 变量名打印变量内容
s(step)逐语句
bt查看当前调用堆栈
finish将当前函数跑完就停下来
display + 变量名设置长显示
undisplay + 变量名编号取消长显示
until + 行号跳转到指定行
c(continue)运行至下一个断点处停下来
disable/enable + 断点编号使能(打开和关闭)断点

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言第二弹---C语言基本概念(下)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 C语言基本概念 1、字符串和\02、转义字符3、语句和语句分类3.1、空语句3.2、表达式语句3.3、函数调⽤语句3.4、复合语句3.5、控制语句 4、注释4.1、注释的两种形…

20240115在ubuntu20.04.6下给GTX1080M显卡安装驱动程序和CUDA

20240115在ubuntu20.04.6下给GTX1080M显卡安装驱动程序和CUDA 2024/1/15 18:05 百度搜索:ubuntu gtx1080m cuda https://blog.csdn.net/wb4916/article/details/129462103 20230311给Ubuntu18.04下的GTX1080M安装驱动 https://www.cnblogs.com/djiankuo/p/5886605.h…

MAX-4/11/03/016/08/1/1/00元件温度性能对模块温度特性的影响

MAX-4/11/03/016/08/1/1/00元件温度性能对模块温度特性的影响 DC/DC电源模块高温失效原因分析 "引言   DC/DC电源模块(以下简称模块),是一种运用功率半导体 ... 的一款高性能DC/DC电源模块。与tnterlmint的MHF2815S相比&#xff0c…

目标检测数据集 - 安全帽检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍:安全帽检测数据集,真实场景高质量图片数据,涉及场景丰富,比如工地行人佩戴安全帽、建筑干活行人佩戴安全帽、视察行人佩戴安全帽、高空作业人员佩戴安全帽、遮挡行人佩戴安全帽、严重遮挡行人佩戴安全帽数据&#xff0…

经典目标检测YOLO系列(二)YOLOV2的复现(2)正样本的匹配、损失函数的实现及模型训练

经典目标检测YOLO系列(二)YOLOV2的复现(2)正样本的匹配、损失函数的实现及模型训练 我们在之前实现YOLOv1的基础上,加入了先验框机制,快速的实现了YOLOv2的网络架构,并且实现了前向推理过程。 经典目标检测YOLO系列(二)YOLOV2的复现(1)总体…

VUE---自定义指令

自定义指令:自己定义的指令,可以封装一些dom操作,扩展额外功能。可分为全局注册与 局部注册。 全局注册(main.js中注册): Vue.directive(指令名称,{ bind(ele,binding) {}, // 只执…

【办公类-21-01】20240117育婴员操作题word合并1.0

背景需求: 最近学校组织老师们学习“育婴员”高级,每周学习2题操作,所以我是把每个学习内容单独做在一个word文件里 上周8套保健操作学完了,需要整理,并将8份Word文件合并 第一步:doc装docx 合并时程序报…

CentOS搭建DNS服务器

服务器规划 DNS服务器IP为:172.16.32.253 需要自定义域名解析 172.16.32.253 dns.zhangsan.com 172.16.32.128 test1.zhangsan.com 172.16.32.129 test2.zhangsan.com 172.16.32.130 www.zhangsan.com 1. 服务器初始化 [rootlocalhost ~]# hostnamectl set-hostnam…

Python OpenCV 影像处理:影像二值化

► 前言 本篇将介绍使用OpenCV Python对于图像上的二值化操作,二值化主要用途包括图像分割、物体侦测、文字识别等。这种转换可以帮助检测图像中的物体或特定特征,并提取有用的信息。透过程式码的说明,让各位了解OpenCV Python于图像处理上的…

Python数据分析(1)Matrix Manipulation

主要根据的是这学期修的一门data science and analysis课程里的lab,自己做完lab之后会反思一下自己学到的内容吧。 然后这周lab的话主要是用numpy来处理矩阵(毕竟numpy可以有效地处理数组)。 创建矩阵 np.zeros(k), np.ones(k) #一维矩阵 …

uniapp h5 生成 ubuntu桌面程序 并运行方法

uniapp h5 生成 ubuntu桌面程序 并运行方法,在window环境下开发,发布到ubuntu桌面,并运行 1、安装Nodejs 安装包官方下载地址:https://www.nodejs.com.cn/ 安装完后cmd,如图,即安装成功 2、通过Nodejs安装 electron…

适合初学者的机器学习开源项目合集(已加入Github加速计划)

目录 开源项目合集[>> 机器学习路线图:mrdbourke/machine-learning-roadmap](https://gitcode.com/mrdbourke/machine-learning-roadmap)[>> 机器学习资源的汇总:johnmyleswhite/ML_for_Hackers](https://gitcode.com/johnmyleswhite/ML_for…

golang面试题大全

go基础类 1、与其他语言相比,使用 Go 有什么好处? 与其他作为学术实验开始的语言不同, Go 代码的设计是务实的。每个功能和语法决策都旨在让程序员的生活更轻松。Golang 针对并发进行了优化,并且在规模上运行良好。由于单一的标…

2024 前端高频面试题之 HTML/CSS 篇

【前言】随着市场的逐渐恶劣,通过总结面试题的方式来帮助更多的coder,也是记录自己的学习过程,温故而知新。欢迎各位同胞大大点评补充~ 前端面试题之 HTML/CSS 篇 1、HTML 语义化?2、块级元素&内联样式3、盒子模型的理解&…

提升开发效率,Fiddler Everywhere for Mac助您解决网络调试难题

在现代软件开发中,网络调试是一个不可或缺的环节。无论是前端开发还是后端开发,我们经常需要对网络请求进行监控和调试,以便及时发现并解决问题。而Fiddler Everywhere for Mac作为一款强大的网络调试工具,能够帮助开发者提升工作…

Dubbo使用详解

简介 Dubbo是一个高性能、轻量级的开源Java RPC框架,由阿里巴巴公司开发并开源。它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。Dubbo使得应用可通过高性能的 RPC 实现服务的输出和输…

CentOS 8.5 安装图解

特特特别的说明 CentOS发行版已经不再适合应用于生产环境,客观条件不得不用的话,优选7.9版本,8.5版本次之,最次6.10版本(比如说Oracle 11GR2就建议在6版本上部署)! 引导和开始安装 选择倒计时结…

深度解析 Compose 的 Modifier 原理 -- Modifier.composed()、ComposedModifier

" Jetpack Compose - - Modifier 系列文章 " 📑 《 深入解析 Compose 的 Modifier 原理 - - Modifier、CombinedModifier 》 📑 《 深度解析 Compose 的 Modifier 原理 - - Modifier.composed()、ComposedModifier 》 📑 《 深入解…

强化学习(二)多臂老虎机 “Multi-armed Bandits”——1

将强化学习与机器学习、深度学习区分开的最重要的特征为:它通过训练中信息来评估所采取的动作,而不是给出正确的动作进行指导,这极大地促进了寻找更优动作的需求。 1、多臂老虎机(Multi-armed Bandits)问题 赌场的老虎…

springBoot如何动态切换数据源

项目背景:最近公司中需要搭建mysql的主从,想着在spring中集成多数据源。mybatisplus提供的有插件用DS注解就能够实现,但是这种在mysql服务宕机的情况下不能够进行自动切换,于是就想着用aop自定义注解的方式来实现 项目实现效果&a…