一. 前言 一点常识
IDE(集成开发环境)依赖图形界面;
主流IDE也支持远程开发,但是当前远程开发的用户体验很差;
在没有图形界面的Linux环境下来开发调试代码,IDE往往效果差强人意,只能靠一组基于命令行的工具软件来完成日常开发;
命令行工具
代码编辑————vim
编译——————gcc
调试——————gdb
工程管理————makefile
包管理器yum
- 可以理解为==命令行版本的应用商店【对应的服务器叫做软件源】
- yum的所有操作必须在网络畅通的前提下使用
- |叫做管道,能衔接两条指令【yum list | grep tree】
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 以删除两个大写字母单词。
文章图片
- 在普通模式下,输入 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【全部替换该行】
文章图片
<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刚刚启动此时叫做普通模式(Normal),普通模式下不能直接输入内容,此时敲下的按键多半都是带有特定功能的快捷键。需要进入插入模式i才能进行编辑。
插入模式编辑完毕之后,按
esc
回到普通模式;: w
进行保存;:Q
进行退出;
:q!
强制退出不报存。普通模式下按
:
进入底行模式普通模式下按
R
进入底行模式普通模式下按
V
[小写]进入底行模式文章图片
==**使用中学习**==
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】
小技巧:ctrl +r 能够快速搜索之前敲过的命令
重新调试必须得重新编译【手动】
1)基本调试命令
- backtrace或者bt:查看函数的调用栈;frame或者f +编号,切换到某个指定栈帧,实际上程序并没有继续执行,仅仅是切换了指向栈帧而已。【非常重要】
- break或者b,可以给某个位置的代码打断点,参数可以是一个行号,也可以是函数名
- run或者r,开始执行
- print或者p,查看变量内容
- iinfo b,查看断点信息
- continue或者c,继续运行
- quit或者q,退出gdb
- next或者n单步执行【逐过程】《跨过函数》
- step或者s单步执行【逐语句】《进入函数》
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 回到普通模式