• Linux下git和gdb的使用


     🚀每日鸡汤:生活不相信眼泪,即使你把眼泪流成珍珠,灰暗的生活也不会因此而闪光。

    目录

    一、使用git命令行

    1.1安装git、配置仓库

    Ⅰ.gitignore

    Ⅱ.git

    1.2git的基本使用

    二、Linux调试器-gdb

    2.1、gdb的使用

     2.2、 debug与release版本的区别

    ①release版本大小小于debug版本

     ②readelf -S 可执行程序(debug/release)

    2.3、 gdb的基本指令

    Ⅰ断点

    Ⅱ调试

    一、使用git命令

    1.1安装git、配置仓库

    安装git :sudo yum install -y git

    我们在自己的gitee开创一个仓库,用于上传我们的Linux文件。然后就可以克隆到Linux

     在我们git下来的文件里面除了两个说明书和一个通行证,还有隐藏文件:.gitignore.git. 我们先来谈.gitignore

    Ⅰ.gitignore

    它的里面全是文件后缀:

     这些后缀是做什么的呢?凡是在.gitignore里面的后缀,我们在上传的文件后缀凡是被包含于其中的,都不会被上传到gitee,相当于一个过滤器

    Ⅱ.git

    而所谓的git仓库,本身就是一个目录.git +里面的内容

    .git类似于我们的一个中转站,我们先把新增的文件添加到.git目录,然后再上传到码云gitee。介绍完这些,我们再来看一下git的基本使用。

    1.2git的基本使用

     ①git add

    git add 文件名 这个指令的作用在于将我们刚刚clone下来的目录里新增的文件添加到.git目录

     ②git commit  -m ‘日志’

    这个指令先把.git新增的文件合并到本地仓库,注意,这里我们还没上传到远端,而引号里面就是我们要写的日志,我们可以添加一些备注或者日期。

    ③git push 

    把本地的推送到码云。需要我们输入gitee的用户名和密码,我们可以设置为免密码,但是不推荐。

    ④git status

    查看git状态,会显示我们当前进行到git的哪一步了。

    当我们git add .之后,查询状态,会提示我们下一步要commit。  

    ⑤git mv

    git mv source destination

    要求source文件必须是文件,链接或目录,如果destination是现有的目录,则被认为是移动sourcedestination,如果destination不存在,则被判定是更改名字。

    演示:

     我们这里的git mv pu.c love包含三步:

    mv pu.c love

    rm pu.c

    git add .

    我们查询git status 就会发现已经执行了git add . 到了git commit的阶段。

    需要注意的是如果是改名必须在git commit之后才能改名。

    ⑥git pull

    如果你把远端的仓库里的文件给修改了,就会导致git push失败,这时就需要git pull把文件拉回来进行合并,然后我们就可以提交git pushgit保证本地和远端仓库的文件要保持一致

    ⑦git log

    git log 可以查看所有的提交记录:

    我们发现我们commit时写的日志也会显示,所以要提醒各位老铁,不要乱写,hr会看的!!😄

    二、Linux调试器-gdb

    2.1、gdb的使用

    Windows下我们通过编译器比如说vs进行调试,那么在Linux下我们也有自己的调试工具--gdbgdb是基于命令行式的调试,两者在方法上有区别,gdb没有vs调试起来那么方便,但是在思路上还是相近的。

    一般我们的编译器上是没有配备gdb的,需要自己安装。

    安装指令:sudo yum install -y gdb

    这里要提到两个指令,在gdb模式下:

    🖊list(l)是查看代码

    🖊run(r)是运行代码

    🖊quit(q)是推出gdb模式

     那么我们可以看到我这里的查看代码什么也没有看到,这是为什么呢?这是因为,在默认情况下,gdb无法进行对现在发布的程序进行调试。也就是说,默认情况下,我们发布的程序是release版本。我们知道vs下我们想调试必须将软件设为debug模式,设为debug后才能生效,否则不能调试。

    怎么才能让他以debug版本发布呢?我们需要在gcc编译软件时添加-g选项。

     

     2.2、 debug与release版本的区别

    ①release版本大小小于debug版本

    这肯定是毋庸置疑的,因为debug版本需要我们使用工具调试,需要文件展示的信息更多。

     ②readelf -S 可执行程序(debug/release)

    Linux下有一个readelf -S 可执行程序(debug/release) 指令用于读取可执行程序的二进制构成。

     虽然我们看不懂这些二进制,但是我们可以利用管道过滤一下得到debug信息。

    我们可以小结一下Linux下的默认行为:

    gcc默认行为:

                        1、默认是动态链接的。

                        2、默认是release版本

    vim默认行为:

                        默认打开就是命令模式

    2.3、 gdb的基本指令

    gdb 退出:CTRL+dquit/q调试命令:

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

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

    🖊r或run:运行程序

    🖊n或next:逐过程调试,相当于f10

    🖊s或step:逐语句调试,相当于f11,可以进入函数

    🖊break(b) 行号:给第n行断点。注意:如果打断点的所在行没有代码,就会相当于断点打在后面有代码的行。

    🖊info break(b):用于查看所有断点

    🖊finish:首先需要进入函数,finish直接运行到将对应函数跑完,如果跑时挂掉,直接确定函数有问题。

    🖊p  变量:查看变量内容。

    🖊p &变量:查看变量地址。

    🖊set var:修改变量的值

    🖊continue(c):从一个断点运行到下一个断点

    🖊run(r):r相当于f5.当没有断点的时候,就是运行程序,有断点的时候就是运行到第一个断点处。

    🖊d  b:删除所有断点 

    🖊d b 断点编号:d  断点编号去掉指定断点,这里需要注意,不是d  行号 去掉断点,而是我们info b 查看到的每个断点的编号。

    🖊disable breakpoints:禁用断点

    🖊enable breakpoints:启用断点

    🖊info(或i) b:查看当前设置了哪些断点

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

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

    🖊until X行号:跳至X行,跳出循环到有效代码行(不是空)

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

    🖊info(i) locals:查看当前栈帧局部变量的值,显示特定区域中的临时变量。

    Ⅰ断点

    ①gdb l  1

    从第一行开始显示,显示后面的不用再输入指令,回车即可,gdb会默认记住之前的指令。

     ②gdb b(break) # 

    gdb b(break) #:给第#行断点。

    我们可以打多个断点。

    打过断点后,我们不像在vs上能看到红色断点,我们怎么在Linux上查看断点呢?

    ③info(i) b

    info b:用于查看所有断点。

     ④delete(d) 断点编号

    断点编号去掉指定断点,这里需要注意,不是d  行号 去掉断点,而是我们info b 查看到的每个断点的编号。

     在掌握这些基本指令之后,怎么调试呢?在vs下我们f5执行到断点,当断点比较多的时候,f5表示从一个断点执行到另一个断点CTRL+f5 执行可执行程序。那么在Linux下与之对应的哪些指令是调试呢?

    Ⅱ调试

    ①gdb r

    r相当于f5.当没有断点的时候,就是运行程序,有断点的时候就是运行到第一个断点处。

     ②gdb p

    p 变量用于查看内容,p &变量查看地址

     但是我们这样查看很不方便,只能看到临时的,不能常显示。

    ③display && undisplay

    display可以常显示变量display &变量可以常显示变量地址

     取消常显示:undisplay 编号

    undisplay用于取消常显示,我们取消的也是变量的编号

     ④disable && enable

    有些断点虽然我们打下了,但是我们不想让它生效,我们又不想取消这个断点就可以使用disable 断点编号指令。

    与之对应的是enable 断点编号重新使断点生效

     

     

  • 相关阅读:
    4-Dubbo架构设计与底层原理-服务导出源码分析(上)
    索引——MySQL
    Mybatis杂谈
    Coremail城市沙龙活动|齐聚古城西安,护航信息安全
    Spring源码阅读(spring-framework-5.2.24)
    OFDM同步技术
    Win10系统投影到此电脑的功能无法使用的解决办法(Miracast: Available, no HDCP)
    TypeScript26(TS进阶用法Record & Readonly)
    E - Stoned Game
    公众号5月C#/.NET热文一览
  • 原文地址:https://blog.csdn.net/JJR_YZ/article/details/127624690