当前位置: 首页 > news >正文

【Linux】——git和gdb的简单使用技巧

目录

1.\r&&\n

2.缓冲区

3.做一个Linux的小程序——进度条

1.makefile代码:

2.proc.h代码

3.proc.c代码

4.main.c代码

4.git(上传做好的小程序)

5.Linux调试器-gdb使用


1.\r&&\n

在Linux中,可以将\r看成将光标移动到光标所在行的最左侧(回车)

\n看成换行,是换到下一行

2.缓冲区

凡是向显示器打印的所有内容,都是字符

3.做一个Linux的小程序——进度条

1.makefile代码:

myprocess:main.c proc.cgcc -o myprocess main.c proc.c
.PHONY:clean
clean:rm -f myprocess

2.proc.h代码

#pragma once#include <stdio.h>extern void process();

3.proc.c代码

#include "proc.h"
#include <string.h>
#include <unistd.h>#define SIZE 102
#define STYLE '='
#define ARR '>'// "|/-\\"
void process()
{const char *lable = "|/-\\";char bar[SIZE];memset(bar, '\0', sizeof(bar));int i = 0;while( i <= 100 ){printf("[\033[42;32;31m%-100s\033[0m][%d%%][%c]\r", bar, i, lable[i%4]);fflush(stdout);//刷新显示器bar[i++] = STYLE;if(i != 100) bar[i] = ARR;usleep(100000);}printf("\n");
}

4.main.c代码

#include "proc.h"int main()
{process();return 0;
}

4.git(上传做好的小程序)

git的使用流程

1.git clone +gitee的仓库http地址——将远端的git仓库克隆到本地的Linux中

2.cp “想要上传的代码”  本地的gitee仓库 ——将本地的想要上传的代码复制到本地的gitee仓库里面

3.git add (-A). ——将本地的gitee仓库add(.代表的是本地的仓库)

3.git commit -m “xxxxxx”——m后面填写的是本次上传代码的备注信息

4.git push——推送到远端的gitee仓库里面

5.Linux调试器-gdb使用

gcc和g++形成的可执行程序是release版本的,不是debug版本的

加上-g选项,gcc和g++会以debug版本进行编译程序,生成的可执行程序是debug版本的,这样才能用gdb调试

gdb主要掌握的是单进程调试功能,也就是在vs2019下怎么调试,就应该明白在gdb下如何调试

gdb使用流程

1.gdb “可执行程序”——用gdb打开可执行程序(debug版本)

2.l(list) 0——从第0行开始看代码,后续输入l+回车(不断回车),代码会自动往下翻滚(显示对应的代码)

3.r(run)——运行程序

4.b 行号——在某一行打断点

5.info b——查看断点(重点查看断点的首尾信息)

6.r——运行程序,此时程序在断点处停下

7.info b 此时可以发现断点已经被命中一次了

8.d 断点编号——删除断点

9.info b——此时已经没有断点了

10.r——运行程序,此时会询问你是否要重新开始调试

11.disable breakpoint 断点编号——禁用断点(将断点使能信号暂时关闭)

12.enable breakpoint 断点编号——开启被禁用的断点(与11条是一对)

13.逐语句(进入函数,一条条的跑完代码)逐过程(以函数为单位,但是不进入函数,跑完代码)调试方法:

1.n:逐过程

2.s:逐语句

3.p 变量——打印变量的值

4.display 变量名——常显示变量(可以是内置类型,也可以是结构体等自定义类型)的值(类似与vs2019的监视)

5.undisplay 变量编号——取消看常显示变量的值

6.until X行号:运行到第X行停下来

PS:

所有的调试器只是一个可以找出问题问题的工具,不能帮我们解决问题代码,真正能解决问题代码的只有我们自己。

所有查看代码内容的指令,并不影响我们调试的指令,比如:有的时候代码太多了,看不过来,我们用l去看自己想看的代码段,这种查看内容的l指令并不影响我们调试的位置。

14.finish——进入一个函数后,按下finish,就会只执行完该函数后,停下来 

15.c(continue):从一个断点处,直接运行到下一个断点处

常用的gdb调试按键

进入调试:gdb binFile

退出: ctrl + d 或 quit

调试命令:

list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。

list/l 函数名:列出某个函数的源代码。

r或run:运行程序。

n 或 next:单条执行(逐过程执行)。

s或step:进入函数调用(逐语句执行)

break(b) 行号:在某一行设置断点

break 函数名:在某个函数开头设置断点

info break :查看断点信息。

finish:执行到当前函数返回,然后停下来等待命令

print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数

p 变量:打印变量值。

set var:修改变量的值(这个调试指令用的很少)

continue(或c):从当前位置开始连续而非单步执行程序

run(或r):从开始连续而非单步执行程序

delete breakpoints:删除所有断点

delete breakpoints n:删除序号(断点的编号)为n的断点

disable breakpoints:禁用断点

enable breakpoints:启用断点

info(或i) breakpoints:参看当前设置了哪些断点

display 变量名:跟踪查看一个变量,每次停下来都显示它的值

undisplay:取消对先前设置的那些变量的跟踪

until X行号:跳至X行

breaktrace(或bt):查看各级函数调用及参数

info(i) locals:查看当前栈帧局部变量的值

quit:退出gdb

相关文章:

【Linux】——git和gdb的简单使用技巧

目录 1.\r&&\n 2.缓冲区 3.做一个Linux的小程序——进度条 1.makefile代码&#xff1a; 2.proc.h代码 3.proc.c代码 4.main.c代码 4.git&#xff08;上传做好的小程序&#xff09; 5.Linux调试器-gdb使用 1.\r&&\n 在Linux中&#xff0c;可以将\r看成…...

Fiddler的简单使用

目录 1.断点应用 2.网络限速测试 2.1.为什么需要弱网测试 2.2.Fiddler弱网测试配置 1.断点应用 通过断点功能&#xff0c;可以在测试时方便的篡改request&#xff0c;response以达到测试的目的&#xff0c;如果&#xff1a;在请求头中的参数修改成错误的&#xff0c;或在响应…...

MySql 事务

概述 事务 是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 注意&#xff1a; 默认MySQL的事务是自动提交的&#xff0c;也就是…...

微信社区小程序/h5/圈子论坛贴吧交友/博客/社交/陌生人社交/宠物/话题/私域/同城交友

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 小程序/app/H5多端圈子社区论坛系统,交友/博客/社交/陌生人社交,即时聊天,私域话题,社区论坛圈子,信息引流小程序源码,广场/微校园/微小区/微同城/ 圈子论坛社区系统&#xff0c;含完整…...

Python os和sys模块

一、os模块 os 模块是 Python中的一个内置模块&#xff0c;也是 Python中整理文件和目录最为常用的模块。 该模块提供了非常丰富的方法用来处理文件和目录。比如&#xff1a;显示当前目录下所有文件/删除某个文件/获取文件大小 1、获取当前的工作路径 在 Python 中&#xff0…...

JS中数组如何去重(ES6新增的Set集合类型)+经典two sum面试题

现在有这么一个重复数组&#xff1a;const arr [a,a,b,a,b,c]只推荐简单高效的方法&#xff0c;复杂繁琐的方法不做推荐方法一&#xff1a;const res [...new Set(arr)]Set类型是什么呢&#xff1f;Set 是ES6新增的一种新集合类型。具体知识点可以看下面附录&#xff1a;根据…...

HDLC简介及相应hdlc实训

HDLC简介 HDLC 协议 高级数据链路控制&#xff08;HDLC&#xff0c;High-level Data Link Control&#xff09;是一种面向比特的链路层协议&#xff0c; 其最大特点是对任何一种比特流&#xff0c;均可以实现透明的传输。HDLC协议具有以下优点。 透明传输&#xff1a;HDLC不…...

公司技术团队为什么选择使用 YApi 作为 Api 管理平台?

在 2021 年 12 月份的时候我就推荐过一款软件程序员软件推荐&#xff1a;Apifox&#xff0c;当时体验了一下里面的功能确实很实用&#xff0c;但是当时公司有一套自己的 API 管理方案&#xff0c;所有 Apifox 暂时就没在内部使用。 直到最近要使用其他的 API 管理方案的时候才…...

ts知识点整理

1、ts 中的 any 和 unknown 有什么区别&#xff1f; any 和 unknown 都是顶级类型&#xff0c;但是 unknown 更加严格&#xff0c;不像 any 那样不做类型检查&#xff0c;反而 unknown 因为未知性质&#xff0c;不允许访问属性&#xff0c;不允许赋值给其他有明确类型的变量。…...

技术分享 | OceanBase 数据处理之控制文件

作者&#xff1a;杨文 DBA&#xff0c;负责客户项目的需求与维护&#xff0c;会点数据库&#xff0c;不限于MySQL、Redis、Cassandra、GreenPlum、ClickHouse、Elastic、TDSQL等等。 本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用…...

TCP的三次握手、四次挥手

文章目录前言一、一些重要字段的含义二、TCP总括图三、三次握手详细过程1.第一次握手2.第二次握手3.第三次握手三次握手小结4.为什么必须要进行三次握手&#xff0c;两次或四次就不行四、四次挥手1.第一次挥手2.第二次挥手3.第三次挥手4.第四次挥手四次挥手简述前言 一个TCP的…...

C++---特殊类的设计

文章目录前言一、请设计一个类,不能被拷贝二、请设计一个类,只能在堆上创建对象三、请设计一个类,只能在栈上创建对象四、请设计一个类,不能被继承五、请设计一个类&#xff0c;只能创建一个对象(单例模式)总结前言 正文开始! 一、请设计一个类,不能被拷贝 拷贝只会发生在两个…...

buu [WUSTCTF2020]dp_leaking_1s_very_d@angerous 1

题目描述&#xff1a; e 65537 n 1568083435985787749573756968151889806821667406093028310996964920682463371987925108988184962391663390152073051021014316342831685444929845865667999964711502523821441482572367072472675061656708775063702531276953141639870840764…...

基于SVPWM改进的永磁同步电机直接转矩控制二更

导读&#xff1a;本期对基于SVPWM的永磁同步电机直接转矩控制进行全面的分析和仿真搭建。之后与传统的DTC进行比较&#xff0c;凸显基于SVPWM改进的DTC方法的有效性。如果需要文中的仿真模型&#xff0c;关注微信公众号&#xff1a;浅谈电机控制&#xff0c;留言获取。一、 传统…...

ubuntu下磁盘管理

一. ubuntu 磁盘文件 在做 Linux 嵌入式开发中&#xff0c;一般选择 U 盘的要求是&#xff1a;确保 U 盘是 FAT格式&#xff0c;即选用 FAT32 格式的U盘或 SD 卡。不要用 NTFS 格式的 U 盘或 SD卡&#xff0c;因为Linux 大多数系统都不支持 NTFS格式的&#xff0c;NTFS 格式的…...

Python学习-----排序问题1.0(冒泡排序、选择排序、插入排序)

目录 前言&#xff1a; 1.冒泡排序 2.选择排序 3.插入排序 前言&#xff1a; 学过C语言肯定接触过排序问题&#xff0c;我们最常用的也就是冒泡排序、选择排序、插入排序……等等&#xff0c;同样在Python中也有排序问题&#xff0c;这里我也会讲解Python中冒泡排序、选择排…...

LeetCode 535. TinyURL 的加密与解密

TinyURL 是一种 URL 简化服务&#xff0c; 比如&#xff1a;当你输入一个 URL https://leetcode.com/problems/design-tinyurl 时&#xff0c;它将返回一个简化的URL http://tinyurl.com/4e9iAk 。请你设计一个类来加密与解密 TinyURL 。 加密和解密算法如何设计和运作是没有限…...

【c++】类和对象2—构造函数、析构函数、拷贝构造函数

文章目录构造函数和析构函数构造函数的分类及调用拷贝构造函数调用时机构造函数调用规则深拷贝与浅拷贝构造函数和析构函数 c利用了构造函数和析构函数解决上述问题&#xff0c;这两个函数将会被编译器自动调用&#xff0c;完成对象初始化和清理工作。对象的初始化和清理工作是…...

[C++关键字] const/constexpr

文章目录const/constexpr[^1]const 与 宏const 与 类const 与 指针const 其他constexpr (C11之后)referenceconst/constexpr1 尽可能的使用constexpr对于不变的变量&#xff0c;尽量用const修饰 const 与 宏 const vs define的比较&#xff1a;define只是字符的替换&#xf…...

FPGA电源电流参数

一、FPGA里各个电源释义 VCCINT VCCINT是FPGA芯片的内核电压&#xff0c;是用来给FPGA内部的逻辑门和触发器上的电压。即芯片的晶体管开关是有核心电压提供。当内部逻辑工作时钟速率越高&#xff0c;使用逻辑资源越多&#xff0c;则核心电压供电电流会更大&#xff0c;可高达几…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

spring Security对RBAC及其ABAC的支持使用

RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型&#xff0c;它将权限分配给角色&#xff0c;再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...

React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?

系列回顾&#xff1a; 在上一篇《React核心概念&#xff1a;State是什么&#xff1f;》中&#xff0c;我们学习了如何使用useState让一个组件拥有自己的内部数据&#xff08;State&#xff09;&#xff0c;并通过一个计数器案例&#xff0c;实现了组件的自我更新。这很棒&#…...