目录
1.1、认识yum
1.2、yum的三板斧
1.3、安装lrzsz 或者xftp。
1.3.1lrzsz的下载和使用
1.4、 vim的使用
1.4.1、vim的三种模式
1.4.2、vim的三种模式的作用
1.4.3、 vim的基本操作
1.4.3、vim在不同模式下命令集合
1.4.4、swap文件没有正常关闭应该怎么样处理呢?
1.4.5、生成可执行程序过程
1.4.6、静态编译和动态编译
1.5、调试器(gdb)
1.5.1、程序发布的两种方式:debug模式和release模式
1.5.2、基本的调试技巧
1.5.3、调试崩溃的程序产生的coredump文件
1.1、认识yum
要安装vim首先我们要知道一个工具yum,yum就是一个应用商店,类似于华为商店,苹果商店等等,里面有经过yum源认证的软件安装包。如果程序员想要那个软件包,就可以使用yum搜索和安装。由于是从yum源下载到本地进行安装,所以必须要有网络。
1.2、yum的三板斧
yum list :查看yum都有哪些安装包加上管道进行过滤
yum list | grep“tree”
yum install 【-y】//-y的意思就是在询问我们是否安装的时候,选择是【待要安装的软件包名称】:
yum remove 【待要卸载的软件包名称】:卸载某个软件包
1.3、安装lrzsz 或者xftp。
//此外在这里介绍一下lrzsz和xftp的作用。lrzsz和xftp其实就是两个支持我们的Linux系统和windows系统之间文件的上传和下载一个软件。通过一张图来理解

1.3.1lrzsz的下载和使用
rz:将windows机器的文件上传到linux机器中
sz:将linux操作系统的文件下载到windows机器中
//这里注意lrzsz只支持文件的上传的下载不支持文件夹,当然要是强行用lrzsz的话可以将文件夹压缩进行传输

(1)xftp的作用和lrzsz的作用是一样的只不过它更直观是图形界面的。
奉上xftp的安装包 //这里是xftp7的安装包xftp6的安装包可以看我往期博客关于xshell6的详细使用Xshell的安装及使用超详细教程_月半木斤的博客-CSDN博客
链接:https://pan.baidu.com/s/1pmGozHt2dBlRCzkCvPWUYw
提取码:m9qr
安装好之后:

进入界面我们就可以拖动传输文件了,十分的方便快捷,因此我们多在工作中使用

安装vimforcpp
只要输入这个网址https://gitee.com/HGtz2222/VimForCpp
当然我们安装好vim之后它只是一个最简陋的版本里面什么都没有,我们写代码也是要追求 幸福感的嘛,所以我们要安装一个插件,这里只需要输入命令
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh 就可以安装插件了。在那个用户下执行就在那个用户下生效。
代码编辑风格需要在vim~/.vimrc文件夹里修改文件内容,将50,51,52行改为4

如果你是代码风格习惯将{}放在函数的下一行可以将185行前边加上双引号注释一下。
1.4、 vim的使用
1.4.1、vim的三种模式
vim一共有 三个模式:普通模式、插入模式、底行模式。这三种模式可以互相转换,在不同的模式下可以进行相应的操作,下面我们借助一张图来理解:

1.4.2、vim的三种模式的作用
正常 / 普通 / 命令模式 (Normal mode):
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode 下,或者到 last line mode
插入模式 (Insert mode):
只有在Insert mode 下,才可以做文字输入,按「 ESC 」键可回到命令行模式。该模式是我们后面用的最频繁 的编辑模式。
末行模式 (last line mode):
文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模 式。要查看你的所有模式:打开vim ,底行模式直接输入
1.4.3、 vim的基本操作
进入vim, 在系统提示符号输入 vim 及文件名称后,就进入 vim 全屏幕编辑画面 : $ vim test.c 不过有一点要特别注意,就是你进入vim 之后,是处于 [ 正常模式 ] ,你要切换到 [ 插入模式 ] 才能够输入文 字。
[正常模式]切换至[插入模式]
输入a
输入i
输入o
[插入模式]切换至[正常模式]
目前处于[ 插入模式 ] ,就只能一直输入文字,如果发现输错了字 , 想用光标键往回移动,将该字删除,可 以先按一下「ESC 」键转到 [ 正常模式 ] 再删除文字。当然,也可以直接删除。
[正常模式]切换至[末行模式]
「shift + ; 」 , 其实就是输入「:」
退出 vim 及保存文件 , 在 [ 正常模式 ] 下,按一下「:」冒号键进入「 Last line mode 」 ,例如:
: w (保存当前文件)
: wq (输入「 wq 」 , 存盘并退出 vim)
: q! (输入 q!, 不存盘强制退出 vim)
1.4.3、vim在不同模式下命令集合
(1)插入模式
按「i」切换进入插入模式「insert mode 」,按 “i” 进入插入模式后是从光标当前位置开始输入文件; [重要]
按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
从插入模式切换为命令: 按「ESC 」键。 [重要]
(2)正常模式
正常模式下的七字真言要牢记:移删复替撤更跳
移动光标
vim可以直接用键盘上的光标来上下左右移动,但正规的 vim 是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格
按「G」:移动到文章的最后 [重要]
按「 $ 」:移动到光标所在行的 “ 行尾 ” [重要]
按「^」:移动到光标所在行的“ 行首 ” [重要]
按「w 」:光标跳到下个字的开头 [重要]
按「e」:光标跳到下个字的字尾
按「b」:光标回到上个字的开头 [重要]
按「#l 」:光标移到该行的第 # 个位置,如: 5l,56l
按[gg ]:进入到文本开始 [重要]
按[shift + g ]:进入文本末端
按「ctrl 」 + 「b」:屏幕往 “ 后 ” 移动一页
按「ctrl 」 + 「f」:屏幕往 “ 前 ” 移动一页
按「ctrl 」 + 「u」:屏幕往 “ 后 ” 移动半页
按「ctrl 」 + 「d」:屏幕往 “ 前 ” 移动半页
删除文字
「x」:每按一次,删除光标所在位置的一个字符 [重要]
「dd」:删除光标所在行 [重要]
「#dd」:从光标所在行开始删除 # 行 [重要]
「#x 」:例如,「 6x 」表示删除光标所在位置的 “ 后面(包含自己在内) ”6 个字符
「X」:大写的X ,每按一次,删除光标所在位置的 “ 前面 ” 一个字符
「#X 」:例如,「 20X 」表示删除光标所在位置的 “ 前面 ”20 个字符
复制
「yy 」:复制光标所在行到缓冲区。 [重要]
「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y” 有关的复制命令都必须与 “p” 配合才能完 成复制与粘贴功能。 [重要]
「yw 」:将光标所在之处到字尾的字符复制到缓冲区中。
「#yw 」:复制 # 个字到缓冲区
「#yy 」:例如,「 6yy 」表示拷贝从光标所在的该行 “ 往下数 ”6 行文字。
替换
「r」:替换光标所在处的字符。
「R 」:替换光标所到之处的字符,直到按下「 ESC 」键为止。 [重要]
撤销上一次操作
「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u” 可以执行多次回 复。 [重要]
「ctrl + r 」 : 撤销的恢复 [重要]
更改
「ctrl 」 + 「g」列出光标所在行的行号。 [重要]
「cw」:更改光标所在处的字到字尾处
「c#w 」:例如,「 c3w 」表示更改 3 个字
跳至指定的行
「#G 」:例如,「 15G 」,表示移动光标至文章的第 15 行行首。
(3). 底行模式
在使用末行模式之前,请记住先按「 ESC 」键确定您已经处于正常模式,再按「:」冒号即可进入末行模式。
列出行号
「set nu 」 : 输入「 set nu 」后,会在文件中的每一行前面列出行号。 [重要]
跳到文件中的某一行
「#」: 「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字 15 , 再回车,就会跳到文章的第15 行。
查找字符
「/关键字」: 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按
「n」会往后寻找到您要的关键字为止。
「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直 按「n」会往前寻找到您要的关键字为止。
保存文件 [重要]
「w 」 : 在冒号输入字母「 w 」就可以将文件保存起来
离开 vim [重要]
「q」:按「q」就是退出,如果无法离开vim ,可以在「q」后跟一个「!」强制离开 vim 。
「wq 」:一般建议离开时,搭配「 w 」一起使用,这样在退出的时候还可以保存文件。
(4)其他快捷操作
多行注释:
1、ctrl+v
2、选中需要注释的行,用hjkl移动光标
3、shift+i:进入插入模式
4、输入注释符号
5、Esc
多行去注释:
1、ctrl+v
2、选中需要去注释的行当中的注释字符,使用hjkl移动光标
3、x删除掉
快速替换:
单行首个目标字符串替换
s / [待替换的目标字符串] / [替换成为该字符串]
单行全部目标字符串的替换
s / [待替换的目标字符串] / [替换成为该字符串] /g
全文替换
%s / [待替换的目标字符串] / [替换成为该字符串] /g
指定行替换
num1,num2s/[待替换的目标字符串] / [替换成为该字符串] /g
结论:
g:表示替换当前行所有
%:代表当前所有行
1.4.4、swap文件没有正常关闭应该怎么样处理呢?
(1)首先我们应该理解什么是swap文件
在我们每次用vim打开一个文件时都会产生一个副本(swap文件),用来保存之前的版本,这样我们就可以理解为什么在我们按下“u”撤销之后会回到上一步。在每次关闭vim打开的文件时随之对应的swap文件也会关闭,如果我们异常退出的话,那么就会导致文件在关闭时没有关闭swap文件从而我们再次打开文件时会出现这样一个界面。

我们可以看到最上面写着Found a swap file by the name 。。。发现了一个名位swap的文件。
那么此时我们只需要将这个swap文件删除即可。将其路径复制,按q直接退出,然后再命令行输入命令rm+[路径] 将其删除。

此时我们再打开文件发现可以正常打开了。
1.4.5、生成可执行程序过程
预处理 ( 进行宏替换 )
预处理功能主要包括宏定义 , 文件包含 , 条件编译 , 去注释等。
预处理指令是以 # 号开头的代码行。
实例 : gcc –E hello.c –o hello.i
选项 “-E”, 该选项的作用是让 gcc 在预处理结束后停止编译过程。
选项 “-o” 是指目标文件 ,“.i” 文件为已经过预处理的 C 原始程序。
编译(生成汇编)
在这个阶段中 ,gcc 首先要检查代码的规范性、是否有语法错误等 , 以确定代码的实际要做的工作 , 在检查
无误后 ,gcc 把代码翻译成汇编语言。
用户可以使用 “-S” 选项来进行查看 , 该选项只进行编译而不进行汇编 , 生成汇编代码。
实例 : gcc –S hello.i –o hello.s
汇编(生成机器可识别代码)
汇编阶段是把编译阶段生成的 “.s” 文件转成目标文件
读者在此可使用选项 “-c” 就可看到汇编代码已转化为 “.o” 的二进制目标代码了
实例 : gcc –c hello.s –o hello.o
一键生成可执行程序
我们也可以用一条指令将我们的源文件生成可执行程序
gcc text.c -o text
在我们生成可执行程序后我们可以通过命令ldd +文件名看到程序u、运行时所用到的共享库
\\扩展:!gcc

1.4.6、静态编译和动态编译
动态编译:在编译程序时直接输入gcc+[源文件名] -o +[生成目标程序] 这就是动态编译
静态编译:而在编译时输入gcc+[源文件名] -o +[生成目标程序] -static 这时就是静态编译

如上图就是静态编译,我们再动态编译生成一个可执行程序

我们可以看出两者执行结果并无差别 ,我们此时通过ll命令来查看文件的具体属性可以看到

静态编译的文件比静态编译的文件整整大了两个数量级。这是为什么呢,这就要从两者的区别上来说了,静态编译的时候会将库文件全部编译到文件中去,而动态编译只会在执行的时候再去执行库文件当中的代码,而静态编译则不同他会将库文件中的代码直接编译到程序当中去,所以占用内存十分之大。
(注:我们在进行静态编译的时候可能会遇到这样的情况
这并不是说我们输入的命令有问题,而是可能系统缺少相应的lib
我们可以下载相应的lib

1.5、调试器(gdb)
1.5.1、程序发布的两种方式:debug模式和release模式
在我们之前提到的程序编译命令编译出来的都是release模式。而要想编译出debug版本则需要在命令行后加上-g。

1.5.2、基本的调试技巧
(1)run命令:首先我们写一个较为简单的程序用作调试
进入调试:

(2)在调试时查看代码:
输入list指令(可以简写为"l"):

如果想查看剩余代码可以再输入一个l

那么如何查看上边的代码呢?
只需要输入l+[空格]+[-]

(3)断点
3.1、下断点: 输入指令breakpoint(简写为b)+[行号]

然后我们再让程序运行,可以发现停在我们的11行

3.2、查看断点
输入:i b

3.3、 删除断点
删除序号为n的断点: delete breakpoints n
删除所有断点:delete breakpoints

3.4、 禁用断点:disable breakpoint

3.5、 启用断点:enable breakpoint

(4) 逐过程执行(对应我们的vs中的F10)next(缩写n)

(5)逐语句执行(对应我们vs中的F11)step(缩写s)

(6)查看变量内容
现在我们已经会了调试最基础的操作,调试过程中要想找出bug所在就必须要查看变量中内容,接下来我们学习如何查看变量内容。我们进入调试,然后在程序的11行下个断点,然后run起来。接下来要查看a当中的内容,输入指令print(简写p)+a
(程序内容)

查看当前栈帧局部变量的值:info locals

(7)查看调用堆栈bt

我们还可以随意跳转到任意函数只要输入l+[函数名]

程序正常跑完退出

退出调试(q)

1.5.3、调试崩溃的程序产生的coredump文件
(1)coredump文件:核心转储文件,实在程序崩溃的一瞬间内存的影像(比如说崩溃时变量中存储的值等等)相当于案发现场
(2)ulimit -a
core file size:决定产生的coredump文件最大能够有多大
一共几种情况
1、core file size为0

2、core file size为sunlimited:不会限制核心转储文件的大小,只要文件小于磁盘内存就可以生成。
3、修改core file size的大小:修改core file size文件的大小可以通过命令unlimit -c unlimited。

(3)调试命令
gbd可执行程序coredump文件
我们先模拟一个程序崩溃产生核心转储文件的场景:

可以看到这是一个典型的越界访问,段错误。

调试coredump文件
输入:gdb+ [可执行程序]+ core文件

看官不要忘记点一个小小的赞,你的赞就是我的动力!!!

