【Linux】gdb / cgdb 调试 + 进度条
🌻个人主页:路飞雪吖~
🌠专栏:Linux
目录
一、Linux调试器-gdb
🌟开始使用
🌠小贴士:
🌟gdb指令
🌠小贴士:
✨watch 监视
✨打条件断点
二、小程序----进度条
🌠知识储备:
一、Linux调试器-gdb
🌟开始使用
🌠小贴士:
1、要用gdb来进行调试,前提条件是代码必须是debug发布的。
(debug:添加调试信息; release:取消调试信息)
2、gcc/g++ 编译程序时,默认它采用的发布模式是release。
3、要使我们的程序用debug来发布,需要我们在编译时加上 -g 。
语法: gdb [可执行程序]
退出: quit / ctrl+d
🌟gdb指令
🌠小贴士:
• gdb会记录最新的一条命令,直接回车就是默认执行该命令;
指令 | 功能 |
list / l 行号 | 显示可执行程序的源代码, 默认查看的代码行号处于展现代码的中间部分,共展现10行 |
list / l 函数名 | 列出某个函数的源代码 |
r或run | 运行程序(F5) |
break(b) 行号 | 在某一行设置断点 |
break 函数名 | 在某个函数开头设置断点 |
info break | 查看断点信息 |
d 断点编号 | 删除断点 |
disable breakpoints | 禁用断点 |
enable breakpoints | 启用断点 |
n 或 next (F10) | 代码从断点处,单条执行(逐过程),不进入函数内部 |
s或step (F11) | 进入函数调用 |
display [要查看的内容] | 常显示具体信息(循环中 i 的值,地址.....) |
undisplay [对应的编号] | 去掉显示的内容 |
p [变量] p [表达式] | 打印指定变量的值 |
until [次数] | 跳转到当前函数的内部的任意一行处 |
给指定文件打断点 ---> b [文件名]:行号/函数名
在我们一个调试周期下,断点的编号时递增的。
断点禁用:
断点被使用:
n 逐过程:不进入函数里面
进入函数内部后,查看详细的信息:
查看相关内容:
指定循环次数:
从上面就可以看出,gdb的调试,不方便查看代码,为此我们来介绍一个工具:
🌠小贴士:
在终端下/命令行中进行调试的工具
工具: cgdb 让代码进行可视化
安装: sudo yum install -y cgdb
使用: cgdb [可执行程序]
调试的本质----找到问题---> 解决bug
快速定位问题:
断点 + finish + until + continue : 对大的代码块进行区间debug
指令 | 功能 |
continue / c | 从一个断点,直接运行到下一个断点 |
finish | 把现在所处函数的代码跑完(以函数级别进行运行) |
info locals | 显示临时变量的信息 |
set var 变量=值 | 修改变量的值 (set var i = 10) 可以让我们在发现问题时,当场改变值来验证答案(预修订),再出去修正代码。 |
b 行号/文件名 if i==30 condition 2 i==30 | 打条件断点 1、新增 2、给已有断点追加 |
✨watch 监视
即专门针对某个变量的断点。
✨打条件断点
1、新增断点
2、给已有断点追加:
二、小程序----进度条
🌠知识储备:
<1> 回车和换行
回车(\r):本质是让光标回归到当前行的最开始。
换行(\n):直接从当前行跳转到下一行,光标在上一行对下来的位置
在平时我们都会以为这两个使用是一样的,其实不然,新起一行的本质:先回车,再换行
<2> 缓冲区
虽然程序是在两秒之后才打印出来“hello Linux!!!”,但是文件是先执行printf,再执行sleep,原因是什么呢?
在程序执行sleep 2秒期间,“hello Linux!!!”字符串在哪里?
它会保存在,由C语言提供的输出缓冲区中。
<3> 有趣的小程序
当 \n 换成 \r 会有什么效果?
如何输出内容?
强制缓冲区的内容输出
当我们倒计时从 10 开始时,就会出现一点问题,这是为什么呢?
我们思考一下,我们给显示器输出的是一个整数1234,还是打印了一个1 2 3 4 字符,让我们以为打印的是一个整数,我们需要知道的是,显示器是没有类型的概念的!!!显示器只认识一个一个的字符,类型只有语言上有,其实 “ printf("%d\n",a) ” 就是把整数1234,(格式化输出)转化为“1” “2” “3” “4” 依次显示出来。
所以为什么上面程序为什么会多出一个 “0” ,也就能理解了,以为从 10 开始我们输出的是 “1” “0” ,紧接着要输出 “9” 时,光标回车到了最开始,只覆盖住了 “1” ,“0” 一直都在,所以我们需要修改输出的格式 printf("%-2d\n",countt) ;
正片开始!! 进度条~
先创建所需的文件:(模拟实现进度条的效果)
//process.c#include "process.h"
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <string.h>#define NUM 101
#define STYLE '='// version 1
void Process(){const char *lable = "|/-\\";int len = strlen(lable);char bar[NUM];memset(bar,'\0',sizeof(bar));int cnt=0;while(cnt <= 100){ printf("[%-100s][%d%%][%c]\r",bar,cnt,lable[cnt%len]);fflush(stdout); bar[cnt] = STYLE;cnt++; if(cnt == NUM) { bar[cnt-1] = '\0'; break;}bar[cnt] = '>';//sleep(1);usleep(50000);}printf("\r\n");}
效果图:
加强进度条模拟下载(回调):
如若对你有帮助,记得关注、收藏、点赞哦!您的支持使我最大的动力🌹🌹🌹🌹!!!
若有误,望各位,在评论区留言或者私信我 指点迷津!!!谢谢^ ^ ~
相关文章:

【Linux】gdb / cgdb 调试 + 进度条
🌻个人主页:路飞雪吖~ 🌠专栏:Linux 目录 一、Linux调试器-gdb 🌟开始使用 🌠小贴士: 🌟gdb指令 🌠小贴士: ✨watch 监视 ✨打条件断点 二、小程序----进…...

Jenkins Nginx Vue项目自动化部署
目录 一、环境准备 1.1 Jenkins搭建 1.2 NVM和Nodejs安装 1.3 Nginx安装 二、Jenkins配置 2.1 相关插件安装 2.2 全局工具安装 2.3 环境变量配置 2.4 邮箱配置(构建后发送邮件) 2.5 任务配置 三、Nginx配置 3.1 配置路由转发 四、部署项目 …...

视频汇聚平台Liveweb国标GB28181视频平台监控中心设计
在现代安防视频监控领域,Liveweb视频汇聚平台以其卓越的兼容性和灵活的拓展能力,为用户提供了一套全面的解决方案。该平台不仅能够实现视频的远程监控、录像、存储与回放等基础功能,还涵盖了视频转码、视频快照、告警、云台控制、语音对讲以及…...

文件比较和文件流
文件比较和文件流 一、文本比较工具 diff1.基本用法1.1输出格式 2.常用选项 二、文件流1.文件的打开模式2.文件流的分类ifstreamofstreamfstrem区别 3.文件流的函数1. 构造函数2. is_open 用于判断文件是否打开3. open4. getline5. close6. get()7. read8. write9. put10. gcou…...

【2024最新】基于Springboot+Vue的就业信息管理系统Lw+PPT
作者:计算机搬砖家 开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:Java精选实战项…...

PySide6 QSS(Qt Style Sheets) Reference: PySide6 QSS参考指南
Qt官网参考资料: QSS介绍: Styling the Widgets Application - Qt for Pythonhttps://doc.qt.io/qtforpython-6/tutorials/basictutorial/widgetstyling.html#tutorial-widgetstyling QSS 参考手册: Qt Style Sheets Reference | Qt Widge…...
【笔记】成为雍正
观古代历史,不过帝王一家一姓之家史 时间 1662年,田文镜出生。1672年,张廷玉出生。1674年,胤礽出生。1678年,胤禛出生。1679年,年羹尧出生。1680年,鄂尔泰出生。1700年,索额图被赐死…...

Codeforces Round 913 (Div. 3)
题目链接 B. YetnotherrokenKeoard 题意 输入 输出 思路 用两个栈分别维护小写字母下标和大写字母下标,用一个vis数组标记字母是否删除 示例代码 void solve() {string s;cin >> s;int n s.size();vector<bool> vis(n, false);stack<int>sk…...
斐波那契数
C语言实现斐波那契数列的多种方法_斐波那契数列c语言-CSDN博客 题目描述 斐波那契数列为:1,1,2,3,5,8,13.....,常规递推公式f(n)f(n-1)f(n-2); 输入描述 输入一个整数n(0<n<50),为多组数据。 输出描述 输出第n个斐波那契数 样例输入 1 2 4样例输出…...

Redis高阶集群搭建+集群读写
问题 容量不够,redis 如何进行扩容?并发写操作, redis 如何分摊?另外,主从模式,薪火相传模式,主机宕机,导致 ip 地址发生变化,应用程序中配置需要修改对应的主机地址、端…...

Vision Transformer(vit)的主干
图解: 代码: class VisionTransformer(nn.Module):def __init__(self, img_size224, patch_size16, in_c3, num_classes1000,embed_dim768, depth12, num_heads12, mlp_ratio4.0, qkv_biasTrue,qk_scaleNone, representation_sizeNone, distilledFalse,…...

手撸了一个文件传输工具
在日常的开发与运维中,文件传输工具是不可或缺的利器。无论是跨服务器传递配置文件,还是快速从一台机器下载日志文件,一个高效、可靠且简单的文件传输工具能够显著提高工作效率。今天,我想分享我自己手撸一个文件传输工具的全过程…...

Java程序调kubernetes(k8s1.30.7)core API简单示例,并解决403权限验证问题,即何进行进行权限授权以及验证
简单记录问题 一、问题描述 希望通过Java程序使用Kubernetes提供的工具包实现对Kubernetes集群core API的调用,但是在高版本上遇见权限验证问题4xx。 <dependency><groupId>io.kubernetes</groupId><artifactId>client-java</artifact…...
java八股-Redis Stream和RocketMQ实现的解决方案
文章目录 Redis Stream方案:ShortLinkStatsSaveProducer.javaShortLinkStatsSaveConsumer.java RocketMQ方案ShortLinkStatsSaveProducer.javaShortLinkStatsSaveConsumer.java Redis Stream方案: ShortLinkStatsSaveProducer.java package com.nageoff…...

第29天 MCU入门
目录 MCU介绍 MCU的组成与作用 电子产品项目开发流程 硬件开发流程 常用元器件初步了解 硬件原理图与PCB板 常见电源符号和名称 电阻 电阻的分类 贴片电阻的封装说明: 色环电阻的计算 贴片电阻阻值计算 上拉电阻与下拉电阻 电容 电容的读数 二极管 LED 灯电路 钳位作…...

【Python网络爬虫笔记】6- 网络爬虫中的Requests库
一、概述 Requests 是一个用 Python 语言编写的、简洁且功能强大的 HTTP 库。它允许开发者方便地发送各种 HTTP 请求,如 GET、POST、PUT、DELETE 等,并且可以轻松地处理请求的响应。这个库在 Python 生态系统中被广泛使用,无论是简单的网页数…...

Linux网络_网络协议_网络传输_网络字节序
一.协议 1.概念 协议(Protocol) 是一组规则和约定,用于定义计算机网络中不同设备之间如何进行通信和数据交换。协议规定了数据的格式、传输方式、传输顺序等详细规则,确保不同设备和系统能够有效地互联互通。 在网络通信中&#…...

浅谈网络 | 应用层之流媒体与P2P协议
目录 流媒体名词系列视频的本质视频压缩编码过程如何在直播中看到帅哥美女?RTMP 协议 P2PP2P 文件下载种子文件 (.torrent)去中心化网络(DHT)哈希值与 DHT 网络DHT 网络是如何查找 流媒体 直播系统组成与协议 近几年直播比较火,…...

css vue vxe-text-ellipsis table 实现多行文本超出隐藏省略
分享 vxe-text-ellipsis table grid 多行文本溢出省略的用法 正常情况下如果需要使用文本超出隐藏,通过 css 就可以完成 overflow: hidden; text-overflow: ellipsis; white-space: nowrap;但是如果需要实现多行文本溢出,就很难实现里,谷歌…...

基于hexo框架的博客搭建流程
这篇博文讲一讲hexo博客的搭建及文章管理,也算是我对于暑假的一个交代 !!!注意:下面的操作是基于你已经安装了node.js和git的前提下进行的,并且拥有github账号 创建一个blog目录 在磁盘任意位置创建一个…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...

莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...

Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...