2022.4.20 Linux基础6——makefile、make和gdb

7.make和makefile

7.1 make的安装

在这里插入图片描述

7.2 makefile和make命令的介绍

makefile文件:Linux上的项目工程管理工具,可以实现自动化编译。

后期一个项目工程里面的源文件可能不计其数,它还根据类型,功能,模块,将这些源文件分到好些目录里,makefile文件里面就可以定义一系列的规则来指定哪一些文件先需要进行编译,哪一些文件后编译,那些文件需要重新编译,甚至更加复杂的操作,makefile文件就像一个shell脚本一样,可以自动执行自定义好的一系列命令。
make:是一个命令,可以解释makefile文件中的指令
从另一个角度来说,一个人会不会写makefile,就说明他是否具备完成大型工程的能力。

7.3 makefile文件的规则和make的使用

例如:现在有三个文件main.c,max.c,add.c
在这里插入图片描述
通过gcc执行
在这里插入图片描述
但是如果有很多的源文件,或者说突然想修改其中几个源文件的数据,其他大部分的源文件是没有被修改的,这时如果按照上面的说法,没有修改过的文件还需要再编译一下,太费时费力。
这时我们就可以使用makefile文件,提高编译效率,通过make命令执行makefile文件,这时只会将修改过的文件或者依赖修改过的文件的文件,不受影响的文件不会重新编译。
makefile文件示例如下:
在这里插入图片描述
使用make命令根据makefile文件的规则生成对应的可执行文件:
在这里插入图片描述
现在修改main.c中的数据,则未受到影响的源文件不会重新编译,示例如下:
在这里插入图片描述
如果make想保持整洁,可以通过make clean
在这里插入图片描述

8. gdb调试

8.1 Debug版本和Release版本介绍

Debug版本叫做开发版本或者可调式版本,生成的可执行文件里面包含调试需要用到的信息;作为开发人员,最常用的就是Debug版本产生的可执行文件。
Release版本是发行版本,面向用户的,里面没有调试信息,所以体积会相较于Debug版本非常的小。
注意:gcc默认生成的是Release版本。

8.2 gcc生成Debug版本的可执行文件

Debug版本的生成:因为调试信息是在编译阶段加入到可重定向的目标文件(.o)中的,所以必须在编译阶段就让它添加调试信息进来。
第一种方式:首先gcc -c main.c -g(生成的中间文件main.o这时包含调试信息);然后再通过gcc -o main main.o(生成 了debug版本的可执行文件)
第二种方式:一步生成,gcc -o main main.c -g

8.3 通过gdb进入调试

首先需要将源文件编译,链接生成debug版本的可执行文件,然后通过“gdb debug版本的可执行名”,就可以进入到gdb调试模式。
示例如下:
在这里插入图片描述
执行起来:
在这里插入图片描述
执行起来后,发现输入end,不能正常结束循环,这时则可以进入到gdb模式去查看问题所在。
示例如下:(先生成debug版本的可执行文件)
在这里插入图片描述
其中一些命令含义如下:
l ——显示当前文件的源代码
list filename:num ——显示filename文件中第num行附近的的源代码
b 行号 ——给指定行添加断点
info break ——显示所有断点信息
delete 断点编号 ——删除对应断点
r (run)——启动程序
q ——退出调试
p buff ——临时打印数组所有元素的值
p val ——临时打印变量val的值
p &val ——临时打印变量val 的地址
p a+b ——临时打印表达式的值
*p parr@num ——通过指向数组的指针打印数组的元素值
display buff ——自动显示监视对象,操作格式和p一致
info display ——显示所有自动显示监视对象的信息
undisplay 编号 ——删除对应的自动显示监视对象
n (next) ——单步执行 逐过程(vs里面F10)
s ——进入到将被调用的函数中(逐语句 vs里面F11)
finish ——跳出函数(跳出 vs里面shift+ F11)
c(continue) ——继续执行,直到执行到下一个断点出
ptype val ——显示变量的数据类型
注意:gdb安装方式和gcc、g++类似

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值