Vim test.c +24 打开并定位到24行
命令模式
1、编辑模式
h 向左
j 向下
k 向上
l 向右
i 输入 insert
gg=G 可以首行缩进
yy 拷贝
p 粘贴
R 替换模式
r 替换当前位置,回到命令模式
dd 删除当前行
3dd 删除光标以下3行
u 撤销
:行号 转移到对应行
J 将下一行拼接到上一行末尾
$ 当前行的行尾
0或^ 当前行的行首
w 跳到下一个单词
b 跳到上一个单词
} 跳到下一个空行
{ 跳到上一个空行
在{或}上按%可以在两者之间跳跃切换
dw 从光标位置删除到当前单词尾部
db 从光标位置删除到当前单词首部
x 删除一个字符
K或3K 对于系统函数或库函数可以跳转到其帮助手册
v 可视化(jk操作后 x删除y复制)只能选中行
ctrl+v 块可视化(可以选择字符)
/ 查找(n下一个N上一个)
?单词 查找(N下一个n上一个)
2、末行模式(:)
:w 保存
:q 退出
:set nu 显示行号
:no nu 取消行号
:50,59s/旧内容/新内容/g 50-59行的所有旧内容替换成新内容(不要g则替换每行第一个出现的旧内容)
:%s/旧内容/新内容/g 全文替换
:vsp 文件名 垂直分屏
:sp 文件名 水平分屏
:q 退出
:r 将另外一个文件导入到光标所在位置
ctrl+ww 跳到另一屏
gcc –E(预处理)/-S(汇编)/-c(连接)/-v(显示编译过程) 文件名 -o(重命名)
gcc内部调用cc1编译器 as汇编器 collect2链接器
strip 可执行文件名 对代码进行瘦身
ldd 可执行文件 可查看程序用了哪些动态库
gdb调试器(gcc 文件名 –o 执行文件名 -g)
list(l) 行号 显示源代码
break(b) 行号/函数名 加断点
info break(i b) 查看断点信息
run(r) 执行
next(n) 单步执行,不进入函数
print(p) 打印变量
whatis 变量名 查看变量类型
delete(d) 断点编号 删除断点
b 17 if i==9 在条件等于9的时候设置断点
step(s) 进入函数调用
finish 退出函数
breaktrace(bt) 查看函数调用栈
处理段错误——会生成一个core文件,里面会显示在第几行出现错误:
- gcc –g
- ulimit -c unlimited
- ./a.out
- gdb ./a.out core.****
makefile
目标:依赖文件
Tab命令
第二种方式
$^ 代表所有的依赖文件 $@ 代表目标文件
第三种方式
%.o:%.c
gcc –c $^ -o $@
可以在makefile里写clean功能,使用make clean
.PHONY:clean 使clean保持最新
OBJS=main.o \
plane.o
clean:
rm –rf $(OBJS) 这里的objs是前面定义变量
1、在scanf中”%*c”是读取并丢弃掉该字符,用于读取丢弃换行符
或”(空格)%c” 这个操作可以忽略字符之前的空白符
或“%[^;%*c]” 这个操作可以设置想读取的字符,属于输入格式化(不获取分号,例如数据库)
2、内存缓冲区在以下5种情况时才会将缓冲区中内容输出
\n
scanf
exit
内核缓冲区满
fflush(stdout)
3、printf 输出到屏幕
fprintf 输出到文件
sprint 输出到数组
linux读elf文件
readelf –h(头)/-a(全部)
看elf文件的汇编代码
objdump -dS