Linux环境基础开发工具使用(下)_开发工具rm-rf

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

readelf -S hello

注意:使用C99的标准通过gcc对程序进行编译:

gcc hello.c -o hello -std=c99

2. 开始使用

gdb binFile 退出: ctrl + dquit 调试命令:

  • list/l 行号:显示binFile源代码,从行号位置处开始显示,按回车之后接着上次的位置往下列,每次列10行。
    例如:l 0:从第0行开始显示,l main:显示main函数的代码
  • list/l 函数名:列出某个函数的源代码。
  • r或run:运行程序。
  • n 或 next:单条执行即逐过程进行执行。
  • s或step:进入函数调用,或者逐语句逐语句进行执行
  • break(b) 行号:在某一行设置断点
  • break 函数名:在某个函数开头设置断点
  • info break/info b :查看断点信息。
  • finish:执行到当前函数返回,然后挺下来等待命令
  • print§:打印表达式的值,通过表达式可以修改变量的值或者调用函数
  • p 变量:打印变量值。
  • set var:修改变量的值
  • continue(或c):从当前位置开始连续而非单步执行程序,即从一个断点跳转到另一个断点的位置处
  • run(或r):从开始连续而非单步执行程序
  • delete breakpoints:删除所有断点
  • delete breakpoints n:删除序号为n的断点

d 断点序号删除相应的断点。

  • disable breakpoints:禁用断点
  • enable breakpoints:启用断点
  • info(或i) breakpoints(b):参看当前设置了哪些断点

例如:info b查看当前设置了哪些断点

  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay 变量序号:取消对先前设置的那些变量的跟踪
  • until X行号:跳至X行
  • breaktrace(或bt):查看各级函数调用及参数
  • info(i) locals:查看当前栈帧局部变量的值
  • quit:退出gdb
  • bt:查看调用的堆栈

Linux项目自动化构建工具-make/Makefile

背景

  • 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力
  • 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的 规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂 的功能操作
  • makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编 译,极大的提高了软件开发的效率。
  • make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命 令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一 种在工程方面的编译方法。
  • make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

具体使用

makefile/Makefile:在当前路径下的一个普通文件。包含:

  1. 依赖关系
  2. 依赖方法

举例:

现有一个源文件,hello.c

依赖关系:

hello.c -> hello

clean

依赖方法:

gcc hello.c -o hello

rm -rf hello

Makefile图示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n4UKoLEq-1662781399303)(https://lijiaguo.oss-cn-qingdao.aliyuncs.com/typora%E5%9B%BE%E5%BA%8A202207312058254.png)]

使用方法:

make:执行gcc hello.c -o hello

make clean:执行rm -rf hello

问:为什么每次使用make指令只执行gcc hello.c -o hello?

答:因为它写在makefile的前面。默认只会形成第一个目标文件,执行该依赖关系的依赖方法。

.PHONY:Makefile语法格式中的一个关键字,伪目标,被.PHONY修饰的标签总是被执行的。

问:总是被执行是什么意思?

答:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rad0gL36-1662781399304)(https://lijiaguo.oss-cn-qingdao.aliyuncs.com/typora%E5%9B%BE%E5%BA%8A202208052131969.png)]

我们可以看到当我们第二次第三次执行make指令时会显示Test可执行文件已经是最新形成的可执行程序了。

假如我们用.PHONY来修饰hello
在这里插入图片描述
在这里插入图片描述

问:makefile是怎么识别我的exe/bin是新的还是旧的呢?

答:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VR36pWTx-1662781399305)(https://lijiaguo.oss-cn-qingdao.aliyuncs.com/typora%E5%9B%BE%E5%BA%8A202208052138970.png)]

文件 = 内容 + 属性

Access:读取或者进入的时间。

Modify:内容发生改变。

Change:属性发生改变。(例如:权限)

注意:属性的改变并非真正发生了改变,比如文件hello.c已经拥有了r权限,我们再执行指令chmod u+r这也算对权限进行改变。我们使用vim hello.c之后,hello.c的Modify时间就会发生改变。

注意:内容的改变必然会引起Change也会发生改变,因为内容的改变往往会改变文件的大小,而文件的大小属于文件的属性。

注意:有时候打开文件并不一定会引起Access时间的改变。只有当累计到一定次数之后才会发生改变。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B3sxwkV6-1662781399305)(https://lijiaguo.oss-cn-qingdao.aliyuncs.com/typora%E5%9B%BE%E5%BA%8A202208052237586.png)]

从上图可以看出:对比hello.c的时间和hello即可得知hello是否改变过,即根据对比源文件和可执行程序的最近修改时间,评估要不要重新生成。

问:如果我们有多个源文件,我们该如何使用makefile对文件进行编译呢?

答:以下面的例子为例:

test.c文件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CzvPQftz-1662781399306)(https://lijiaguo.oss-cn-qingdao.aliyuncs.com/typora%E5%9B%BE%E5%BA%8A202208060755910.png)]

test.h文件:

在这里插入图片描述

main.c文件:

在这里插入图片描述

makefile文件:

在这里插入图片描述

Linux第一个小程序-进度条

\r&&\n

  • 回车概念(\r):将光标回到当前行的最开始。如图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IkHBeBL7-1662781399309)(https://lijiaguo.oss-cn-qingdao.aliyuncs.com/typora%E5%9B%BE%E5%BA%8A202208061008945.png)]

  • 换行概念:从一行的某个位置换到下一行的同一个位置,新起一行。如图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A2gcHgK0-1662781399310)(https://lijiaguo.oss-cn-qingdao.aliyuncs.com/typora%E5%9B%BE%E5%BA%8A202208060943513.png)]

我们通常所使用的换行或者键盘中的回车,其实是回车+换行。

下面有两段程序:

程序一:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rnofzZ62-1662781399310)(https://lijiaguo.oss-cn-qingdao.aliyuncs.com/typora%E5%9B%BE%E5%BA%8A202208060924443.png)]

程序二:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-czeVWBNz-1662781399311)(https://lijiaguo.oss-cn-qingdao.aliyuncs.com/typora%E5%9B%BE%E5%BA%8A202208060924426.png)]

编译运行后,两段程序出现了不一样的现象:

程序一:先输出了hello world,然后在当前屏幕下停顿了2秒,然后程序退出。

程序二:先停顿了2秒,然后打印出了hello world,然后程序退出。

问:在程序二停顿2s的这段时间,hello world这些字符在哪呢?

答:是存在与缓冲区中。我们可以理解为是在一段内存空间中,一般的刷新策略为行刷新,即满一行即刷新,我们常用的\n的意思就是包括\n和之前的字符形成一行,此时满足了刷新策略,即刻对缓冲区中的字符进行输出。

当然,我们也可以使用fflush()函数强制对缓冲区进行刷新。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3zTm1BeM-1662781399311)(https://lijiaguo.oss-cn-qingdao.aliyuncs.com/typora%E5%9B%BE%E5%BA%8A202208060939914.png)]

进度条代码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7h0sTcbR-1662781399312)(https://lijiaguo.oss-cn-qingdao.aliyuncs.com/typora%E5%9B%BE%E5%BA%8A202208061329071.png)]

git

git是什么

git是一个版本控制器。

安装 git

sudo yum install -y git

将仓库克隆到本地

git clone Http网址

查看本地仓库和远端仓库文件的关系

git status

git三板斧

git add 文件名或者文件夹名  //*是当前目录下的所有文件   .是当前目录下未提交的文件

git commit -m ""    //添加已经被修改的文件到本地的仓库,”“内的是提交日志,-m选项就是为了提交提交日志



![](https://img-blog.csdnimg.cn/img_convert/9a8cb5f8c0ec69e6499adead0da6e95b.png)


最全的Linux教程,Linux从入门到精通

======================

1.  **linux从入门到精通(第2版)**

2.  **Linux系统移植**

3.  **Linux驱动开发入门与实战**

4.  **LINUX 系统移植 第2版**

5.  **Linux开源网络全栈详解 从DPDK到OpenFlow**



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/59742364bb1338737fe2d315a9e2ec54.png)



第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。



![华为18级工程师呕心沥血撰写3000页Linux学习笔记教程](https://img-blog.csdnimg.cn/img_convert/9d4aefb6a92edea27b825e59aa1f2c54.png)



**本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。**

> 需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618635766)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值