Linux基础二
1. Linux编译器——vim
1.1vim常用三种模式
vim编译器有许多种模式,但我们常用的模式只有三种分别为:命令模式、低行模式,插入模式。
- 命令模式: 可对编译器中的字符进行复制、删除、粘贴等操作,或者进入插入模式、低行模式。
- 插入模式: 在该模式下我们才能进行代码的输入。
- 低行模式: 可对文件进行保存和退出、可以进行文件替换、列出行号等操作。
1.2 vim的操作指令
vim的操作指令复杂繁琐,这里就需要我们多加使用vim练习。
- 三种模式的切换:
从命令模式进入到插入模式输入i、a、o。
从插入模式退回到命令模式敲击键盘上的ESc键。
从命令模式进入低行模式敲击shift + :。
从低行模式退回到命令模式敲击键盘上的ESc键。
注意: 低行模式和插入模式不能相互进入和退回。要想从低行模式进入到插入模式只能先退回到命令模式再进入插入模式。 - 插入模式和低行模式的操作。
- 如何对代码进行注释: 首先按下shift + v进入可视化模式,再按下h、j、k、l
选择要注释的代码区域。
再按下shift + i和**//。之后双击ESC**,就完成对代码的注释。
2. Linux编译器的 gcc / g++
2.1 在xshell中安装 gcc/g++
sudo yum install -y gcc //安装gcc
sudo yum install -y gcc-c++ // 安装g++
创建g++ 文件
g++ test.cc -o test.exe // g++ 文件后缀可以以xxx.cc 或者 xxx.cpp 结尾
g++ test.cpp -o test.exe // -o 可以更改 文件名
2.2 程序的编译的过程
- 预处理:(gcc -E)从现在开始进行程序的编译,直到预处理完成就停下。
- 将代码中注释去掉
- 宏定义的变量替换
- 将头文件展开 (就是将头文件拷贝到目标文件)
ls/usr/include //在xshell 中查询头文件
- 条件编译
条件编译要使用到 #ifdef - #endif 对代码进行动态的裁剪。gcc-D 直接使用命令对代码定义宏进行动态裁剪。
- 编译: 将代码中的C语言转变成汇编语言。(gcc-O)从现在开始进行程序的编译,编译完成就停下。
- 汇编: 将汇编语言编译成二进制目标文件。(gcc-c) 从现在开始进行程序的编译,汇编完成就停下。注意:即使汇编成了二进制目标文件若不是可执行文件,依旧不能够运行。
(文件能不能执行需要两个条件: 1. 权限中有“x” 2. 文件本身就是可执行文件) - 链接: 形成可执行文件。
Linux自动化构建工具 make/Makefile
test:test.c // 依赖关系
gcc -o $@ $^ // 依赖方法
.PHONY: clean
clean: // 依赖关系
rm -f test // 依赖方法
- make 是一个命令 makefile是一个文件
- make 会根据makefile的内容,完成编译工作/清理
- 当命令只有make 的时候默认形成一个目标文件,因此我们一般将可执行程序放在前面。
- .PHONY:xxxx 表示xxxx对应的方法总是要被执行的。
- makefile中的内置符号: @ 表示的是目标文件 ^表示的是依赖文件列表
- 在makefile中注释使用 “ # ” 。
Linux调试器 - gdb
程序有两种模式,debug版本和release版本。debug能被调试,release不能被调试。
当我们使用gcc/g++编译时,默认编译采用release模式。加上 -g 转成debug编译。
-
使用 gdb file.name
-
q退出
-
list查看文件源代码 或者 l +文件名 + 行号
-
设置断点 : break(b) + 行号
-
查看断点: info/i break
-
删除断点: delete 断点编号
-
禁用断点: disable 断点编号
-
启用断点: enable 断点编号
-
逐过程: next/n
-
逐语句: step/s
-
查看变量的内容(变量名)和地址(&变量名) : print/p
-
在gdb中长显示: display
-
continue/c : 运行支下一个断点处
-
finish: 运行结束所在的函数,就停下来。
-
until : 跳转至指定行,中间的代码都是运行了的。
我们的调试工具的意义是帮助我们查找问题的,解决问题还是要靠自己。