linux下vim、gcc、gdb的使用

目录

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文件

 

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

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月半木斤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值