热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux开发工具的使用(三)

文章目录Linux开发工具的使用(三)1.缓冲区1.1理解\r和\n1.2缓冲区的初步理解1.3倒计时小程序实现1.4进度条小程序实现2.分布式版本控制


文章目录


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




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








推荐阅读
  • MySQL5.6.40在CentOS764下安装过程 ... [详细]
  • CentOS7.8下编译muduo库找不到Boost库报错的解决方法
    本文介绍了在CentOS7.8下编译muduo库时出现找不到Boost库报错的问题,并提供了解决方法。文章详细介绍了从Github上下载muduo和muduo-tutorial源代码的步骤,并指导如何编译muduo库。最后,作者提供了陈硕老师的Github链接和muduo库的简介。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • centos6.8 下nginx1.10 安装 ... [详细]
  • 本文主要介绍关于linux文件描述符设置,centos7设置文件句柄数,centos7查看进程数的知识点,对【Linux之进程数和句柄数】和【linux句柄数含义】有兴趣的朋友可以看下由【东城绝神】投 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 本文介绍了在Linux系统中设置文件ACL权限的方法和使用说明,包括在centos7.3和centos6.9中开启ACL权限的两种方法:在挂载时指定打开ACL权限和修改默认的属性信息。同时提供了对ACL权限的详细解释和应用场景。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • 一、设置时区方法一:使用setup工具setup选择Timezoneconfiguration选择AsiaShanghai空格键勾选上System ... [详细]
  • 第三周读书笔记《程序员的自我修养》  计划对这本书是精读,这周读了3,4章。第三章目标文件里有什么  首先介绍了目标文件的格式,Windows下是pe-coff, ... [详细]
author-avatar
穿越时空lily
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有