1.vim编辑器
1.
新增:
a 从光标后面开始添加文本
A 从光标所在行的末尾开始添加文本
插入:
i 从光标前面开始插入文本
I 从光标所在行的开始处插入文本
删除与修改:
x 删除光标处的字符
dd 删除光标所在的整行
3dd 删除光标所在行以及下面的两行
D 删除光标到行尾的文本, 常用语删除注释语句 (d$)
光标移动:
^ 光标移动到行首
$ 光标移动到行尾
Ctrl+d 向下翻半页
Ctrl+f 向下翻一页
Ctrl+u 向上翻半页
Ctrl+b 向上翻一页
gg 光标定位到文档头
G 光标定位到文档尾
H 光标定位到当前页首
L 光标定位到当前页的最后一行的行首
w 光标往后移一个字
b 光标往前移一个字
[n]+ 光标向后移动 n 行,[n]表示一个整数 10+
[n]- 光标向前移动 n 行,[n]表示一个整数 10-
[n]G 光标定位到第 n 行行首, [n]表示一个整数 20G(:100--定位到第100行)
查找与替换:
/[str] 查找字符串 str, [str]表示要查找的字符串
回车后会加亮显示所有找到的字符串, 接着
命令 n 移动到下一个找到的字符串, 命令 N 移动到
上一个找到的字符串 eg /hello
光标在行首
1ctrl+v--进入可视化
2选中行数
3按L
4按空格
5按esc
竖着选中一列或几列
2.gcc编译
1.gcc 编译过程: 预编译 编译 汇编 链接
预处理 -E -o gcc –E test.c -o test.i
编译 -S -o gcc -S test.i –o test.s
汇编 as -o as test.s -o test.o
链接 gcc –o test test.o
3.函数库分为静态库和动态库
静态库 .a (静态库会直接拷贝到执行的二进制文件中)
gcc -c add.c
ar crsv libadd.a add.o
gcc -o main main.c -ladd
动态库 .so (程序运行时才会载入)--(共享库)
-fPIC 生成使用相对地址的位置无关的目标代码
gcc -c add.c
gcc -shared -o libadd.so add.o
注册动态库的路径
sudo cp lib*.so /usr/lib
gcc -o main main.c -ladd
gcc -Wall //列出所有的警告信息
gcc -Werror //把所有的警告信息转化为错误信息
调试的时候不要使用优化选项
4.程序调试gdb
gcc -o main main.c -g
gdb main //进入调试
l //显示代码
b 4 //在第四行设置断点
r //运行
s //进入函数执行
n //一步一步执行
finish //跳出函数
c //运行到最后
p //打印变量
q //退出
info b //查看所设置的断点
tb 4 //在第四行设置临时断点,到达后自动删除
disable //停止指定的断点
enable //激活指定的断点
命令 x 是用来检查内存情况,英文是 examine 含义
使用方法
x /20xb 变量首地址,其中20x代表16 进制的长度,b 代表字节的含义
段错误:
ulimit -c unlimited 设置 core file size 为不限制大小
设置完毕后,可以通过
ulimit -a 进行查看是否设置 ok,
这时候再次运行程序,会产生 core 文件,通过 gdb 可执行程序 core 文件进行调试
5.make工程管理器
1 main:main.o add.o
2 gcc -o main main.o add.o
变量、函数与规则
//多个.c文件时使用SOURCES
SOURCES:=$(wildcard *.c)
OBJS:=$(patsubst %.c,%.o,$(SOURCES))
ELF:=main
CC:=gcc
CFLAGS:=-g
$(ELF):$(OBJS)
gcc $^ -o $@ //自动变量:指在使用的时候,自动用特定的值替换
.PHONY:clean //表示它后面列表中的目标均为伪目标(清理文件)
clean:
rm -rf $(OBJS) $(ELF)
#make //直接 make,即从默认文件名( Makefile) 的第一行开始执行
#make clean //表示执行 clean: 开始的命令段
$@ 当前规则的目标文件
$^ 当前规则的所有依赖文件, 以空格分隔
普通规则, 隐含规则, 模式规则
1.
新增:
a 从光标后面开始添加文本
A 从光标所在行的末尾开始添加文本
插入:
i 从光标前面开始插入文本
I 从光标所在行的开始处插入文本
删除与修改:
x 删除光标处的字符
dd 删除光标所在的整行
3dd 删除光标所在行以及下面的两行
D 删除光标到行尾的文本, 常用语删除注释语句 (d$)
光标移动:
^ 光标移动到行首
$ 光标移动到行尾
Ctrl+d 向下翻半页
Ctrl+f 向下翻一页
Ctrl+u 向上翻半页
Ctrl+b 向上翻一页
gg 光标定位到文档头
G 光标定位到文档尾
H 光标定位到当前页首
L 光标定位到当前页的最后一行的行首
w 光标往后移一个字
b 光标往前移一个字
[n]+ 光标向后移动 n 行,[n]表示一个整数 10+
[n]- 光标向前移动 n 行,[n]表示一个整数 10-
[n]G 光标定位到第 n 行行首, [n]表示一个整数 20G(:100--定位到第100行)
查找与替换:
/[str] 查找字符串 str, [str]表示要查找的字符串
回车后会加亮显示所有找到的字符串, 接着
命令 n 移动到下一个找到的字符串, 命令 N 移动到
上一个找到的字符串 eg /hello
光标在行首
1ctrl+v--进入可视化
2选中行数
3按L
4按空格
5按esc
竖着选中一列或几列
2.gcc编译
1.gcc 编译过程: 预编译 编译 汇编 链接
预处理 -E -o gcc –E test.c -o test.i
编译 -S -o gcc -S test.i –o test.s
汇编 as -o as test.s -o test.o
链接 gcc –o test test.o
3.函数库分为静态库和动态库
静态库 .a (静态库会直接拷贝到执行的二进制文件中)
gcc -c add.c
ar crsv libadd.a add.o
gcc -o main main.c -ladd
动态库 .so (程序运行时才会载入)--(共享库)
-fPIC 生成使用相对地址的位置无关的目标代码
gcc -c add.c
gcc -shared -o libadd.so add.o
注册动态库的路径
sudo cp lib*.so /usr/lib
gcc -o main main.c -ladd
gcc -Wall //列出所有的警告信息
gcc -Werror //把所有的警告信息转化为错误信息
调试的时候不要使用优化选项
4.程序调试gdb
gcc -o main main.c -g
gdb main //进入调试
l //显示代码
b 4 //在第四行设置断点
r //运行
s //进入函数执行
n //一步一步执行
finish //跳出函数
c //运行到最后
p //打印变量
q //退出
info b //查看所设置的断点
tb 4 //在第四行设置临时断点,到达后自动删除
disable //停止指定的断点
enable //激活指定的断点
命令 x 是用来检查内存情况,英文是 examine 含义
使用方法
x /20xb 变量首地址,其中20x代表16 进制的长度,b 代表字节的含义
段错误:
ulimit -c unlimited 设置 core file size 为不限制大小
设置完毕后,可以通过
ulimit -a 进行查看是否设置 ok,
这时候再次运行程序,会产生 core 文件,通过 gdb 可执行程序 core 文件进行调试
5.make工程管理器
1 main:main.o add.o
2 gcc -o main main.o add.o
变量、函数与规则
//多个.c文件时使用SOURCES
SOURCES:=$(wildcard *.c)
OBJS:=$(patsubst %.c,%.o,$(SOURCES))
ELF:=main
CC:=gcc
CFLAGS:=-g
$(ELF):$(OBJS)
gcc $^ -o $@ //自动变量:指在使用的时候,自动用特定的值替换
.PHONY:clean //表示它后面列表中的目标均为伪目标(清理文件)
clean:
rm -rf $(OBJS) $(ELF)
#make //直接 make,即从默认文件名( Makefile) 的第一行开始执行
#make clean //表示执行 clean: 开始的命令段
$@ 当前规则的目标文件
$^ 当前规则的所有依赖文件, 以空格分隔
普通规则, 隐含规则, 模式规则
隐含规则: //*.o 文件自动依赖*.c 或*.cc 文件, 所以可以省略