一 :Linux编辑器–vim
1:vim基本概念
vim是Linux下的一个多形式的编译器 简单来说便是写代码的东西 不供给编译调试等功用 有语法高亮功用 可视化操作不仅能够在终端运转 还能够运转与x windows mac os windows
2:vim的常用三种形式
1、指令形式
操控光标的移动 字符,字或行 的删去 ,移动仿制某区段
以及切换到刺进形式和底行形式下
2、刺进形式(运用最频频的形式)
只有在刺进形式下 才能够进行文字的输入
以及切换到指令形式
3、底行形式
文件保存或退出 也能够进行 文件替换 找字符串 列出行号等
以及切换到指令形式
3:vim三种形式的彼此转化
指令形式切换到刺进形式
输入a
:进入刺进形式后 从方针光标所在方位的下一个方位开端输入文字
输入i
: 进入刺进形式后 从光标当时方位开端输入
输入0
:进入刺进形式后 刺进新的一行 从行首开端输入文字
指令形式 切换究竟行形式
输入shift ;
刺进形式/底行形式切换指令形式
按ESC即可
刺进形式和底行形式之间不能彼此转化
4:vim指令形式下的指令集
– 移动光标
- vim能够直接运用键盘来操控光标的上下左右移动,正规的vim运用的是小写字母
h j k l
别离操控光标左下上右移动一格 也能够运用方向键进行移动 - 按
G
:移动到文章的终究 - 按
gg
:进入到文本开端 - 按
$(shift 4)
:移动到光标所内行的行尾 - 按
^(shift 6)
:移动到光标所内行的行首 - 按
n Enter
:光标向下移动n行 - 按
n l
:光标进去到改行的第n个方位 - 按
ctrl b
:屏幕向前翻一页 - 按
ctrl f
:屏幕向后翻一页 - 按
ctrl u
:屏幕向前翻半页 - 按
ctrl d
:屏幕向后翻半页 - 按
w
:光标进入到下个字的最初 - 按
e
:光标进入到下个字的自尾 - 按
b
:光标回到上个字的最初
-删去文字
- 按
x
:每按一次删去光标所在方位一个字符 - 按
n x
:删去光标所在方位后边的n个字符 - 按
X
:删去光标所在方位前一个字符 - 按
n X
:删去光标所在方位后前面的n个字符
-剪切/删去
- 按
dd
:剪切/删去光标所内行 - 按
n dd
:从光标所内行开端剪切/删去n行 - 按
p
:将剪切的内容仿制到光标所在方位下一行 - 按
n p
:将剪切的内容仿制到光标所在方位下一行开端仿制n行
-仿制
- 按
yy
:仿制光标所内行到缓冲区 - 按
n yy
:仿制从光标所内行往下数n行字符到缓冲区 - 按
p
:将缓冲区的字符粘贴到光标所在方位下一行 - 按
yw
:将光标所在方位到字尾的字符仿制到缓冲区 - 按
n yw
:仿制n个字到缓冲区
-替换
- 按
r
: 替换光标所在处的字符 - 按
R
:替换光标所在方位的字符 直到按下esc中止uu - 按
ctrl ~
:快速切换大小写
-吊销和康复
- 按
u
:吊销 - 按
ctrl r
:康复
-跳转至指定行
- 按
n G
:移动到第n行行首
5:vim底行形式下的指令集
在运用底行形式之前 先按ESC键确定自己处于指令形式 然后再按shift ;
进入底行形式
- 输入
set nu
:按回车后在文件中的每一行前列出行号 - 输入
set nonu
:按回车后在文件中的撤销列出的行号 - 输入
数字
:按回车后就会跳转到该行行首 - 输入
w
:保存文件 - 输入
w!
:强制保存 - 输入
q
:退出文件 - 输入
q!
:强制退出文件 - 输入
wq
:保存并退出文件 - 输入
vs 文件名
:进行多文件操作 - 输入
ctrl ww
:光标在不同文件中切换 -
! 其他指令
:在不退出vim的情况下履行Linux其他指令
二:Linux编译器–gcc/g
1:gcc/g 的效果
gcc/g 别离是GUN中的c和c 编译器 关于 .c和.cpp文件,gcc别离作为c和cpp文件编译(c和cpp的语法强度是不相同的) 关于 .c和.cpp文件,g 则一致作为cpp文件编译
在运用gcc之前 应该了解一个.c源文件到一个.exe可履行程序经历了哪些进程和函数库 # 程序编译链接的四个进程
- 预处理
完结头文件的展开 删去注释 宏替换等作业
- 编译
将源代码翻译成汇编语言 语法分析 词法分析 语义分析等
- 汇编
汇编代码转化成为二进制指令发生方针文件
- 链接
将汇编进程发生的二进制指令进行连接 生成可履行程序
2:gcc/g 的语法
gcc/g 选项 文件
常用选项:
-E :只进行预处理 不会生成文件 需求自己重定向到一个文件里
-S: 编译到汇编语言(生成.s文件) 不进行汇编和链接
-c:编译到方针文件 (生成.o文件) 不进行链接
-o:将履行成果输出到指定文件中
-static:对生成的文件选用静态链接
3:预处理
gcc -E -o test.i test.c
将源文件test.c进行预处理后中止 将是履行成果输出到test.i文件中
能够看到预处理阶段完结了头文件的展开 删去注释 宏替换等作业
4:编译
gcc -S test.s
将预处理阶段发生的test.i文件编译发生.s汇编文件
5:汇编
gcc -c test.s
将汇编文件test.s编译成发生.o方针文件
6:链接
gcc test.o
将方针文件链接发生可履行程序a.out
假如你也和我相同 不喜欢a.out 用-o进行重定向gcc -o test.exe test.o
可履行程序也是二进制指令
7:函数库
咱们在c程序中,并没有完结printf函数,且在预编译中包括的头文件stiod.h中也仅仅只是有该函数的声明 并没有定以完结该函数 那么printf函数在哪里完结的呢?
在Linux中 体系把这些函数都完结在一个名为libc.so.6(Linux中的一个动态链接库 包括了标准c库的完结)的文件中 在没有特别指定时 gcc会到体系默许的途径”/usr/lib”下进行查找,也便是链接到libc.so.6库函数中去 这样就能完结函数printf了 这也便是链接的效果
库函数一般分为静态库和动态库
– 动静态库
- 静态库是指在编译链接时 把库文件的代码悉数加入到可履行文件中 因而生成的可履行程序文件会比较大 但在运转时也就不需求库文件了在linux下后缀名一般为.a windows中后缀名为.lib
- 动态库则是在编译链接时并没有把库文件的代码加入到可履行文件中,而是在程序履行时由运转时链接文件加载库 这样能够节省体系的开销 在Linux下后缀为.so windows后缀为.dll 前面所说的libc.so.6便是动态库
- gcc在编译时默许运用动态链接(运用file指令验证)
file 指令
语法: file 文件名
功用: 辨识文件类型
gcc/g 在编译时默许选用动态链接 咱们也能够加上-static选项运用静态链接的方式编译
gcc -o newtest.exe test.c -static
选用静态链接 可履行程序会比较大
咱们也能够检查一个可履行程序所依靠的库(运用ldd指令)
ldd 指令
语法: ldd 可履行程序
功用: 检查一个可履行程序依靠的库
– 动态链接的优缺点
8:静态链接的优缺点
三:Linux项目主动化构建东西make/makefile
- make/makefile 是Linux项目主动化构建的东西
- make是一个指令东西 是一个解释makefile傍边的指令的东西
- makefile是一个文件 带来的好处便是主动化编译 makefile写的好 只需求一个make指令 就能完结整个工程的主动编译 极大提高了开发效率 一个比较大的工程源文件不计其数 依照其类型 功用 模块存放在若干个目录中 mkaefile定义了一系列的规则来指定哪些文件需求先编译 哪些文件需求后编译 甚至于进行更杂乱的功用操作
- make需求和makefile相互调配运用 完结项目的主动化构建
在运用make/makefile之前 先了解一下各个文件之间的依靠联系和依靠办法
依靠联系
依靠办法
make作业原理
- 当咱们输入make指令时 make会在当时目录下寻觅名为Makefile或许makefile的文件
- 找到之后 他会找文件中的第一个“方针文件” 上面makefile例子中 他会找到test这个文件 将这个文件作为终究的”方针文件”
- 假如test文件不存在 或许是test所依靠的后边test.o 文件的修正时刻 要比这个test文件新 那么他就会履行后边所定义的指令来生成test这个文件
- 假如test所依靠的test.o文件不存在 那么make会在当时文件中找方针位test.o文件的依靠 找到的话 在根据那一个规则生成test.o文件
- 这便是整个make的依靠性 make会一层一层的去找文件的依靠联系 知道终究编译出第一个方针文件
- 假如在查找进程中 被依靠的文件找不到 make就会直接退出 并报错 假如是定义的指令过错 或许是编译不成功 make根本不会理-
- make只管文件的依靠性 假如找到了依靠联系后 冒号后边的文件仍是不存在 这样的话make也不会作业
在从头发生一个可履行程序时 都应该将之前生成可履行程序以及生成的文件进行整理 即项目是需求整理的
项目整理
make clean指令是用来铲除一切的方针文件 以便从头编译 像铲除这种没有被第一个方针文件直接或间接关联 那么他后边所定义的指令将不会被主动履行 一般这种clean的方针文件 直接将他设置位伪方针 .PHONY修饰,为方针的特性是能够强制履行
四:Linux调试器–gdb
布景:
- 一个程序的发布方式有两中 别离是debug 和release形式 debug一般是开发人员需求的环境 程序员需求调式找bug并处理bug release是通过优化后的版别 是用户运用的版别 不需求加入调试信息
- Linux下 gcc/g 编译的二进制程序默许是release形式
- 要运用gdb调试 有必要是debug形式 在gcc/g 编译时 加上-g选项即可
gdb的运用
-
gdb 可履行程序
:进入调试 -
ctrl d 或许 q
:退出调试 -
list/l 行号
:显现指定行之后的源码 每次显现10行 -
list/l 函数名
:显现函数的源码 -
b 行号
:在指定行设置断点 -
b函数名
:在指定函数最初设置断点
-
info b
:检查自己打的断点信息 -
d breakpoints
:删去一切断点 -
d 断点编号
:删去对应的断点 -
disable 断点编号
:禁用断点 -
enable 断点编号
:启用断点 -
r(run)
:运转程序 -
n(next)
:单条履行、逐进程履行 与vs中调试器的F10相同 -
s(step)
:进入函数调用 逐句子履行 与vs中调试器的F11相同 -
p (print) 变量名/&变量名
:显现变量的值或地址 -
display 变量名/&变量名
:一向显现变量的内容或地址 -
undisplay 编号
撤销一向显现变量的内容或地址 -
c(continue)
:从一个断点运转到下一个断点 -
finsh
:将一个函数运转完毕就停下来 -
until
:直接运转到指定行 -
set var
:修正一个变量的内容(不必修正源代码 进行多分支测试)