vim
- vim 就是一款编辑器,只负责写代码
- vim是一款多模式的编辑器
- 命令模式(默认)
- 可以进行很多编辑操作
- 光标定位 n+shift+g
- shift+g定位文本结尾
- gg定位文本开始
- w ,b前进,后退
- h ,j,k,l:左下上右
- yy+p光标所在行进行复制粘贴,默认粘贴到下一行。
- x 删除光标位置的字符
- n + dd剪切,删除(批量化)
- shift+~:大小写改变
- vsp+文件名
- ctrl+w+o关闭一个分屏
- 多屏幕 ctrl+ww:实现两个光标的切换
- 插入模式
- 低行模式
- wq保存退出
- vs文件新建或打开
- !gcc test.c :不退出编译程序
- gcc就是一款编译器,只负责程序的翻译
- gdb就是一款调试器,只负责程序的调试
c语言到执行的编译过程
-
程序的翻译过程
- 预编译
- 头文件展开,去注释,宏替换,条件编译
- gcc-E main.c -o main.i
- 做完预编译停下来,并且保存在main.i中
- 预处理阶段还是c语言
- 预处理阶段,宏替换
- 预处理阶段,去注释
- 预处理阶段,把你所依赖的所有头文件,给展开,把头文件包含的内容拷贝进源文件来
- 编译
- gcc -S main.i -o main.s
- 走完编译就停下来,临时文件写入main.s
- 把C语言编译成汇编语言
- 汇编
- gcc -c main.s -o main.o
- 一般的.o文件叫做目标文件
- 走完汇编停下在,把汇编语言,翻译成目标二进制,不可以执行
- 只是相当于把我自己写的代码编译成二进制,但是里面用的函数不是自己写的例如:printf();所以需要链接。
- 链接
- 本质引入我们在代码中使用的第三方库,c库
- gcc会根据文件,进行默认链接,c库等
- 预编译
-
ESc 无脑 -o
-
iso #centos.xxx.iso,镜像文件
Linux项目自动化构建工具 make/makefile
- make:它是一条命令
- makefile:一个文件
linux 调试器-gdb使用
1.背景
-
程序的发布方式有两种,debug模式和release模式
-
linux gcc/g++出来的二进制程序,默认是release模式发布的,不可以被调试的。
- 开发模式:debug,是包含调试信息
- release:一般软件进行发布,并交付给用户的模式
- debug生成的程序,体积上一定是大于release
-
要使用gdb调试,必须在源代码生成二进制程序的时候加上 -g选项【重要】
-
gdb main 进入gdb直接调试
-
修改gcc ,为debug 在gcc 最后添加 -g
调试,究竟在干什么??
- 发现问题(人)
- 定位问题(gdb)
- 找到问题所在行,或者区域
- 分析问题(gdb辅助)
- 解决问题(人)
- ... ...
- 进入gdb调试, list 查看调试代码
- 打断点 b + 行号
- 然后 run 起来,到断点处停止运行。(如果没有断点直接运行程序到结束)。
- 单步执行的命令 next 不关心函数细节,不会进入导函数里面
- info b 查看断点的位置
- 删除断点 delete Num (删除所在编号)
- s:按照语句执行,进入函数
- display i :常显示 i ,也可以&i,next 向后执行
- undisplay 编号 :删除监视
- until 行号:如果陷入循环,可以指定跳往第几行
- finish:结束函数调用,然后停下。
- c :运行至下一个断点处。