Linxu的开发工具(三):缓冲区、进度条程序和调试器gdb

news2024/11/25 20:42:48

目录

缓冲区

倒计时程序

对出现swp文件报错的补充:

进度条程序

将tab键设置为四个空格

调试器-gdb 

对比测试

实际应用


缓冲区

 前言:\n会产生换行和回车两个动作:

  • 回车:回到下一行行首
  • 换行:移动到当前所在位置的下一行的对应位置

只想回车用\r,回车+换行用\r\n,\r和\n结合时\n只起换行作用

问题一:程序先执行printf后执行sleep,但是在执行完printf后并不会打印该字符串而是休眠3秒后才会在屏幕上打印字符串,那么sleep期间printf打印的字符串在哪里?

答:缓冲区,缓冲区是内存空间中的一块区域,在执行printf函数时,里面的字符串会被放入缓冲区中,这些存放在缓冲区中的数据在经历一次“刷新”后就可以在显示屏上显示了(程序结束时以及缓冲区满了时都会“刷新”缓冲区)

强制刷新的两种方式:

  1. 如果不想等到程序结束时“刷新”缓冲区,可以用\n,此时包含\n在内的缓冲区中的字符串都会被“刷新”显示在显示屏上(如果是hello bit \n hello world...,那么hello bit会直接显示在显示屏上,后面的hello world在经历三秒休息后才会显示)
  2. 在程序执行时,c语言提供了三个标准输入输出流extern FILE *stdin(标准输入流) / * stdout(标准输出流)/ *stderr(标准错误流)(显示器键盘等设备都被视为文件),所以可以利用强制“刷新”缓冲区指令fflush(stdout)将之前缓冲区中的内容直接输出(hello... fflush(stdout)后直接将字符串打印后等待三秒后文件结束) 

补充内容:查看当前用户下的进程指令是ps -u,杀死进程的指令是kill PID 

倒计时程序

原理:大量静态画面在高速运动中看起来就像是动态的

以下代码执行的结果是:什么都显示不出来,然后等待十秒程序结束

原因:%d\r在缓冲区写一个字符就将光标回到最左侧,一直覆盖

改良写法:

对出现swp文件报错的补充:

        kill进程仍显示同样的错误可以进入该目录下“/home/yyf/.local/share/nvim/swap/”,删除该路径下的文件,然后返回所有原目录就再次编写该文件而不报错:

进度条程序

基础版本:为添加实际应用场景

  • sleep的单位是:秒
  • usleep的单位是: 微秒
  • 1,000,000 微秒 = 1秒

进阶版本:下载文件时的下载进度

Processbar.h文件:

Processbar.c文件:


makefile文件:

 main.c文件:

最终效果:

将tab键设置为四个空格

指令:cd(进入主目录)+ vim .vimrc(进入vim的配置文件) 

操作:将文件中的2改为4

调试器-gdb 

基本概念:程序有两种发布方式:debug模式(调试)和release模式(发布前测试),Linux 编译出的程序,默认是release模式(不可被调试),要使用gdb进行调试,在gcc / g++后加-g

makefile文件:

myprocess.c文件:

对比测试

问题:debug模式下可以调试是因为编译器形成可执行程序时会给可执行程序添加调试信息吗?

解决问题需要的结果:debug后生成的可执行程序比release模式后生成的可执行程序多了些内容

结论1:release模式的8848<debug模式的9704,所以debug模式下的可执行程序增加了一些信息

结论2:这些新增的信息的确是调试信息

与调试相关的信息(如符号表等)会被存储在专门的节中,并且往往以 .debug 开头

结论3:故给用户的是release版本,否则debug版本用户不仅不能调试还会多一些没用的调试信息

实际应用

(精确位置)进入gdb指令:gdb debug版本下的可执行程序名

(精确位置)退出gdb指令:quit 或 q

(精确位置)查看指定文件的某个函数或某行:list / l 文件名:函数名/行号(l 行号/函数名 也可)

(精确位置)直接运行程序指令:r(类似于f5)

(精确位置)对指定文件打断点指令:b 文件名:函数名/行号(b 行号/函数名 也可)

(精确位置)显示断点信息指令:info b(i b也可)

(精确位置)删除断点指令:d 断点编号

(精确位置)打开或关闭断点指令:enable / disable 断点编号

(精确位置)逐过程调试指令前提要运行文件r)next / n(F10),

(精确位置)逐语句调试指令前提是要运行文件r)step / s(F11)

(精确位置)查看变量的内容和地址指令:p 变量名 / &变量名

(精确位置)常显示变量的内容和地址指令:display 变量名 / &变量名

(精确位置)删除常显示指令: undisplay 常显示编号

(范围定位)运行至下一个断点处指令(便于确定问题所在范围)continue / c

(范围定位)当前函数运行后就停下指令(查看问题是否是出在当前函数中)finish

(范围定位)跳转至指定行(之前的所有代码都以运行)指令:until 行号

查看当前栈帧局部变量的值指令:local 变量名

修改变量的值(检查判断条件为什么不执行)指令set var 变量 = 值

查看函数调用指令:bt

运用时结合vs中的调式可以加深理解

注意事项:

1、gdb默认记录上一次指令信息,即上一次要求打印文件首行(gdb默认打印十行)再次执行gdb(回车)可以继续打印下十行

2、gdb会显示指定部分的上下文

3、一次只能打一个断点,不能连续打多个

4、断点编号的本质是不断增长的计数器,删除断点编号为1的断点后新增断点的编号为2不为1

5、为空行打断点没效果

~over~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1565590.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《大模型面试宝典》(2024版) 正式发布!

2022 年11月底&#xff0c;OpenAI 正式推出 ChatGPT &#xff0c;不到两个月的时间&#xff0c;月活用户就突破1亿&#xff0c;成为史上增长最快的消费者应用。 目前国内已发布的大模型超过200个&#xff0c;大模型的出现彻底改变了我们的生活和学习方式。 只要你想从事 AI 相…

【论文阅读笔记】SAM-Adapter: Adapting Segment Anything in Underperformed Scenes

1.论文介绍 SAM-Adapter: Adapting Segment Anything in Underperformed Scenes SAM适配器&#xff1a;在表现不佳的场景中适配任何片段 2023年 ICCV Paper Code SAM Fails to Segment Anything? – SAM-Adapter: Adapting SAM in Underperformed Scenes: Camouflage, Shado…

HR是怎么看待PMP证书的呢?

考PMP证书为什么值得&#xff1f;对管理人员有用么&#xff1f; 首先&#xff0c;在行业内部&#xff0c;一名项目经理&#xff0c;需要有PMP证书已经是行业内的共识了。而且面试的时候&#xff0c;如果是同样的年龄段&#xff0c;同样的背景&#xff0c;那有证书在手的人&…

2013年认证杯SPSSPRO杯数学建模C题(第二阶段)公路运输业对于国内生产总值的影响分析全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 C题 公路运输业对于国内生产总值的影响分析 原题再现&#xff1a; 交通运输作为国民经济的载体&#xff0c;沟通生产和消费&#xff0c;在经济发展中扮演着极其重要的角色。纵观几百年来交通运输与经济发展的相互关系&#xff0c;生产水平越高…

九州金榜家庭教育:关注孩子心理健康,增强亲子沟通

家庭教育现在越来越受重视&#xff0c;尤其孩子心理健康&#xff0c;当下社会&#xff0c;孩子心理健康问题频出&#xff0c;很多地方不时传出孩子轻生的新闻&#xff0c;这就是在教育过程中&#xff0c;沟通出现了严重问题&#xff0c;随着心理变化产生&#xff0c;孩子这时候…

Python(乱学)

字典在转化为其他类型时&#xff0c;会出现是否舍弃value的操作&#xff0c;只有在转化为字符串的时候才不会舍弃value 注释的快捷键是ctrl/ 字符串无法与整数&#xff0c;浮点数&#xff0c;等用加号完成拼接 5不入&#xff1f;&#xff1f;&#xff1f; 还有一种格式化的方法…

AI绘画软件有什么用?

人工智能(AI)的应用已经渗透到我们生活的各个角落&#xff0c;其中就包括图像生成。AI绘画软件&#xff0c;是一种基于深度学习技术的创新工具&#xff0c;它能够根据指定的风格、主题或者素材自动创作出新的图片。那么&#xff0c;AI绘画软件具体有什么用呢? 首先&#xff0c…

笔记本电脑外放有声音,插耳机没声音

我的笔记本最近因为微信插耳机没声音&#xff0c;每次电话沟通需求&#xff0c;能把人折磨的要死&#xff0c;我实在不知道是哪个设置出现了问题&#xff0c;如果你也遇到了有的软件插耳机有声音&#xff0c;而换一个软件就没声音&#xff0c;那你可以试试我这个高端的方法 1、…

openGauss学习笔记-254 openGauss性能调优-使用Plan Hint进行调优-子链接块名的hint

文章目录 openGauss学习笔记-254 openGauss性能调优-使用Plan Hint进行调优-子链接块名的hint254.1 功能描述254.2 语法格式254.3 参数说明254.4 示例 openGauss学习笔记-254 openGauss性能调优-使用Plan Hint进行调优-子链接块名的hint 254.1 功能描述 指明子链接块的名称。…

MongoDB 6.1 及以上版本使用配置文件的方式启动报错 Unrecognized option: storage.journal.enabled

如果你使用的 MongoDB 的版本大于等于 6.1&#xff0c;并且在 MongoDB 的配置文件中编写了如下内容 storage:journal:# 启用或禁用持久性日志以确保数据文件保持有效和可恢复# true 启用&#xff1b;false 不启用# 64 位系统默认启用&#xff0c;启用后 MongoDB 可以在宕机后根…

JavaSE:抽象类和接口

目录 一、前言 二、抽象类 &#xff08;一&#xff09;抽象类概念 &#xff08;二&#xff09;使用抽象类的注意事项 &#xff08;三&#xff09;抽象类的作用 三、接口 &#xff08;一&#xff09;接口概念 &#xff08;二&#xff09;接口语法规则 &#xff08;三&a…

电商项目环境配置

电商项目 目录 目录 文件 工具资源网盘分享 链接&#xff1a; 1、项目概述 1.1基本概述 1.2后台管理系统 项目展示 1. 3开发模式 1.4技术选型 jwt&#xff1a;状态保持的工具 sequeize&#xff1a;掌握数据库的工具 2、项目初始化 2.1 步骤 安装 vue 脚手架通过 vue …

深入理解Java内存模型及其作用

目录 1.前言 2.为什么要有 Java 内存模型&#xff1f; 2.1 一致性问题 2.2 重排序问题 3.Java 内存模型的定义 4.规范内容 4.1 主内存和工作内存交互规范 4.2 什么是 happens-before 原则&#xff1f; 1.前言 当问到 Java 内存模型的时候&#xff0c;一定要注意&#…

算法沉淀——动态规划篇(子数组系列问题(上))

算法沉淀——动态规划篇&#xff08;子数组系列问题&#xff08;上&#xff09;&#xff09; 前言一、最大子数组和二、环形子数组的最大和三、乘积最大子数组四、乘积为正数的最长子数组长度 前言 几乎所有的动态规划问题大致可分为以下5个步骤&#xff0c;后续所有问题分析都…

机台数据传输共享存在哪些问题?机台数据管控怎么做?

一些金融机构、大型制造业以及晶圆制造厂里面&#xff0c;都会存在大量的机台设备&#xff0c;这些机台会产⽣庞⼤⽽属性不同的数据&#xff0c;这些数据需要定期的进行采集和利用。机台数据在传输分享过程中&#xff0c;会面临各种问题和调整&#xff0c;所以需要做好机台数据…

前端 - 基础 表单标签 - 表单元素 input - type 属性 ( 单选按钮和复选按钮 )

input 标签 type 属性 &#xff0c;上一篇讲了 输入框 和 密码框 这节看看 单选按钮 和 复选 按钮 目录 单选按钮 &#xff1a; 复选按钮 # 看上图就可以看到 单选按钮 -- radio 和 复选 按钮 -- checkbox 单选按钮 &#xff1a; 所谓单选按钮就是 有时…

设计灵活可扩展的文件系统适配器系统

介绍 文件系统适配器是一个用于抽象不同存储类型之间差异的接口&#xff0c;它提供了统一的方式来访问和操作文件系统中的数据。无论是本地文件系统、云存储还是其他类型的存储&#xff0c;文件系统适配器都能够提供一致的操作接口&#xff0c;使得应用程序可以更容易地与不同…

事件队列事件循环(EventLoop) 宏任务 微任务详解 面试题

事件队列 事件循环 EventLoop 宏任务 微任务详解 一、概念二、宏任务&#xff08;多个&#xff09;、微任务&#xff08;1个&#xff09;三、Promise 的构造函数四、process.nextTick在事件循环中的处理五、vue nextTick原理 一、概念 event: 事件 loop: 循环&#xff0c;循环…

使用Bitmaps位图实现Redis签到

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Redis提供了Bitmaps这个“数据类型”可以实现对位的操作: (1) Bitmaps…

整顿编剧市场:程序员提交测试流程的最佳实践

讲动人的故事,写懂人的代码 最近,一部去年推出的国产电视剧在IT圈子里引起了轰动。 引起关注的原因,并非剧中程序员的外形出众,而是她提交代码测试的方式——将写有代码的纸张放入文件夹,然后递给了对面的测试人员。如图1所示。 图1 程序员将写有代码的纸张放入文件夹,并…