Linux开发工具的使用(三)

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调试器

所有查看内容的指令并不会影响调试的指令

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脚踏车(crush)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值