Linux环境基础开发工具

一. 前言 一点常识
IDE(集成开发环境)依赖图形界面;
主流IDE也支持远程开发,但是当前远程开发的用户体验很差;
在没有图形界面的Linux环境下来开发调试代码,IDE往往效果差强人意,只能靠一组基于命令行的工具软件来完成日常开发;
命令行工具
代码编辑————vim
编译——————gcc
调试——————gdb
工程管理————makefile
包管理器yum

  • 可以理解为==命令行版本的应用商店【对应的服务器叫做软件源】
  • yum的所有操作必须在网络畅通的前提下使用
  • |叫做管道,能衔接两条指令【yum list | grep tree】
yum的基本用法
1.yum list(往往搭配 | grep 使用)
2.yum install安装(必须有管理员权限)【只能安装一些知名的常见软件】
3.yum remove卸载
【su能够切换到管理员用户;sudo不切换用户,但是使用管理员权限运行程序;如何退出管理员?exit或者ctrl +d】
【除了yum之外,还可以使用源代码直接编译的方式安装(极其复杂)】
二.正文 1.Vim【文本编辑器】
vim配置方法——>码云——>vimforcpp【具体的功能演示见码云】史上最强大的文本编辑器之一【对手:Emacs】

Vi => Vim(1991)
  • 强大体现在两个原因
    1.支持非常丰富的快捷键【操作效率非常高,学习成本比较高】
    2.支持非常强大的扩展能力【插件机制】,背后依赖着一个编程语言【VimL】
  • 吹逼时刻【Vim的对手们】
    1.Emacs
    2.notepad++/notepadplus/utrla edit/source insight
    3.Sublime Text(史上最性感的编辑器)
    1)界面好看
    2)支持vim风格的快捷键
    4.Atom(Github)
    1)界面好看
    2)支持vim风格的快捷键
    3)支持非常强大的扩展(安装插件非常方便)
    4)启动特别慢
    5.VSCode(MS)【发展非常迅猛】
    1)界面好看
    2)支持vim风格的快捷键
    3)支持非常强大的扩展(安装插件非常方便)
    4)启动速度还很快
    6.neovim真正有望取代Vim的软件
    那几个界面长得好看的有个致命缺点,就是依赖图形界面,emm…所以…
  • 进入Vim,直接在命令行输入vim
  • 进入后退出则在最下面输入:quit
  • vim text.c【文件名】,进入该文件进行文本编辑,如果文件不存在,则创建并且进入
    —————————————————————————————————
    Vimtutor【Vim官方文档】【建议看官方文档,实践学习】
    <1>
  • 【Linux环境基础开发工具】在普通模式下,要移动光标,请依照说明分别按下 h【左】、j【下】、k【上】、l【右】 键
  • 在普通模式下,可以按下 x 键来删除光标所在位置【绿色框框所指】的字符。
  • 在普通模式下,按i进入插入模式,然后进行插入,插入到【绿色框框所指前一个位置
  • 按大写字母A进入插入模式,光标指向行尾
    <2>
  • 普通模式下,欲从当前光标删除至下一个单词,请输入:dw
    普通模式下, 欲从当前光标删除至当前行末尾,请输入:d$
    普通模式下,欲删除整行,请输入:dd
  • 在普通模式下,输入 2w 使光标向前移动两个单词。
    在普通模式下,输入 3e 使光标向前移动到第三个单词的末尾。
    在普通模式下,输入 0 (数字零) 移动光标到行首。
  • 在普通模式下,输入 d2w 以删除两个大写字母单词。
    Linux环境基础开发工具
    文章图片

  • 在普通模式下,输入 dd 删除该行;输入 2dd 删除两行。
  • ctrl +z 切换程序到后台;fg<回车>切换回刚才的程序
  • 小写u撤销一处修改
    大写U撤销整行的修改
    大写R【反撤销】,即ctrl+r——>redo
  • vim中删除的内容都放在剪切板中【vim的寄存器,(此寄存器非cpu中的那个寄存器)】
    <3>
  • 置入类命令:【输入 p 将最后一次删除的内容置入光标之后
    练习举例:
    1.请将光标移动到第一个标记有 —> 的一行。
    2. 输入 dd 将该行删除,这样会将该行保存到 Vim 的一个寄存器中。
    3. 接着将光标移动到 一行,即准备置入的位置的上方。记住:是上方哦。
    4. 然后在正常模式下(键进入)输入 p 将该行粘贴置入。
  • 替换类命令:【输入 r 和一个字符替换光标所在位置的字符。
  • p粘贴剪切板中的内容,r替换光标位置的字符
  • c修改类命令,删除内容的同时进入插入模式
    <4>
  • ctrl + g能够显示文件状态信息(例如,文件有多少行等)
  • G来到文件末尾;【number】G或者:【number 】跳到任意指定行;
  • gg来到文件开头;"【快速两下】回到上次的位置
  • 搜索类命令:在普通模式下,/在该文件中进行字符串查找,n查找下一个,N查找上一个。
  • %能够查找到匹配的括号【},],)】【把光标指到一个括号上,按%,则会跳转到与之匹配的括号】
  • 替换操作:把光标指向要替换的那一行,按:s/old/new【把old替换成new(只替换一次)】;:s/old/new/g【全部替换该行】
    Linux环境基础开发工具
    文章图片

    <5>
  • 在vim内执行外部命令的方法
    在输入:!然后紧接着输入一个外部命令就可以执行该外部命令
    【提示1:所有的外部命令都可以以这种方式执行,包括带命令行参数的那些】
    【提示2:所有的命令都必须以敲<回车>键结束】
  • 关于保存文件的更多信息
:w【文件名】,就是将文件另存为新文件名文件

<6>
  • 小写字母o,在光标的下方创建新的一行,并进入插入模式
  • 大写字母O,在光标的上方创建新的一行,并进入插入模式
  • i是在当前光标之前进入插入模式;I(大写字母i)是在行首进行插入
  • a是在当前光标之后进入插入模式; A是在行末进行插入
  • v【小写】进入可视模式,选中一段内容,y复制选中的内容,p粘贴剪贴板的内容。
  • :set number【启用行号】;:set nonumber【取消启用的行号】
  • :set hlsearch,高亮显示搜索结果;:set nohlsearch,不高亮显示
  • set 设置一些编辑器选项
  • :set mouse=a,启用鼠标;:set -=a,取消启用鼠标
    <7> 创建启动脚本【重点】
一点补充
  • 在xshell中,按ctrl + s冻结当前界面,按ctrl + q解除上面的冻结
Vim是基于模式的方式完成编辑
-Vim刚刚启动此时叫做普通模式(Normal),普通模式下不能直接输入内容,此时敲下的按键多半都是带有特定功能的快捷键。需要进入插入模式i才能进行编辑。
插入模式编辑完毕之后,按esc回到普通模式;: w进行保存;:Q进行退出; :q!强制退出不报存。
普通模式下按进入底行模式
普通模式下按R进入底行模式
普通模式下按V[小写]进入底行模式
Linux环境基础开发工具
文章图片


==**使用中学习**==

2.gcc【编译】
gcc【文件名】编译文件得到的可执行程序默认叫做 a.out,如果想自己命名可 gcc 【文件名】-o 【自己起的名】

一点补充
  • -g编译的时候保留调试信息【类似vs 中的debug模式】
  • -O <大写O>【-O0(不优化),-O1【默认】,-O2,-O3(优化级别最高 )】
  • 优化级别越高,程序的实际执行顺序,就和原始的执行 顺序差别越大,必须要关闭优化才能进行调试。【建议,最稳健的做法】
    例子
    vim test.c
    gcc test.c -g -o test
    ll
    ./test
    gdb test【break 行号,行号不好打,此时可以在新建一个xshell 窗口,然后打开vim 代码,两边对照着调试】
    run 【代码就跑起来了】
    print 可以查看变量【print i】
3.gdb【调试器】【多调试】
小技巧:ctrl +r 能够快速搜索之前敲过的命令
重新调试必须得重新编译【手动】
1)基本调试命令
  • backtrace或者bt:查看函数的调用栈frame或者f +编号,切换到某个指定栈帧,实际上程序并没有继续执行,仅仅是切换了指向栈帧而已。【非常重要】
  • break或者b,可以给某个位置的代码打断点,参数可以是一个行号,也可以是函数名
  • run或者r,开始执行
  • print或者p,查看变量内容
  • iinfo b,查看断点信息
  • continue或者c,继续运行
  • quit或者q,退出gdb
  • next或者n单步执行【逐过程】《跨过函数》
  • step或者s单步执行【逐语句】《进入函数》
2)调试步骤和思路【落在实践】
1.确认是不是bug【唯一依据:产品需求】《抛开需求谈测试都是在耍流氓,确认需求,在写测试用例》
2.定位问题【逐渐缩小问题的范围,找到哪行代码引起的bug】
3.分析问题的原因
4.提出方案并且修改问题【因地制宜】
5.测试(回归测试,防止代码的修改引入新的问题),由于回归测试成本比较高,往往以自动化测试为主。
3)真实的用法重点
1.使用gdb调试coredump文件【核心转储文件】【coredump就是车祸现场(照片),程序的临终遗言】,称之为事后调试
ulimit -a 暂时学会看core file size ,意味着吐出的核心转储文件最大允许为多大,如果他为0,则代表不让吐;然后用ulimit -c unlimited修改大小,然后再用ulimit -a查看,然后在用./test查看,在 ll一下,此时出现例如core .8215核心转储文件,.8215这是之前那个进程的程序ID【PID,类似身份证号码】;然后如果用vim core .8215打开,则是二进制文件,所以应该用gdb打开,例如 gdb test core .8215,也就是gdb 可执行程序文件名 core文件,此时在回车,就能看到了,此时也可以搭配bt在一起调试
2.使用gdb attach(附加)上一个程序
3.gdb运行一个程序的方式调试【见基本调试指令】
【TODO(进程相关的内容之后)】
cgdb比gdb更方便一点点
4.makefile【工程管理工具】
主要解决大型项目中的模块之间的依赖问题
三个核心要素
1.目标
2.依赖
3.命令
make命令的执行过程
1.先在当前目录中查找makefile文件
2.找到要生成的目标(决定是否要真的生成)
3.检查依赖的文件是否都存在
4.执行生成动作的命令
一点补充
  • 一个makefile中可以存在多个目标,有的目标并不是为了要生成个东西,而仅仅就是为了执行一些特定的动作,最典型的就是clean方式(清空之前生成的目标)
  • make指令后面带上参数(要去生成的目标)
  • 如果makefile中包含了多个目标,直接敲make默认生成第一个目标
  • clean这样的目标,只是为了执行一个动作,而不是为了生成文件。如果此时在目录中碰巧有一个叫clean这样的文件,就会影响到动作的执行,就可以使用.PHONY把clean声明成“伪目标”。
  • CMake:开源世界中广泛使用的构建工具
  • Blaze(火焰刀):比较重量级的构建工具【谷歌提供】
【增量编译】《==》【全量编译】
vim批量注释代码
1.ctrl + v进入可视列模式
2.拖动光标,把要注释的代码的第一列都选中
3.按shift i(大写字母i)进入插入模式
4.输入//
5.按esc 回到普通模式

    推荐阅读