linux下的基本开发工具
yum——软件包管理工具
查看软件包:yum list
安装软件包:yum install package_name
搜索软件包:yum search package_name
移除软件包:yum remove package_name
yum install gcc
yum search gcc//搜索制定软件包
写代码相关工具:编辑器/编译器/调试器
vim——代码编辑器
1.模式
实际有12种,常见的有三种-普通模式 插入模式 底行模式,所有的模式打开都是围绕普通模式切换的。vim 打开一个文件默认处于普通模式。
2.模式切换
i/a/o/ 由普通模式换到插入模式
- i 直接进入插入模式
- a 光标后移一个字符,进入插入模式
- o 在光标所在行下方创建新行,进入插入模式
Esc键 由插入模式换到普通模式
Esc键 由底行模式切换到普通模式
: 由普通模式切换到底行模式
3.常见指令操作
普通模式下的操作
光标移动
- hjkl ←↓↑→
- ctrl+b 向下翻页
- ctrl+f 向上翻页
- gg 跳转文件开头行
- GG 跳转文件末尾行
- w/b 按照单词左右移动
文本操作——增删查改
- yy/nyy 复制
- p(小写) 向光标所在行下方粘贴
- P(大写) 向光标所在行上方粘贴
- dd/ndd 剪切(也可以当作删除,vim中没有删除)
- x 删除光标所在字符
- dw 删除单词
- u 撤销
其他操作
- Crtl+r 撤销的反向操作
- gg = G 全文缩进对齐
底行模式下的操作
- :q 退出
- :wq 保存并退出
- :q! 强制退出不保存
gcc/g++——编译器
gcc是C语言的编译器,g++是C++的编译器。
编译型语言——C/C++——程序编译之后才可以执行——运行性能高,编码较慢
解释型语言——Python/lua/shell——编写完直接执行,且是逐行解释——编码较快,运行性能较低
1.编译过程
将用户所写的高级语言代码(C/C++)解释称为机器可识别指令。
预处理:展开所有代码(引入头文件,宏替换,删除注释) gcc -E
编译:语义语法纠错,若没有错误,则将高级语言解释称为汇编语言 gcc -S
汇编:将汇编语言解释为机器指令 gcc -c
链接:将所有文件代码以及库文件中代码打包成为可执行程序
2.编译器常见选项
-E 只进行预处理 -o 指定要生成的文件名称
-S 只进行编译 -c 只进行汇编
3.链接
静态链接:链接生成可执行程序时,直接将库中的代码拷贝一份到可执行程序中。
1.可以不依赖文件的存在,库文件被删除时依然可以运行;
2.若库文件被大量的程序使用,则会造成大量的内存中代码冗余;
动态链接:链接生成可执行程序时,并不拷贝代码,只是在可执行程序中记录函数的位置附号信息。等到运行的时候将库加载到内存中,并且多个程序可以共同享用。
1.节省资源,内存*用一份,不会在内存中造成代码冗余
2.程序运行时,库文件必须存在
静态链接链接的是静态库(.a),动态链接链接的是动态库(.so)。
gdb——调试器
调试前提:使用gcc生成debug版可执行程序,需要加上-g选项(gcc 默认生成release版程序,程序中没有调试符号信息)
gcc -g test.c -o test
gdb 调试通过命令完成整个程序的调试过程
加载程序:
- gdb ./main 加载程序调试
- gdb -p pross_id 直接对一个正在运行中的程序进行调试
开始调试:
- start 开始逐步调试
- run 直接运行
流程控制:
- list/l 默认查看调试行附近代码,也可以指定行 list filename:linenumber
- next/n 下一步(不跟踪进入函数,逐过程)
- step 下一步(跟踪进入函数,逐语句)
- continue/c 从当前位置开始直接运行程序
- until 直接运行到指定行停下,until filename:linenumber
- disa 查看汇编代码
断点调试:
- break filename:linenumber 给文件打断点
- break funcname 给函数打断点
- info break 查看断点信息
- delete/d 删除断点
- watch variable_name 变量监控
- print/p variable_name 打印变量内容及详细信息
- print var = x 设置变量值为x
其他调试:
- backtrace/bt 查看函数调用栈,可以快速定位程序崩溃位置(栈顶函数)
项目管理工具:项目构建工具/项目的版本管理工具
make/Makefile——项目自动化构建工具
具体指自动地将某个项目构架成功
Makefile:是一个普通的文本文件,又有一点不普通,这个文件中记录的是一个项目的所有构建规则。
make:是一个解释程序,在执行make命令的时候,会到当前目录下寻找MaKefile文件,然后,对MaKefile中记录的构建规则进行逐行解释执行,最终完成整个项目的构建
目标对象:要生成的可执行程序的名称
依赖对象:是生成目标对象所需要的源码文件
Makefile编写规则
目标对象:依赖对象
[\t](tab键,不能是空格)为了生成目标对象所执行的命令语句
make中的预定义变量——通常在执行指令中使用
$^:表示所有依赖对象
$<:表示所有依赖对象中的第一个依赖对象
[email protected]: 表示目标对象
//src=$(wildcard ./*.c)获取当前目录下所有以.c结尾的文件名放到src变量中
Make解释执行规则
1.一旦在命令行执行make,则运行make解释程序,在当前目录下寻找Makefile文件
2.make的执行规则中,要生成目标对象,首先要先保证依赖对象已经生成,则会递归向下向下寻找依赖对象的生成规则
3.打开文件,找到第一个目标对象,与依赖对象进行时间关系判断,判断目标对象是否需要重新生成(只生成第一个目标对象就会退出)
4.若需要生成,则执行指令;(指令不一定非是生成目标对象的指令)
main:main.o child.o 1.依赖两个.o生成main
gcc $^ -o [email protected] 2.两个.o都不存在
main.o:main.c 3.在下方继续找依赖对象(.o文件)的生成规则
gcc -c $^ -o [email protected] 4.先生成依赖对象,然后最终再来生成目标对象
child.o:child.c
gcc -c $^ -o [email protected]
伪对象:.PHONY:target_name 声明伪对象,不管这个目标对象是否存在,每次都要重新生成。
GIT——项目版本管理工具
(李纳斯开发的)具体是指可以实现项目的回滚(每一次的修改都有对应的版本号),合并等管理操作
git的三板斧
- 从服务器上克隆一个项目到本地:git clone https://
- 本地的版本提交:① git add ./* ② git commit -m "本次提交的备注信息"
- 远程服务器的提交:git push orgin master
上一篇: Java 逻辑控制详解分析