【Linux】Linux环境基础开发工具的使用 ———(yum、vim、gcc&g++、gdb、make/Makefile、进度条 、git)(下)

简介: 【Linux】Linux环境基础开发工具的使用 ———(yum、vim、gcc&g++、gdb、make/Makefile、进度条 、git)(下)

🌈 4.2 gdb指令集


为了演示各种指令


0a2653c851af460fa595bd959398a8f1.png


🥑显示代码:要打断点,要先知道行号


l/list  显示源代码


0a2653c851af460fa595bd959398a8f1.png


gdb会记录最近一条命令,如果命令无变化可以直接回车


🥑断点:breakpoint


b 行号   在某一行设置断点

d(delete) n   删除序号为n的断点(注:删除时不以行号标定)

info b     查看断点信息


2d65d23f6d4748949b924e4057485923.png


disable n  禁用断点

enable n   启用断点


6de278e6d6694ce5bb08e7e842b7e74b.png


相当于vs下的——


8ec4f2997fb246878c34ecd6d122b7c6.png


r/run 运行程序 - 相当于F5

———————————记得打断点——————————

n/next 逐过程 - 相当于F10

s/step 逐语句 - 相当于F11


0a2653c851af460fa595bd959398a8f1.png


调试前要先run起来


🥑快速确定代码中是哪一行出错了


finish   结束当前函数

c/continue  直接到下一个断点

until 行号   跳转到指定行     不建议


2d65d23f6d4748949b924e4057485923.png6de278e6d6694ce5bb08e7e842b7e74b.png


🥑监视


display 变量名   常显示

p/P 变量名    打印一次

undisplay 数字  取消对变量的常显示  

bt 查看当前的调用堆栈


8ec4f2997fb246878c34ecd6d122b7c6.png


quit 退出


🌍五. make & makefile


一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率


make是一条命令,makefile是一个文件

编写makefile包含:依赖关系&依赖方法,两者搭配,可以达到形成可执行程序的目的

🥑理解:爸我是你儿子,使用你给我发生活费


🔥 touch一个Makefile来表明依赖关系和依赖方法


touch makefile


.PHONY:修饰对应符号,让符号变成伪目标(伪目标:总是被执行的)也确实观察到如果没有对文件进行修改,执行make命令是没有效果的(底层是通过对比修改时间和可执行时间实现的),然而make clean 即便刚刚执行过,也可以随便执行。


🔥也可以这样写——


0a2653c851af460fa595bd959398a8f1.png


$@:目标文件

$^:文件列表

🎶总是被执行的:总是会根据依赖关系,执行依赖方法,我们习惯给clean设置.PHONY,可执行程序不带


2d65d23f6d4748949b924e4057485923.png


makefile是如何得知,我的可执行文件是最新的?


根据文件最近的更改时间来判断(比较源文件和生成文件时间)


ps:当我们修改内容的时候,有时候change时间也可能会变化


🥑生成项目&清理项目


make   生成解决方案

make clean  清理解决方案


0a2653c851af460fa595bd959398a8f1.png


相当于vs下——


2d65d23f6d4748949b924e4057485923.png


ps:❗有些时候我们代码编译不过,就是忘记了保存,所以写入磁盘的时间没有变,系统认为你没有修改,没有编译失败,这时候就要清理一下解决方案,重新生成


🥑make会根据你编写的依赖关系,从上往下自动推导程序的执行


make会在当前目录下找名字叫Makefile或makefile的文件。然后它会默认找文件中的第一个目标文件(target),并把这个文件作为最终的目标文件。


.PHONY:clean

clean:

 rm -f mytest

 

mytest:test.c

gcc test.c -o mytest


0a2653c851af460fa595bd959398a8f1.png


在如下代码中,mytest所依赖的mytest.o不存在或是被修改,就会执行对应的依赖方法,依赖方法中mytest.o又不存在,那么make会在Makefile文件中寻找目标为test.o文件的依赖关系,如果找到则再根据其依赖方法生成test.o文件,以此类推。(类似于堆栈的过程)。


2d65d23f6d4748949b924e4057485923.png


总之,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。当然依赖后仍然找不到那就只能报错了


🌍 六.Linux第一个小程序-进度条


首先我们得知道两个概念:


回车\r:回到当前行的最开始

换行\n:列不变,新起一行


🌈行缓冲区


// 1.
#include <stdio.h>
int main()
{
     printf("hello Makefile!\n");
     sleep(3);
     return 0;
}
// 2. 发现sleep的过程中,并没有打印。
#include <stdio.h>
#include <unistd.h>
int main()
{
     printf("hello Makefile!");
     sleep(3);
     return 0;
}


这意味着sleep先于printf执行吗?肯定不是❗


只是printf不带\n在向显示器打印时,数据不会立即刷新,而是会暂时保存在用户C语言级别的缓冲区中(c语言给我们提供的一块内存),显示器的刷新策略就是行刷新,遇到\n即把之前的字符串全部显示出来。


🥑那如果我们即不想换行,又想刷新咋办?可以调用这个函数来刷新显示器


fflush(stdout);


🌈进度条


思路:不换行,从左至右变长,走完再换行


#include<stdio.h>
#include<unistd.h>
#include<string.h>
#define NUM 102  
int main()
{
  char bar[NUM];
  memset(bar,0,sizeof(bar));
  const char *lable="|/-\\";//4
  int cut = 0;
  while(cut <= 100)
  {
  printf("[%-100s][%d%%] %c\r", bar, cut, lable[cut%4]);                                         
  fflush(stdout);
  usleep(200000);
  bar[cut++] = '#';
  }
    printf("\n");
    return 0;
}


🥑下面一一讲解一下小细节:


进度条[0 ~ 100]:不换行且能刷新,需要\r配合fflush库函数

sleep太慢了,我们设置成休眠usleep,单位是微秒

0a2653c851af460fa595bd959398a8f1.png

我们设置bar数组长度为102,因为字符串结束的\0我们也算上,然后用menset全部置为0


2d65d23f6d4748949b924e4057485923.png


[%-100]来打印百分比,然后预留100个字符的空间,并且是从左向右打印

label旋转光标,表示当前进度条处于工作状态,注意\为特殊字符需要转义\\

同样我们也给此进度条编写makefile,一步到位make


可以在测试代码时候,写之前就把makefile写好

ps:注意字体不能调节太小,亲身尽力过,代码代码没做结果是字体太大一行打不完自动换行了


🌍 七.git


🌈创建仓库和git clone


创建仓库这个不多说了

0a2653c851af460fa595bd959398a8f1.png

🥑创建本地的代码仓库


git clone [url]  url就是刚刚复制的仓库链接

2d65d23f6d4748949b924e4057485923.png


接下来是简单的三板斧


🌈git add


🔥

将代码放到本地的目录中


git add [文件名]


0a2653c851af460fa595bd959398a8f1.png


🌈git commit

🔥提交改动到本地


git commit -m "日志信息"


日志信息必须写,否则无法提交,且不能乱写,可以写修改了啥


2d65d23f6d4748949b924e4057485923.png


🌈git push

🔥同步到远端服务器上


git push

6de278e6d6694ce5bb08e7e842b7e74b.png


上传成功,嘿嘿还得多练习啊!


📢写在最后


能看到这里的都是棒棒哒🙌!

想必权限也算是Linux中重要🔥的部分了,如果认真看完以上部分,肯定有所收获。

接下来我还会继续写关于📚《gdb》等…

💯如有错误可以尽管指出💯

🥇想学吗?我教你啊🥇

🎉🎉觉得博主写的还不错的可以一键三连撒🎉🎉


相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
5天前
|
Ubuntu Linux Shell
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
(已成功解决)Linux环境报错—bash: wget: command not found;常见Linux发行版本,Linux中yum、rpm、apt-get、wget的区别;Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
119 68
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
|
2天前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
1月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
38 4
|
1月前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
108 3
|
1月前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
47 3
|
28天前
|
开发工具 git
git 常用命令
这些只是 Git 命令的一部分,Git 还有许多其他命令和选项,可根据具体需求进行深入学习和使用。熟练掌握这些命令能够帮助你更高效地管理代码版本和协作开发。
|
21天前
|
机器学习/深度学习 Shell 网络安全
【Git】Git 命令参考手册
Git 命令参考手册的扩展部分,包含了从基础操作到高级功能的全面讲解。
29 3
|
4月前
|
开发工具 git
【GIT 第二篇章】GIT常用命令
Git常用命令涵盖初始化、状态管理、提交、分支处理、远程操作等关键流程。`git init`启动本地仓库,`git clone`下载远程仓库。通过`git status`和`git diff`检查工作状态与差异。利用`git add`暂存文件,`git commit`保存更改。借助`git branch`、`git checkout`、`git merge`和`git rebase`管理分支。使用`git fetch`、`git pull`和`git push`同步远程仓库。通过`git reset`、`git revert`和`git checkout`实现版本回退。
76 0
|
1月前
|
缓存 Java Shell
[Git]入门及其常用命令
本文介绍了 Git 的基本概念和常用命令,包括配置、分支管理、日志查看、版本回退等。特别讲解了如何部分拉取代码、暂存代码、删除日志等特殊需求的操作。通过实例和图解,帮助读者更好地理解和使用 Git。文章强调了 Git 的细节和注意事项,适合初学者和有一定基础的开发者参考。
53 1
[Git]入门及其常用命令
|
2月前
|
开发工具 git
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
143 1
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令