• 【Linux】Linux小程序(进度条)、git命令行的使用及gdb的使用


    😁作者:日出等日落

    🔔专栏:Linux

    辛勤的蜜蜂永没有时间悲哀。                                                            ——布莱克

    目录

    \r和\n的区别:

    进度条小程序  

    git 命令行 

    Linux调试器:gdb的使用

     背景 

    gdb的使用 

    gdb调试指令:


    \r和\n的区别:

    • \r:回车
    • \n:换行

    那么这两个有什么区别呢?

        (1)让光标从第一行跳到第二行,但是光标只是垂直向下跳,并没有在第二行的开始。这个操作就是换行(\n)。

        (2)在第二行让光标跳到最开始的位置,这个操作就是回车(\r)。

    当只有\r时的运行结果:

    只有回车,我们可以想象到运行的结果是什么样,答案是:什么都不显示。为什么呢?

    • 回车之后,光标来到了文本行的开始位置,此时linux的命令行就会从光标处开始,将我们的文本覆盖掉,我们就什么也看不到

    当只有\n时的运行结果:

     此时test.c文件有\n(行缓冲区内容打印)

    此时运行,打印出hello world 这时光标会停3秒

    如果没有\n,会先停3秒然后再打印出hello  world

    无论是否有\n时,都是先走printf再sleep的,当有\n时如果读到了\n的位置就会先将行缓冲区的内容马上打印出来再往下走。

    注意:fflush函数可以立马刷新行缓冲区
     

    当\r和\n同时再的时候:

    进度条小程序  

    1. #include "proc.h"
    2. 2
    3. 3
    4. 4 #define SIZE 102
    5. 5 #define STYLE '='
    6. 6 #define ARR ">"
    7. 7
    8. 8 void process()
    9. 9 {
    10. 10 const char *lable = "|/-\\";
    11. 11 char bar[SIZE];
    12. 12 memset(bar, '\0', sizeof(bar));
    13. 13 int i = 0;
    14. 14 while( i <= 100 )
    15. 15 {
    16. 16 printf("[\033[42;32;31m%-100s\033[0m][%d%%][%c]\r", bar, i, lable[i%4]);
    17. 17 fflush(stdout);
    18. 18 bar[i++] = STYLE;
    19. 19
    20. 20 usleep(100000);//usleep是微秒,1秒等于1000000微秒
    21. 21 }
    22. 22 printf("\n");
    23. 23 }

    proc.h文件:

    1. #include
    2. #pragma once
    3. extern void proc();

    git 命令行 

    检查Linux是否安装git:

    git --version

    如果没有,安装指令是

    sudo yum install -y git 

    clone一个远端仓库:

    复制仓库的链接

    在Linux中创建远端仓库: 

    git clone 链接  

    提交代码带Git:

    git add 文件名 

    提交当前目录下的所有代码

    git commit -m “文字描述”

    最后推送到远程:

     git push

    第一次在Linux提交代码的会出现这个情况:

    这里需要你设置邮箱和名字

    git config --global user.name"你的名字"

    git config --global  user .email"你的邮箱"

    Linux调试器:gdb的使用

     背景 

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

    debug为可以调试的版本,release为优化后的版本也就是测试版本了

    Linux gcc/g++出来的是二进制文件,默认是release版本。

    在VS中,我们可以按F10进入调试

    在Linux我们依旧可以调试,要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

    gdb的使用 

    gdb 文件名 

     gcc生成后默认是release版本,因此是不可以调试的

    查看调试信息 

    readelf -S 文件名

    gdb调试指令:

    • list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
    • list/l 函数名:列出某个函数的源代码。
    • r或run:运行程序。
    • n 或 next:单条执行(逐过程执行)。
    • s或step:进入函数调用(逐语句执行)
    • break(b) 行号:在某一行设置断点 break 函数名:在某个函数开头设置断点
    • d 编号 :删除断点
    • 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

  • 相关阅读:
    [附源码]Java计算机毕业设计SSM高校《大学语文》课程作业在线管理系统
    移动端echarts手动控制tooltip和axisPointer的展示隐藏
    Android系统10 RK3399 init进程启动(三十七) 属性代码编程
    Java--SpringMVC之RequestMapping请求映射和处理器方法参数
    Linux 追踪技术 ftrace 简介(一)
    RocketMQ(二十)消息消费重试机制
    openbmc开发37:webui开发—增加全屏功能
    【无标题】
    限流设置之Nginx篇
    VCS工具学习笔记(8)
  • 原文地址:https://blog.csdn.net/fcawyxb/article/details/130836646