[Linux系统编程]gdb调试及makefile管理

一.gdb

gdb工具用来调试代码,所调试的可执行文件必须以-g 形式编译。否则无调试所需的环境。

gdb调试时,b设置断点,info b查看所有断点。
run 可以执行程序,停止在第一个断点。
n/s操作可以执行下一段语句,n会跳过函数,s会进入函数内部,这里由于跳入了不同的函数,由于作用域的存在,只可以访问当前函数内存在的变量,因为每一个函数都会有自己的一段栈帧,可以使用bt命令,查看当前程序中存在的栈帧。可以使用frame切换栈帧。
在某作用域中的变量,可以通过p命令查看它的内容,通过display命令可以监测该变量,undisplay取消监测。

在这里插入图片描述

在这里插入图片描述
在使用p和ptype时,如果处于一个函数区间内,想要去查看另一个函数内的局部变量内容是不可行的,这要引入栈帧的概念:

栈帧
一个进程地址空间的栈区(Stack),由一个个函数的栈帧组成。

栈帧是随着函数调用而在stack上开辟的一片内存空间。用于存放函数调用时产生的局部变量临时值
当函数开始执行时,开辟栈帧,存放局部变量等信息,函数执行结束后,释放栈帧,局部变量随之释放。
这就解释了在某一个栈帧内部,只能查看它自身的变量信息,无法查看其他栈帧的变量信息。

如下图,该进程正在执行main函数和selectsort函数,共有两个栈帧。
在这里插入图片描述在gdb调试过程中:

使用bt来查看当前进程具有的全部栈帧
使用frame+栈帧号 实现切换栈帧

二.Makefile

Makefile本质上是一系列脚本命令的集合文件,可以用来管理项目。
在这里插入图片描述
记住一个规则,两个函数,三个自动变量
1.makefile规则
目标:依赖
(tab缩进) 命令
在这里插入图片描述
makefile文件默认以第一个目标为终极目标,但是可以使用ALL: 来指定终极目标。
为什么要用makefile管理?
若同时编译多个文件生成可执行程序,对于某个源文件,若其进行修改,则需要联通其它文件一起重新编译,这会有时间的开销,但是如果只重新编译要修改的文件,然后再与其它文件链接,就可以省去其他文件的二次编译。
所以可以使用makefile将步骤拆分,当有文件被修改时,makefile自动重新执行被修改的文件命令,就可以省去编译的一部分时间。
在这里插入图片描述
2.makefile两个函数
第一个函数: wildcard
src = $(wildcard *.#) 使用变量名接受 wildcard *.# 所返回的列表(代表当前目录下后缀名为#的所有文件)
第二个函数: patsubst
在这里插入图片描述
表示将src列表中的第一参数后缀名更改为第二参数后缀名
clean:
它默认不执行,只有在输入make clean命令时才执行,它没有依赖,只是命令。
命令:make clean
在执行前使用make clean -n可以查看当前会执行的命令,确保没有错误删除

在这里插入图片描述3.makefile的三个自动变量
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值