目录
---工具功能
1. vim
1.1 vim的模式
1.2 vim常见指令
2. gcc/g++
2.1 预备知识
2.2 gcc的使用
3.make,Makefile
make.Makefile的使用
4.yum
--yum三板斧
5.git
--git三板斧
--Linux下提交代码到远程仓库
6.gdb
6.1 gdb的常用指令
学习目标:
1.知道这些工具的功能
2.掌握这些工具的基本使用
---工具功能
编写代码 -- vim
编译代码 -- gcc ,g++
调试代码 -- gdb
代码管理 -- git
运行/自动化构建程序 --make/Makefile
1. vim
1.1 vim的模式
1.命令行模式 2.编辑模式 3.低行模式
1.2 vim常见指令
--默认打开
1.命令模式(默认打开的模式)
--输出 i 即可写代码 (编辑/插入模式)
--回到命令模式:按Esc
--退出:在命令模式当中输出shift + :
-w 保存 -q 退出 -wq 保存并退出 -!强制
--命令行模式指令
--编辑
- yy:将当前光标所在的行,复制 nyy(n表示具体的数字)
- p:将复制行进行粘贴 np
- dd:将当前光标所在的行,剪切(删除) ndd(删除/剪切n行)
- u:撤销历史操作
- ctrl + r :撤销u操作
- shift + ~ :大小写切换
- shift + r:替换(进入替换模式)
- r:替换光标所在的字符,支持nr
- x or X(shift + x):删除光标所在的字符,包括之前或者之后 支持nx
--光标移动
- gg:光标定位到文件的最开始
- shift + g :光标定位到文件的结尾
- n + shift + g :光标定位到文件的任意行
- shift + 6(^):光标定位到当前行的最开始(上)
- shift + 4 ($):光标定位到当前行的最结尾(下)
- w,b:以单词为单位进行光标的前后移动(左右)
- h左,j下,k上,l 右
--底行模式
- set nu/nonu :调出行号,或者取消行号
- vs 文件名 :分批操作
- w:写入,w!(强制)
- q:退出, q!(强制)
- ctrl + ww :光标跳转
- ! + cmd:不退出vim执行对应的指令(执行命令,编译,运行,查看man手册)
示例:
--set nu/nonu :调出行号,或者取消行号
set nu/nonu 显示/取消行号
--vs 文件名 :分批操作
vs + 文件名 分批操作
--ctrl + ww :光标跳转
ctrl + ww //光标跳转
-- ! + cmd:不退出vim执行对应的指令
! man 3 printf
2. gcc/g++
2.1 预备知识
gcc是一个专门编译链接C语言的编译器 g++(C++)
一、程序翻译过程:
文本的C -->计算机二进制
- 1.预处理:(a.去注释 b.宏替换 c.头文件展开 d.条件编译)
- 2.编译(C ->汇编)
- 3.汇编(汇编 -> 可重定向二进制目标文件)
- 4.链接(链接 -> 多个.o ,.. ,.obj ->合并成一个可执行).exe
(gcc/g++ 也要遵守)
二、动静态库 --- (感性的认识)
- 动态链接:将库中我要的方法地址,填入到我们的可执行程序中,建立关联(节省资源)
- 静态链接:将库中方法的实现,拷贝到我们的可执行程序中
一般链接的过程,两种方式:
a.动态链接 - 需要动态库
b.静态链接 - 需要静态库
Linux: .so(动态库) .a(静态库)
windows: .dll(动态库) .lib(静态库)
注:gcc和g++默认形成的可执行程序是动态链接的
2.2 gcc的使用
gcc 文件名 -o 新生成的文件名
其它选项:
- gcc -E mytest.c -o mytest.i (预处理)开始翻译直到预处理完成
- gcc -S mytest.i -o mytest.s (编译)开始翻译直到编译完成
- gcc -c mytest.s -o mytest.o (汇编)开始翻译直到汇编完成
- gcc mytest.o -o mytest.o (链接) (mytest.o 可重定向目标文件)
示例:
gcc test2.c -o test2
3.make,Makefile
make.Makefile的使用
1.make && makefile
make是一个命令
makefile是一个文件
--使用
touch Makefile 建立Makefile文件
vim Makefile 编写Makefile(a.依赖关系 b.依赖方法)
mytest:test.c (依赖关系) gcc test.c -o mytest (依赖方法) .PHONY:clean(伪目标) clean: rm -f mytest
调用:
make (构建) make clean (清理)
makefile指令是从上到下扫描的
注:clean 总是被执行的:总是会根据依赖放关系,执行依赖方法
--在上面的例子里,可以重复执行clean,但不能重复执行mytest(没被.PHONY修饰)
--你在Makefile中定义一个目标,与当前目录中存在同名的文件时,Make会默认认为这个目标是一个文件,并尝试根据文件的时间戳来判断是否需要重新构建。
提问:makefile是如何知道我的文件是最新的?
--根据最新的修改时间
示例:
1.创建Makefile
touch Makefile
2.编写Makefile
vim Makefile
3.调用:根据写好的Makefile自动生成可执行文件,并进行清理:
make //构建
make clean //清理
--可以重复执行make clean(其被.PHONY修饰)
通过使用
.PHONY
,告诉Make,这个目标是伪目标,不要期望生成一个同名文件,只需执行其中定义的命令。
4.yum
--yum三板斧
1.yum list 列出能下的软件
--yum list | grep sl (将所有包含sl文件的名称显示出来)
2.yum install
-- sudo yum install -y 安装软件(-y表示默认认可,不需要再问用户)
3. yum. remove 你的软件 移除软件(一般要加sudo)
5.git
--说明
git用于管理代码,git的精华:多人协作开发,(学习阶段,大多数自己写代码,暂不涉及)
下面说明怎么使用git提交代码到自己的远程仓库
--git三板斧
正常情况:
- git add 你的文件 #添加我们的代码到本地仓库
- git commit -m "这里必须写提交日志"
- git push
其它情况:
- 1.git log #查看提交记录
- 2.git pull #同步仓库
- 3.git rm 文件 #删除本地仓库的文件
删除本地仓库文件后,再git commit -m " 日志" git push
远程仓库里的文件会被删除
--.gitignore # 不想提交某些后缀的文件同步到远端的git仓库,就可以添加到.gitignore
修改本地仓库文件后,再add,commit,push就能将远程仓库的文件修改
--若出现提交失败,可能是仓库未同步,git pull再提交
--Linux下提交代码到远程仓库
配置环境:
第一次提交需要输入下面的指令:
git config --global user.email "you@example.com" git config --global user.name "Your Name"
这两个自行输入即可(这个是用来说明你是谁的,git支持多人协作,查看日志的时候可以看到是谁提交的代码)
在克隆仓库/提交代码的时候,应该会让你输入你gitee的账号名和密码(根据它的提升输入即可)
1.在Linux环境下输入:git clone 仓库网址
这里可以看到就把仓库克隆过来了
git仓库就是.git 文件
2.使用三板斧提交写好的文件就行:
git add test.c git commit -m "提交测试" git push
这里push后要求输入gitee的用户名和密码
然后就把写好的文件提交到远程仓库了
6.gdb
6.1 gdb的常用指令
gdb 文件名 (调试)
- l 0 --从第0行开始显示代码
- r --开始调试,如果没有设置断点,就直接运行结束
- b 行数 --打断点 (会形成断点编号,可用info查看)
- info b --查看断点
- d 断点编号 --删断点
- disable 断点编号 --使能(打开)
- enable 断点编号 -- 关闭
- p 变量名 --打印变量内容:
- n --逐过程 (相当于vs中的F10)
- s --进入函数(相当于vs中的F11)
- bt --查看当前调用的堆栈
- finish --函数跑完就停下
- display 名称 --设置常显示
- undisplay 编号 --取消常显示
- until 行数 (不建议) --跳到指定行数
- c --运行到下一个断点出就停下来
- quit --退出
补充:
--gdb会记录最近一条命令,如果命令无变化,可以直接回车
修改特定变量:set var 变量 = 数值(vs中监视窗口,可以给变量赋值查看)
示例:
因为gcc,g++默认形成的可执行程序式release的,所以无法直接调试
解决:使用gcc编译的时候,添加-g 选项,将其改为debug方式发布
我写了一个打印1-100的和的文件,现在对其调试
先编译,生成debug版本的运行文件
gcc test.c -o test -g //生成Debug版 gdb test
-- l 0 (从第0行开始显示代码)
--打断点: b 行数
--查看断点 info b
--删断点 d 断点编号
--打印变量内容: p 变量名
--逐过程 n (相当于vs中的F10)
--进入函数 s (相当于vs中的F11)
--查看当前调用的堆栈 bt
--函数跑完就停下 finish
--设置常显示 display 名称
--取消常显示 undisplay 编号
--运行到下一个断点出就停下来 c
这里我打了两个断点:(17,19行)
使用c后直接跳转到下一个断点19
补充:
gcc和g++默认形成的可执行程序是动态链接的
gcc,g++默认形成的可执行程序式release的,所以无法直接调试