文章目录
- Linux开发工具的使用(三)
- 1. 缓冲区
- 1.1 理解\r和\n
- 1.2 缓冲区的初步理解
- 1.3 倒计时小程序实现
- 1.4 进度条小程序实现
- 2. 分布式版本控制系统-git使用
- 2.1 git历史
- 2.2 git版本控制理解
- 2.3 git使用
- 2.3.1 gitee搭建远程仓库
- 2.3.2 开始配置
- 3. Linux调试器-gdb的使用
- 3.1 背景
- 3.2 使用指令
Linux开发工具的使用(三)
1. 缓冲区
基于vim/gcc/make/makefile实现,也是想相当于把前面知识点进行复习。
1.1 理解\r和\n
\r是回车(也就是光标跳转到所在行最开始的位置),\n是换行。
\n的现象:打印出hello world并且换行输出命令行[yinhan@VM-12-12-centos study8]$
\r的现象:只是输出命令行[yinhan@VM-12-12-centos study8]$
1.2 缓冲区的初步理解
现象:hello world直接打印出来,然后休眠三秒再打印出命令行[yinhan@VM-12-12-centos study8]$
现象:先是休眠三秒然后打印出hello world[yinhan@VM-12-12-centos study8]$
这样就貌似先指令了sleep后执行了printf,其实并不是程序都是从上到下进行的。那么这种现象是为什么呢?其实先运行的printf,这里的hello world其实并没有刷新,所以造成看到的现象是如此。那么既然没有被刷新,在sleep期间依然要被保存起来,这里就是保存在缓冲区中。为什么加上\n数据就被直接显示出来呢?缓冲区有自己的刷新策略,\n就是刷新缓冲区的作用。
fflush:在打开以更新的文件(即,打开以读和写)中,在执行输入操作之前,流应在输出操作之后刷新
现象:
其实执行printf的时候,最后扫描到\r的时候,光标自动跳转到所在行的最开始的位置,其实hello world数据并没有丢失,只是放在了缓冲区中,然后还要打印命令行提示符,这时就把hello world给覆盖了。
不带\r:
现象:
先执行printf,hello world写入到缓冲区,然后fflush刷新缓冲区,然后休眠三秒打印命令行提示符。
1.3 倒计时小程序实现
1.4 进度条小程序实现
demo:
为什么这里写的Makefile里面的myproc依赖列表没有写proc.h,程序也能运行呢?
程序运行时会在该路径下去找头文件,所以可以不用包含。
2. 分布式版本控制系统-git使用
2.1 git历史
网上很多视频或者历史介绍这里就不再介绍,有兴趣可以去查一查。git的由来
2.2 git版本控制理解
故事:假如说学校里你有个同学叫李四,你们班上要上交实验报告,然后你先等着李四先做,看看情况,李四花了两个小时写完了实验报告,然后用QQ上交给老师检查,老师一看排版、措辞等等都有问题,然后打回,李四再在原实验报告上再改了一次,上交给老师看,老师说你这个排版、语法啥的还是有点问题,问题不是很大,然后打回给李四,李四再在原报告上修改,改完后给老师看,老师看了之后说你这比上一次修改的还要差,老师说你把第二次的拿给我就行了,此时李四都是在原报告上改的,没有第二个版本,最终就上交了。此时,你注意到李四上交情况,然后你对每次老师打回的实验报告都拷贝存放了一份,最终你改了有四个版本的报告,老师让你上交第二次修改的,也就是第二个版本的,你这时直接拿着第二个版本就上交了,然后得到了高分。这里的我就做了版本控制,解决了找回历史版本的问题。程序员就相当于这里的我,然后产品经理就相当于老师,程序员给没个成熟阶段的软件打上标签就是做了版本控制的工作。
2.3 git使用
Linux上安装git:==yum install -y git(root用户)==或者sudo yum install -y git
2.3.1 gitee搭建远程仓库
网上有很多教程,这里不过多介绍。
2.3.2 开始配置
在你当前用户目录(也就是~目录)下或者其他你想要的目录下执行命令:git clone HTTPS网址
什么是本地仓库?.git就是本地仓库,里面的东西不要随便修改
git三板斧:git add/git commit/git push
注意
git commit后面所写的内容一定要有效记录你所做的事情
3. Linux调试器-gdb的使用
3.1 背景
程序的发布方式有两种,debug模式(调试版本)和release模式(发布版本)。==Linux gcc/g++出来的二进制程序,默认是release模式。==要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项。公司中测试程序员的就是release模式,来进行测试。
观察到少了-g选项,就没有找到调试标志,所以编译时要添加-g选项,就是以debug模式进行编译程序。
3.2 使用指令
进入调试模式:gdb 可执行程序文件名
l/list 行号:从该行号对应的行依次列出十行源代码
l/list 函数名:列出该函数的源代码
r/run:运行程序
break/b 行号:在改行设置断点
info break:查看断点信息
d/delete n:删除序号为n的断点
d/delete:删除所有断点
disable breakpoint n:禁用序号为n的断点
enable breakpoint n:启用序号为n的断点
s/step:逐语句(进入函数)
n/next:逐过程(不进入函数)
breaktrace/bt:查看各级函数调用及参数
p 变量名:打印变量值
set var 表达式(比如:i = 100):修改变量的值
display 变量名:跟踪查看一个变量,每次停下来都显示它的值(长显示)
undisplay 序号:取消序号对应的变量的跟踪
until 行号:跳转到对应的行号所在行,执行完区间代码
finish:进入一个函数执行完该函数就停下来
continue/c:从一个断点处直接运行至下一个断点处
quit:退出gdb调试器
所有查看内容的指令并不会影响调试的指令