【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");}

 效果图:

加强进度条模拟下载(回调):

如若对你有帮助,记得关注、收藏、点赞哦!您的支持使我最大的动力🌹🌹🌹🌹!!!

若有误,望各位,在评论区留言或者私信我 指点迷津!!!谢谢^ ^ ~

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

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

相关文章

【人工智能】大数据平台技术及应用

文章目录 前言一、大数据平台基本概念及发展趋势1、数据量爆发式增长&#xff0c;发数据蓬勃发展2、大数据到底是什么&#xff1f;3、大数据处理与传统数据处理的差异4、为什么要建立大数据平台&#xff1f;5、大数据平台开源架构-Hadoop6、华为云大数据平台架构 二、大数据技术…

ABAP - 系统集成之SAP的数据同步到OA(泛微E9)服务器数据库

需求背景 项目经理说每次OA下单都需要调用一次SAP的接口获取数据&#xff0c;导致效率太慢了&#xff0c;能否把SAP的数据保存到OA的数据库表里&#xff0c;这样OA可以直接从数据库表里获取数据效率快很多。思来想去&#xff0c;提供了两个方案。 在集群SAP节点下增加一个SQL S…

PHP语法学习(第三天)

老规矩&#xff0c;先回顾一下昨天学习的内容 PHP语法学习(第二天) 主要学习了PHP变量、变量的作用域、以及参数作用域。 今天由Tom来打开新的篇章 文章目录 echo 和 print 区别PHP echo 语句实例 PHP print 语句实例 PHP 数组创建数组利用array() 函数 数组的类型索引数组关联…

映射vim键位,基本功能键位表(未更完)

键位映射&#xff1a;建议使用jj代替esc,毕竟esc离手那么远 linux下修改方法是&#xff1a;vim /etc/vim/vimrc 在该文件尾添加inoremap jj <Esc>该方法可以同样可以用到其他键位映射上 i&#xff1a;表示这个映射是在插入模式&#xff08;insert mode&#xff09;下有效…

vue3+ts+vite+ElementPlus上传进度条实时更新(UPLoad和progress)。

需求&#xff1a; 上传文件时&#xff0c;展示进度条实时更新&#xff1a; 下面是代码片段: <!-- 添加媒体弹窗 -- 上传 --><el-dialog v-model"centerDialogVisible" title"媒体信息" width"700" :close-on-click-modal"false&qu…

MSSQL2022的一个错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.16.0”提供程序

MSSQL2022导入Excel的一个错误&#xff1a;未在本地计算机上注册“Microsoft.ACE.OLEDB.16.0”提供程序 一、导入情况二、问题发现三、问题解决 最近在安装新版SQLServer SSMS 2022后&#xff0c;每次导入Excel都会出现错误提示&#xff1a;未在本地计算机上注册“Microsoft.AC…

优傲协作机器人 Remote TCP Toolpath URCap(操作记录)

目录 一、新机设置项 1、设置管理员密码 2、设置安全密码 3、设置负载 二、激活 Remote TCP & Toolpath URCap 1、插入U盘 2、打开激活面板 3、导入许可证 4、查看是否激活成功 5、启用功能 三、使用流程&#xff08;官方&#xff09; 步骤一 步骤二 步骤三 …

【日常记录-Java】查看Maven本地仓库的位置

1. 简介 Maven本地仓库主要用于存储和管理项目所需的依赖项&#xff0c;如jar包、pom文件等。默认情况下&#xff0c;其位于用户家目录下的.m2/repository文件夹内。开发者也可以在Maven的配置文件settings.xml中修改本地仓库路径。 2. 方法 2.1 查看settings.xml文件 Maven本…

kafka 配置消息编码格式、解决消费者中文乱码

序列化 kafka 发送消息需要把key 和value 进行序列化处理 一般配置字符串方式&#xff0c;如果消息量大需要优化成其他方式。 代码配置 props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("val…

Apache Commons Chain 与 Spring Boot 整合:构建用户注册处理链

文章目录 概述1. 环境准备2. 创建自定义上下文3. 创建命令验证用户输入保存用户数据发送欢迎邮件 4. 构建并执行处理链5. 使用处理链6. 运行结果7. 总结 概述 本文档旨在展示如何在 Spring Boot 应用中使用 Apache Commons Chain 来实现一个用户注册的处理链。我们将通过 Chai…

电子商务人工智能指南 2/6 - 需求预测和库存管理

介绍 81% 的零售业高管表示&#xff0c; AI 至少在其组织中发挥了中等至完全的作用。然而&#xff0c;78% 的受访零售业高管表示&#xff0c;很难跟上不断发展的 AI 格局。 近年来&#xff0c;电子商务团队加快了适应新客户偏好和创造卓越数字购物体验的需求。采用 AI 不再是一…

OpenAI 推出了 Canvas 和 SearchGPT

今天的故事从 ChatGPT 推出的 Canvas 和 SearchGPT 开始。 ©作者|Ninja Geek 来源|神州问学 ChatGPT 在最近推出了令人兴奋的 Canvas 功能&#xff0c;Canvas 不仅带来了 ChatGPT 界面上的变化&#xff0c;还完全改变了人们撰写文档和书写代码的体验&#xff01; Canvas…

VMware虚拟机与国产操作系统安装及学习

今日任务&#xff1a; 虚拟化技术----操作系统的应用 非常重要的技术-----云计算技术的兴起-----云技术的核心就是虚拟化 传统计算-----&#xff08;《世纪之战》主演&#xff1a;刘青云 《暗算》主演&#xff1a;柳云龙 《功勋》 从算盘的演变到计算器----计算机----&#xff…

C# 中LINQ的详细介绍

文章目录 前言一、 LINQ 的基本概念二、查询语法与方法语法三、LINQ 的投影操作四、LINQ 的排序操作五、LINQ 的过滤操作六、LINQ 的分组操作七、LINQ 的连接操作八、LINQ 的聚合操作九、LINQ 的延迟执行十、LINQ 的错误处理十一、LINQ 的合并操作十二、LINQ 的自定义对象查询十…

Observability:用 OpenTelemetry 自动检测 Python 应用程序

作者&#xff1a;来自 Elastic Bahubali Shetti 了解如何使用 OpenTelemetry 自动检测 Python 应用程序。使用 Docker 文件中的标准命令&#xff0c;可以快速检测应用程序&#xff0c;而无需在多个位置编写代码&#xff0c;从而实现快速更改、扩展和更轻松的管理。 更多阅读&a…

利用tablesaw库简化表格数据分析

tableaw是处理表格数据的优秀工具。它提供了一组强大而灵活的功能&#xff0c;使操作、分析和可视化数据表变得容易。在这篇博文中&#xff0c;我们将介绍tableaw的主要特性、如何使用这些特性&#xff0c;以及如何使用tableaw处理表格数据的一些示例。 tablesaw简介 tableaw…

通过精密时间协议(PTP)对计算机网络中的多个设备进行时间同步

PTP 模块 - 使用教程 目录 PTP 模块 - 使用教程简介第 1 步&#xff1a;为主时钟创建一个 PTP 时钟实例第 2 步&#xff1a;添加 PTP 端口第 3 步&#xff1a;查询 PTP 时钟或 PTP 端口的状态第 4 步&#xff1a;清除 FAULTY 状态第 5 步&#xff1a;为 PTP 事件安装处理程序第…

【深度学习】利用Java DL4J 训练金融投资组合模型

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s…

支持向量机算法:原理、实现与应用

摘要&#xff1a; 本文深入探讨支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;算法&#xff0c;详细阐述其原理、数学模型、核函数机制以及在分类和回归问题中的应用方式。通过以 Python 和 C# 为例&#xff0c;展示 SVM 算法在不同编程环境下的具体…

STM32编码器接口及编码器测速模板代码

编码器是什么&#xff1f; 编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感 器&#xff0c;我们可以通过编码器测量到底位移或者速度信息。编码器从输出数据类型上 分&#xff0c;可以分为增量式编码器和绝对式编码器。 从编码器检测原理上来分&#xff0…