【linux】git和gdb调试工具

news2025/1/16 0:50:44

在linux下提交代码同步到gitee

1.创建一个新的仓库(演示步骤)

在这里插入图片描述

在这里插入图片描述

2.init

在这里插入图片描述
在这里插入图片描述
这两个步骤用于识别提交代码的身份,一个你的名字,一个你的邮箱
在这里插入图片描述

开启本地仓库
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
克隆本地仓库成功


在这里插入图片描述
我们将这个仓库拷到了111目录底下.

在这里插入图片描述
在这里插入图片描述
我们发现少了一个.gitignore,因为.gitignore是隐藏文件,所以使用ls -la查看
在这里插入图片描述

3.git log 指令

用于查看提交状态
在这里插入图片描述

上面可以看到提交人的信息,以及时间,以及提交备注


将上节课写的代码拷贝到当前目录下
在这里插入图片描述

在这里插入图片描述
此时还没有同步到gitee上去

4.git三板斧

1.git add .//将该目录的修改记录同步到本地仓库去
在这里插入图片描述
2.git commit -m+“提交备注”//正式将修改更新到本地仓库
在这里插入图片描述
根据.git更改时间发现仓库更新
在这里插入图片描述
3.git push//将本地仓库内容同步到gitee远端仓库

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/71f7a70b77334b1f979462a1a0de17fc.png

在这里插入图片描述
在这里插入图片描述
git log 查看同步记录

在这里插入图片描述
然后我们在gitee上发现同步上了.


在windows下我们使用小乌龟上传代码到gitee远端仓库 ,我们发现会有很多.obj ,.exe文件 ,我们不需要这些,我们应该怎么办?

在这里插入图片描述
我们先新建3个文件 c.txt x.txt2 z.txt1 我们不要上传.txt文件,.txt2,.txt1上传
将这个后缀添加到.gitignore中就可以了

5. vim修改内容

在这里插入图片描述
在这里插入图片描述
添加不要上传的文件后缀
在这里插入图片描述
使用三板斧提交同步代码到远端
在这里插入图片描述
发现没有出现.txt后缀。测试成功


我们如何在本地删除一个文件,然后同步到远端呢?

6.git rm +文件名

我们假如要删除刚才上传的两个txt1,txt2
在这里插入图片描述

使用三板斧同步修改到远端
在这里插入图片描述
在这里插入图片描述
删除成功

演示完成,我们需要删除我们这个仓库
在这里插入图片描述

这里可以查看提交的记录,
然后删除我们这个仓库
在这里插入图片描述


gdb调试工具

debug版本为什么比release版本文件大

用户一般用的产品只需要使用,不用带调试信息,用户也不需要调试信息,使用release版本就行,而程序员需要看调试信息找错误,所以程序员使用的debug版本,debug版本比release大是因为携带调试信息

  1. 背景
    程序的发布方式有两种,debug模式和release模式
    Linux gcc/g++出来的二进制程序,默认是release模式
    要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

这里有一个问题?
for循环形式只是在c99下是允许的 ,所以要修改一下我的for循环模式,c89将变量定义写在外面
在这里插入图片描述

默认gcc 编译生成release版本
在这里插入图片描述

exe1为release版本下的
exe2为debug版本下的
在这里插入图片描述

明显在debug下生成的.exe文件大
使用readelf指令可以读取可执行文件的详细信息,并且通过管道(相当于把管道前处理后再干什么),grep指令将debug信息列举
在这里插入图片描述

我们发现exe1没有debug信息,exe2有debug信息


gdb指令

1.进入gdb

1.gdb+在debug下生成可执行文件的文件名

在这里插入图片描述

2.退出gdb

2.q
在这里插入图片描述

3.查看对应的.c文件对应行的上下文

3.list+文件名:行号/函数名
3.l+文件名:行号/函数名(简写)
在这里插入图片描述

当执行完一个指令后,按回车会自动执行最近的上一个指令
在这里插入图片描述

简写也可以
在这里插入图片描述

l+函数名
在这里插入图片描述

l 15 显示15行的上下文
在这里插入图片描述


接着我们对应着vs的调试理解gdb调试下的指令
我们将代码拷到vs上去

4.添加断点

在vs中添加断点

在光标停留那一行按F9或者鼠标在对应行点击出现红点
在这里插入图片描述

在gdb中添加断点

4.b+文件名:行号/函数名
4.b+ 行号/函数名(简写)
在这里插入图片描述

5.查看断点

在vs查看断点

直接看红圈出现的位置

在gdb中查看断点

5.info +b
5.i+b(简写)
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ccab9c4fb5d4419eae69fbb3de51dec3.png

6.删除断点

在vs中删除断点

在打断点的行再次按一下F9或者用鼠标点击一下断点取消断点

在gdb中删除断点

6.d +断点编号
在这里插入图片描述

7.断点使能

在gdb中让断点关闭/打开,并非删除

7.disable +断点编号(断点关闭)
7.enable +断点编号(断点重启)
在这里插入图片描述

8.逐过程(不进入定义函数内部)

在vs中逐过程:F10
在gdb中的逐过程:
8.next
8.n(简写)

在这里插入图片描述
我们在主函数那打个断点,然后使用指令r让程序跑起来,遇到main函数处打的断点停下来,然后按n,开始逐过程,我们发现到了add函数不进函数内部,z直到程序结束.

9.逐语句(进入定义函数内部)

在vs中逐语句:按F11
在gdb逐语句:
9.step
9.s(简写)
在这里插入图片描述
同理,我们在主函数打断点,按r让程序跑起来,当到断点处,按s/step,我们发现可以进入add函数中

10.查看变量内容或者变量地址

在vs中查看变量内容/变量地址:

在这里插入图片描述
F11运行起来在监视里面添加变量/变量地址

在gbd中查看变量内容/变量地址:

10.print+变量名/变量地址
10.p+变量名/变量地址(简写)
在这里插入图片描述

11.持续显示变量/变量地址

在gdb中:
11.display+变量名/变量地址
11.d+变量名/变量地址
在这里插入图片描述

12.取消持续显示的变量/变量地址

在gdb中:
12.undisplay+ 要取消持续显示的变量的编号
在这里插入图片描述
在这里插入图片描述

13.运行到下一断点处

在gdb中:
13.continue
13.c
在这里插入图片描述
这个是我们的程序
我们分别在16行,18行打断点
在这里插入图片描述
在16行的第一个断点停下,按continue/c进入下一个断点处.

14.运行结束所在函数,就停下来

在gdb中:
14.finish
在这里插入图片描述

15.跳转到指定行,中间代码都是运行过的

在gdb中:
15.until
在这里插入图片描述
16行直接到18行,并且中间都被执行.

17.修改变量的值

在gdb中:
17.set var +变量名=(修改后的值)
在这里插入图片描述

18.查看栈帧创建情况

在gdb中:
18.bt
在这里插入图片描述
在add函数中,我们发现add函数的栈帧在主函数的上面压着,当finish完add后,只剩下main的栈帧.

总结
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
list/l 函数名:列出某个函数的源代码。
r或run:运行程序。
n 或 next:单条执行。
s或step:进入函数调用
break(b) 行号:在某一行设置断点
break 函数名:在某个函数开头设置断点
info break :查看断点信息。
finish:执行到当前函数返回,然后挺下来等待命令
print§:打印表达式的值,通过表达式可以修改变量的值或者调用函数
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):查看各级函数调用及参数
quit:退出gdb

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

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

相关文章

window 镜像---负载篇

前提:需要修改window的powershell执行脚本的策略 步骤:以管理员身份打开powershell,执行 Get-ExecutionPolicy查看当前执行策略,若返回值是Restricted,需执行Set-ExecutionPolicy RemoteSigned powershell 版本信息&am…

SpringMVC精简知识点

SpringMVC 数据格式化基本数据类型和字符串自动转换特殊数据类型和字符串自动转换 验证及国际化应用实例注意事项和使用细节注解的结合使用数据类型转换校验核心类-DatBinder取消某个属性的绑定中文乱码解决处理json和HttpMessageConverter<T>作业布置SpringMVC文件上传自…

笔记本电脑的WIFI模块,突然不显示了,网络也连接不上

问题复现&#xff1a; 早上&#xff0c;在更新完笔记本电脑的系统之后&#xff0c;连网之后&#xff0c;网络突然直接断开&#xff0c;一查看&#xff0c;WiFi模块居然不见了&#xff0c;开机重启也是如此&#xff0c;这种情况常常出现在更新系统之后&#xff0c;WiFi模块驱动就…

MySQL集群 1主1从 主从复制(原理 及配置命令)

CSDN 成就一亿技术人&#xff01; 今天分享一期 MySQL集群方案&#xff1a;主从集群 也是最常用的一种 CSDN 成就一亿技术人&#xff01; 目录 使用主从复制的原因&#xff08;优点&#xff09; 主从复制的过程&#xff08;原理&#xff09; 了解两大线程&#xff08; I/O…

7min到40s:SpringBoot 启动优化实践!

目录 背景 1 耗时问题排查 1.1 观察 SpringBoot 启动 run 方法 1.2 监控 Bean 注入耗时 2 优化方案 2.1 如何解决扫描路径过多&#xff1f; 2.2 如何解决 Bean 初始化高耗时&#xff1f; 3 新的问题 3.1 SpringBoot 自动化装配&#xff0c;让人防不胜防 3.2 使用 sta…

大带宽服务器托管的特点和考虑因素

很多公司和企业对于使用大带宽服务器的需求和存储不一样&#xff0c;为了满足不同的用户需求&#xff0c;大带宽服务器托管是个不错的选择&#xff0c;小编为您整理发布大带宽服务器托管的特点和要考虑的因素。 大带宽服务器托管是一种服务器托管服务&#xff0c;其主要特点是…

GLIP:零样本学习 + 目标检测 + 视觉语言大模型

GLIP 核心思想GLIP 对比 BLIP、BLIP-2、CLIP 主要问题: 如何构建一个能够在不同任务和领域中以零样本或少样本方式无缝迁移的预训练模型&#xff1f;统一的短语定位损失语言意识的深度融合预训练数据类型的结合语义丰富数据的扩展零样本和少样本迁移学习 效果 论文&#xff1a;…

JetPackCompose之Text使用指北

Jetpack Compose系列(6) - 文本组件 对应View体系中传统的TextView&#xff0c;Jetpack Compose中用Text组件来显示文本信息。跟其他组件一样&#xff0c;它在构造函数里就包含控制文本显示样式的一些属性&#xff0c;下面是其参数及解释&#xff1a; Composable fun Text(te…

从零开始手写mmo游戏从框架到爆炸(一)— 开发环境

一、创建项目 1、首先创建一个maven项目&#xff0c;pom文件如下&#xff1a; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0…

力扣面试150 只出现一次的数字Ⅱ 哈希 统计数位 DFA有穷自动机

Problem: 137. 只出现一次的数字 II 文章目录 思路&#x1f496; 哈希&#x1f496; 位数统计&#x1f496; DFA 状态机 思路 &#x1f468;‍&#x1f3eb; 参考 &#x1f496; 哈希 ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( n ) O(n) O(n) cl…

《动手学深度学习(PyTorch版)》笔记7.1

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

vue 下载二进制文件

文章目录 概要技术细节 概要 vue 下载后端返回的二进制文件流 技术细节 import axios from "axios"; const baseUrl process.env.VUE_APP_BASE_API; //downLoadPdf("/pdf/download?pdfName" res .pdf, res); export function downLoadPdf(str, fil…

【Linux】信号-上

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;【LeetCode】winter vacation training 目录 &#x1f449;&#x1f3fb;信号的概念与产生jobs命令普通信号和实…

JAVA-File五个练习

下面习题思路大多都是&#xff1a; 1.获取路径下所有列表&#xff08;listfiles&#xff09;&#xff0c;2.遍历文件或文件夹&#xff08;增强for&#xff09;&#xff0c;3.判断是否是文件&#xff08;isFile&#xff09;并直接执行逻辑&#xff0c;4.判断当前是文件夹的情况&…

JDK和Spring的SPI机制原理分析

目录 一、JDK 二、Spring框架介绍 三、SPI机制原理 一、JDK JDK是Java Development Kit的缩写&#xff0c;是Java开发工具包的意思。它是用于开发Java应用程序和运行Java程序的软件包。JDK包含了Java编译器&#xff08;javac&#xff09;和Java虚拟机&#xff08;JVM&#…

免费的hyper-v虚机添加U盘的二种方法

windows集成了hyper-v&#xff0c;hyper-v可以安装linux&#xff0c;windows等虚机&#xff0c;基本可以满足工作&#xff0c;实验之需。但是不少人反映hyper-v不方便连接U盘&#xff0c;这样子文件传输不是很方便。 网上有方法说在虚机设置中添加磁盘&#xff0c;首先到物理机…

信创ARM架构QT应用开发环境搭建

信创ARM架构QT应用开发环境搭建 前言交叉工具链Ubuntu上安装 32 位 ARM 交叉工具链Ubuntu上安装 64 位 ARM 交叉工具链 交叉编译 QT 库下载 QT 源码交叉编译 QT 源码 Qt Creator交叉编译配置配置 Qt Creator Kits创建一个测试项目 前言 有没有碰到过这种情况&#xff1f;开发出…

ctfshow web-76

开启环境: c?><?php $anew DirectoryIterator("glob:///*"); foreach($a as $f) {echo($f->__toString(). );} exit(0); ?> cinclude("/flagc.txt");exit(); c?><?php $anew DirectoryIterator("glob:///*"); foreach($a…

全流程机器视觉工程开发(四)PaddleDetection C++工程化应用部署到本地DLL以供软件调用

前言 我们之前跑了一个yolo的模型&#xff0c;然后我们通过PaddleDetection的库对这个模型进行了一定程度的调用&#xff0c;但是那个调用还是基于命令的调用&#xff0c;这样的库首先第一个不能部署到客户的电脑上&#xff0c;第二个用起来也非常不方便&#xff0c;那么我们可…

vue使用es的reduce方法编译报错Error: Can‘t resolve ‘core-js/modules/es.array.reduce.js‘

哈喽 大家好啊 最近在vue使用es的reduce方法编译报错Error: Cant resolve core-js/modules/es.array.reduce.js 报错如图所示&#xff1a; 解决方案&#xff1a; npm install --save core-js 然后重新编译下将正常了 参考原文: 使用import异步加载语法报错_module not foun…