Linux基础3-基础工具3(make,makefile,gdb详解)

上篇文章:Linux基础3-基础工具2(vim详解,gcc详解)-CSDN博客

本章重点:

1.自动化构建工具make,makefile

2.linux调试工具gdb

目录

[一. 自动化构建工具make,makefile](#一. 自动化构建工具make,makefile)

[1.1 make使用](#1.1 make使用)

[1.2 使用make注意点](#1.2 使用make注意点)

[a. make和文件时间属性之间关系](#a. make和文件时间属性之间关系)

[b. make默认只会执行第一条文件,然后停止](#b. make默认只会执行第一条文件,然后停止)

[c. makefile的推导规则(类似于栈结构,新进后出)](#c. makefile的推导规则(类似于栈结构,新进后出))

[二. gdb](#二. gdb)

[2.1 gdb调试和windows调试(vs2022)](#2.1 gdb调试和windows调试(vs2022))

[2.2 创建debug版本文件](#2.2 创建debug版本文件)

[2.3 gdb命令使用](#2.3 gdb命令使用)

[三. 下章重点](#三. 下章重点)

[3.1 git的使用](#3.1 git的使用)

[3.2 冯诺依曼计算机体系结构](#3.2 冯诺依曼计算机体系结构)


一. 自动化构建工具make,makefile

make是一个命令,makefile是一个文件,也可命名为Makefile

当我们创建好makefile后,输入make 即可完成相应的工作

如帮我们完成编译,清理等工作

1.1 make使用

1.1 创建makefile和代码文件

1.2 完成代码文件

1.3 完成makefile文件

.PHONY**(上图输入错了,不应该是.PHONE,而是PHONY)**

该关键字修饰的是伪目标(表示该目标总是可以被执行的)

1.2 使用make注意点

a. make和文件时间属性之间关系

当我们make一次之后,不删除文件再次使用make,会显示test是最新的

gcc是如何知道我们不需要再次编译呢?(这个跟文件的时间属性有关,gcc会比较源文件和可执行文件的modify时间,如果时间不一样,就能够再次make。)

如:

在我们学习指令的时候,使用stat可以显示文件的三种时间:文件时间

Access time(最后一次访问时间):

Linux老内核,访问,读取文件频率很高,这样会频繁更新Access time,导致效率低

Linux新内核,只有经过一定次数的访问才会进行修改Access time

Modify time(最后一次修改文件时间):

Change time(最后一次修改文件属性时间):

所以当我们touch一下源文件(修改文件属性,不修改内容),就能够再次make

但是被 .PHONY修饰的文件,不遵守上述时间规则

b. make默认只会执行第一条文件,然后停止

这就是为什么,编译文件test.c直接make就行,而使用clean需要make clean

c. makefile的推导规则(类似于栈结构,新进后出)

gcc,依赖关系表

mycode依赖mycode.o,但是没有mycode.o

所以去执行mycode.o的依赖关系和依赖方法

最终按照依赖关系列表先执行mycode.i的依赖关系和依赖方法

二. gdb

2.1 gdb调试和windows调试(vs2022)

两种调试的思路上是一摸一样的,但是gdb调试是通过命名行的方法进行的,这需要我们掌握gdb调试的各种操作

2.2 创建debug版本文件

gdb调试的时候,默认情况下是无法调试的。需要gcc编译时候加上 -g 生成debug文件才能调试

复制代码
gcc test.c -o test -g    //生成debug文件

debug版本:供程序员进行调试,增加调试信息

release版本:用户使用,不需要增加调试信息

在Linux中,gcc默认生成的版本是release版本,无法进行调试

举例:

为什么会存在debug和release两种版本呢?

程序员在开发软件的过程中需要进行调试,而用户不需要调试,用户只关心如何使用软件。

而且relese版本体积小于debug版本,也方便用户下载和存储

2.3 gdb命令使用

list l 查看代码(输入行号可以查看某一行代码,输入enter可以继续查看后续代码)

b + 行号 可以在这一行打断点

d + 行号 可以在这一行关闭断点

info + b 可以查看所有断点

r 调试运行(相当于shift+f5)

n 逐过程运行(f10)(遇到函数不会进入函数内部,而是直接运行完这条函数)

s 逐语句运行(f11)(遇到函数会进入函数内部)

c 由一个断点运行到下一个断点

finsh 直接运行到该函数运行完

bt 查看调用堆栈

p 变量 可以查看相应变量的值

display/undisplay 可以常显示/取消该变量

until + 行号 可以直接运行到这一行

三. 下章重点

3.1 git的使用

3.2 冯诺依曼计算机体系结构

相关推荐
姚永强1 天前
简单论坛搭建——运维方向模拟
运维
me8321 天前
【Linux】Jenkins连接云服务器Docker失败,全程排查。(注意)
linux·服务器·jenkins
cui_ruicheng1 天前
Linux基础开发工具(一):软件管理与 Vim 编辑器入门
linux·编辑器·vim
同聘云1 天前
阿里云国际站独立服务器有哪些优点?独立服务器和云服务器的区别
服务器·阿里云·云计算
jaycyj1 天前
Linux 高级命令
linux
冉佳驹1 天前
Linux ——— 网络开发核心知识与协议实现详解
linux·http·https·udp·json·tcp·端口号
HalvmånEver1 天前
MySQL数据库基础入门总结(从0到1)
linux·数据库·mysql
小猪咪piggy1 天前
【接口自动化】(2) pytest 测试框架
运维·自动化·pytest
Lugas Luo1 天前
Kernel 5.10 ATA 驱动分析与车载环境诊断
linux·嵌入式硬件
顶点多余1 天前
死锁+线程安全
linux·开发语言·c++·系统安全