Linux开发工具-gdb与make/makefile

目录

1.gdb-调试器

1.1 背景知识

1.2 使用

2.make/makefile-自动化构建工具

2.1 什么是make/makefile

2.2 makefile


1.gdb-调试器

1.1 背景知识

对于程序的发布有两种,分别是debug模式和release模式,而 gcc 和 g++ 默认形成的可执行程序是release的,因此是无法进行调试的,所以我们在编写的时候要设置为debug的版本:

gcc 文件名称.c -o 文件名称 -debug -g

在编写命令的时候把-debug -g给带上,此时该程序是以debug方式发布的。

1.2 使用

开始:

[readelf -S 可执行程序名 -debug | grep -i debug]:读取关于debug段,从中去查看文件的调试信息。

[gdb 可执行程序名]:开始调试                [退出]:ctrl + d 或 quit调试命令

指令:

  • list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。
  • list/l 函数名:列出某个函数的源代码。
  • r或run:运行程序。
  • n 或 next:单条执行。
  • s或step:进入函数调用。
  •  break(b) 行号:在某一行设置断点。
  • break 函数名:在某个函数开头设置断点。
  • info break :查看断点信息。
  • finish:执行到当前函数返回,然后挺下来等待命令。
  • print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数。
  • p 变量:打印变量值。
  • set var:修改变量的值。
  • continue(或c):从当前位置开始连续而非单步执行程序。
  • run(或r):从开始连续而非单步执行程序。
  • delete breakpoints:删除所有断点。
  • delete breakpoints n:删除序号为n的断点。
  • disable breakpoints:禁用断点。
  • enable breakpoints:启用断点。
  • info(或i) breakpoints:参看当前设置了哪些断点。
  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值。
  • undisplay:取消对先前设置的那些变量的跟踪。
  • until X行号:跳至X行。
  • breaktrace(或bt):查看各级函数调用及参数。
  • info(i) locals:查看当前栈帧局部变量的值。
  • quit:退出gdb。

2.make/makefile-自动化构建工具

2.1 什么是make/makefile

make是一个命令,makefile是一个文件(文档),两个一搭配,就可以实现自动化的构建项目。

举一个场景:

假如我实现了一个项目,这个项目中有几百个文件,此时用gcc去编译那难道还去一行一行的去写gcc的命令吗?在这样的一个场景下就可以体现出make和makefile存在的价值是自动化的去构建项目。

此时对make/makefile的理解可以进一步补充:makefile是一个文档,里面定义了一系列的规则指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,它纪录了原始代码如何编译的详细信息。当makefile一旦写好,只需要一个make命令,此时整个工程完全自动编译,极大的提高了软件开发的效率。

2.2 makefile

编写Makefile其实就是完成:a.依赖关系 b.依赖方法。

举例1:

假如要对这个mytest的可执行文件进行清理可以这样

以这个例子为例,从依赖关系的角度入手,这个mytest的文件它依赖test.c,而gcc test.c -o mytest就是与之对应的依赖方法;而.PHONY修饰后面的clean,表示把clean这种目标文件设置为伪目标,伪目标的特性是,总是被执行的(总是会根据依赖关系,执行依赖方法),被修饰为伪目标的目标文件,它后面依赖关系列表可以是为空的(根据依赖方法去设置依赖关系)。

举例2:

补充:

现在有一个疑问,makefile是如何得知,我的可执行程序是最新的?

回答:是根据文件的最近修改时间来的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值