程序编程常用工具
树图思维导图提供 程序编程常用工具 在线思维导图免费制作,点击“编辑”按钮,可对 程序编程常用工具 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:82f38650438710aeb7543875e632c5de
常用工具思维导图模板大纲
vim安装
安装包方式安装
dpkg -i rpm
apt-get
apt install vim
vi、vim(vi的升级)
基本使用
打开操作
vim filename
直接打开文件
vim +行号 filename
命令模式
打开文件默认进入命令模式
命令
文本删除操作
d0
删除从光标前一个字符到行首内容
D或d$
从光标到行尾
(n)x
删除光标处的字符(n代表向右要删除的字符数)
(n)X
删除光标前的字符(n代表光标前字符向左要删除的字符数)
(n)dd
删除光标所在行(n代表要删除的行数)
(n)dw
删除一个单词(n代表要删除的单词数)
n代表操作的个数
文本复制操作
(n)yy
复制光标所在行(n代表当前及后n-1行)
Y
复制光标所在行
(n)yw
复制一个单词(n表示复制指定的n个单词)
文本粘贴指令
p
粘贴当前缓冲区内容
撤销指令
u
返撤销
Ctrl r
屏幕滚动
Ctrl + u
将屏幕向前翻滚半屏幕
Ctrl + d
将屏幕向后翻滚半屏幕
Ctrl + f
将屏幕向后翻滚一屏幕
Ctrl + b
将屏幕向前翻滚一屏幕
指针行跳变
n+enter 下移动n行
0 本行开头 $行位
nG:光标移动倒n行
gg G:跳 开始、结尾
插入模式
插入文本命令
i
将文本插入到光标所在位置
I
将文本插入到当前行首
追加文本命令
a
将文本加到光标所在位置之后
A
将文本追加到所在行尾
空行插入命令
o
在光标所在行下面添加空行
O
在光标所在行上面添加空行
按esc进入命令行模式
底行模式
底行操作
命令模式下按冒号进入
退出指令
q!
强制退出
w
w filename
w!
w! filename
wq
先保存在退出
shift+zz
命令行模式
Ubuntu下均为强制保存
搜索字符串
/字符串
从光标开始向后搜索
n:往下找
N:往上找
?字符串
从光标开始向前搜索
字符串替换
%s /源字符串/目标字符串/g
[rang] s/str1/str2/g
rang 检索范围
可视模式
命令模式下v进入可视模式
d:删除 y:复制 x:剪切
vim的配置
配置文件 /root/.vimrc
/etc/.vimrc
gcc编译器
程序编译过程
编译预处理 gcc –E xxx.c –o xxx.i
处理伪指令(#)和特殊的特殊符号
伪指令包括:1)宏定义指令; 2)条件编译指令; 3)头文件包含指令;
编译 gcc -S xxx.i -o xxx.s
把预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后生成相应的汇编代码文件
汇编 as xxx.s -o xxx.o
汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句对应一条机器指令
链接 gcc xxx.o -o xxx
头文件只是函数声明,实现封装在库文件中,链接就是找到指定路径下的库文件
常用编译选项
1、没有任何选项:gcc helloworld.c
结果会在与helloworld.c相同的目录下产生一个a.out的可执行文件。
2、-o选项,指定输出文件名:gcc -o helloworld helloworld.c
-o意思是Output即需要指定输出的可执行文件的名称。这里的名称为helloworld。
3、-c选项,只编译,不链接:gcc -c helloworld.c
-c意思就是Compile,产生一个叫helloworld.o的目标文件
4、-S选项,使用预处理C源文件产生的文件,产生汇编源文件:gcc -S helloworld.c
-S意思就是aSsemble,产生一个叫helloworld.s的汇编源文件
5、-E选项,预处理C源文件:gcc -E helloworld.c
-E意思就是prEprocess。输出不是送到一个文件而是标准输出。当然可以对它进行重定向:
gcc -E helloworld.c > helloworld.txt
6、 -g选项,产生供gdb调试用的可执行文件:gcc -g helloworld.c
产生一个叫作a.out的可执行文件,大小明显比只用-o选项编译汇编连接后的文件大。
库
概念
包含了通用函数的数据和二进制可执行机器码的文件
分类
静态库
.a
动态库
.so
优点
移植性
封装性
保护源码
库的制作
静态库的创建
准备功能函数的源文件 main.c xxx.c yyy.c zzz.h
只编译不连接,生成目标文件
gcc -c xxx.c -o xxx.o gcc -c yyy.c -o yyy.o
打包生成静态库 ar rc libxxx.a xxx.o yyy.o
利用静态库编译程序 gcc main.c -lxxx -L./ -l:指明用到的库文件 -L:库文件所在的的路径
动态库的创建
准备功能函数的源文件 xxx.c yyy.c zzz.h
2、只编译不连接,生成目标文件
gcc -c xxx.c -o xxx.o gcc -c yyy.c -o yyy.o
打包生成动态库
gcc -fpic -shared xxx.o yyy.o -o libxxx.so
作业
查一下-fpic -share的作用
利用动态库编译程序
编译应用程序 gcc main.c -lxxx -L./ -l:指明用到的库文件 -L:库文件所在的的路径
或者: 把库库文件放入/usr/lib/ 把头文件放入/usr/include/ gcc main.c -lxxx
./a.out //运行程序 记得动态库拷贝到 lib或者usr/lib
区别
静态库直接将库文件编译到可执行程序里面
动态库:动态去lib usr/lib 下去寻找 需要的库文件加载
ldd a.out:查询a.out程序运行需要的库文件
为何需要gdb
根据IEEE研究,每个重要软件最初都有缺陷,一般来说没100行有2个左右
常用调试技巧
测试
找出程序中存在的缺陷或错误
固化
让程序的错误可重现
定位
确定相关的代码行
纠正
修改代码纠正错误
验证
确定修改解决了问题
gdb调试工具
GNU自由软件
编译程序,加入调试信息
gcc -g -o xxx xxx.c
启动gdb
详细的在线帮助
help
常用调试命令及方法
run
运行一个程序
r l<ine_num>
r<arg1,arg2,....>
list
l line
l<line1,line2>
breakpoint
许多命令可以设置断点, help breakpoint 会列出这些命令
b <function-name>
继续运行 cont
直到下一个断点
info breakpoints
查看所有的断点信息
delete
d breakpoint num
enable
enable breakpoint <num>
disable
disable breakpoint <num>
clear
clear <line_number>
p arg
next
n
step
s
quit
退出
start
启动调试
next step
finish
结束循环 结束函数
next遇到函数直接执行得到结果,step进入函数内部,一步一步执行
make
相当于脚本编程语言
本质是实现自动化编译
需要makefile或者Makefile文件支持
-f
指定依赖文件
makefile
作用
告诉make 应该如何去构造相应的应用程序
构成
一组依赖关系和规则
依赖关系
作用
定义最终应用程序中的每一个文件与源文件之间的关系
语法结构
make要创建的目标名称+冒号+空格或tab+用空格或tab隔开的文件列表
特殊目标名称:all(伪目标)
all后面列出所有从属目标
all: myapp myapp.1
规则
作用
定义了目标的创建方式
语法结构
tab+规则,如tab+gcc -c main.c
注意:开头的tab不能用空格或多个空格代替,行--不能以空格结尾
注释
以#开头
宏
make命令内置特殊宏
$@
目标文件
$^
所有的依赖文件
$<
第一个依赖的文件
伪目标 all
指定make的构建对象
Makefile
如果在文件夹内找不到makefile make会尝试去找Makefile文件
Makefile
规则
目标
依赖
目标:依赖 指令
指定makefile文件
make -f xxx
变量
定义
变量名=XXX
使用
$变量名
自由主题