既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
哈喽大家好,我是鹿九丸
\color{red}{鹿九丸}
鹿九丸,今天给大家带来的是Linux环境基础开发工具使用(下)。
如果大家在看我的博客的过程中或者学习的过程中以及在学习方向上有什么问题或者想跟我交流的话可以加我的企鹅号:2361038962
\color{red}{2361038962}
2361038962,或者寄邮件到相应的邮箱里:
2361038962
@
q
q
.
c
o
m
\color{red}{2361038962@qq.com}
2361038962@qq.com,我会尽量帮大家进行解答!
Linux调试器-gdb使用
1. 背景
程序的发布方式有两种,debug模式和release模式
Linux gcc/g++出来的二进制程序,默认是release模式
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
例如:
gcc hello.c -o hello -g
,此时形成的hello中就包含着各种调试信息,通过下面的命令可以对调试信息进行查看:
readelf -S hello
注意:使用C99的标准通过gcc对程序进行编译:
gcc hello.c -o hello -std=c99
2. 开始使用
gdb binFile
退出: ctrl + d
或 quit
调试命令:
- 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:在当前路径下的一个普通文件。包含:
- 依赖关系
- 依赖方法
举例:
现有一个源文件,hello.c
依赖关系:
hello.c -> hello
clean
依赖方法:
gcc hello.c -o hello
rm -rf hello
Makefile图示:
使用方法:
make
:执行gcc hello.c -o hello
make clean
:执行rm -rf hello
问:为什么每次使用make指令只执行
gcc hello.c -o hello
?答:因为它写在makefile的前面。默认只会形成第一个目标文件,执行该依赖关系的依赖方法。
.PHONY
:Makefile语法格式中的一个关键字,伪目标,被.PHONY修饰的标签总是被执行的。问:总是被执行是什么意思?
答:
我们可以看到当我们第二次第三次执行make指令时会显示Test可执行文件已经是最新形成的可执行程序了。
假如我们用
.PHONY
来修饰hello
问:makefile是怎么识别我的exe/bin是新的还是旧的呢?
答:
文件 = 内容 + 属性
Access:读取或者进入的时间。
Modify:内容发生改变。
Change:属性发生改变。(例如:权限)
注意:属性的改变并非真正发生了改变,比如文件hello.c已经拥有了r权限,我们再执行指令
chmod u+r
这也算对权限进行改变。我们使用vim hello.c
之后,hello.c
的Modify时间就会发生改变。注意:内容的改变必然会引起Change也会发生改变,因为内容的改变往往会改变文件的大小,而文件的大小属于文件的属性。
注意:有时候打开文件并不一定会引起Access时间的改变。只有当累计到一定次数之后才会发生改变。
从上图可以看出:对比hello.c的时间和hello即可得知hello是否改变过,即根据对比源文件和可执行程序的最近修改时间,评估要不要重新生成。
问:如果我们有多个源文件,我们该如何使用makefile对文件进行编译呢?
答:以下面的例子为例:
test.c
文件:
test.h
文件:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-T6aTlM8c-1715584532919)]
[外链图片转存中…(img-qURgOdYK-1715584532919)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!