Linux-调试器(gdb)、make&&makefile、git操作(图文并茂)

一、调试器(gdb)

我们在Windows操作系统对自己所写代码进行检查时,大多都有专门的平台(如:VS)对其进行调试,那么在Linux操作系统中,也有对应的调试器gdb。但是需要注意的是在Linux下调试程序,需要在编译的时候,将程序编译为debug版本。因为Linux操作系统下默认在编译时生成的是realse版本,若想生成debug,则在编译的时候需要增加-g的参数。

1. 调试可执行程序

  • gdb [可执行程序]:进入调试状态
  • l:查看源代码,若显示不全,则可再按下l键,即可显示未显示的部分
  • b [源文件中的行号]:打断点
  • delete [断点的序号] :去点断点
  • i b:查看断点信息(包括了断点序号)
  • disable [断点的序号]:使断点失效(断点本质上还是在的,只是程序调试时不会在此处停留)
  • enable [断点的符号]:使断点生效
  • r:使程序运行
  • s:逐语句执行
  • n:逐过程运行(和逐语句运行的区别是是否进入函数内部,逐过程是不进入的)
  • c:继续执行,遇到下一个断点时就会停止
  • p [变量名称]:打印变量的值(不仅仅局限于普通变量,还有指针变量,对象等等)
  • q:退出调试
  • bt:查看调用堆栈
  • f [堆栈序号]:跳转到某一个具体的堆栈
  • 在开始执行gdb命令后,按回车,可以执行上一条语句

2. 调试coredump文件

Linux在运行程序的过程中如果由于各种异常或者Bug导致程序直接退出,比如段错误(segmentation fault),就会在满足一定条件下产生一个coredump文件.通常coredump文件包含了程序运行时内存、寄存器状态、堆栈我指针、内存管理信息以及函数调用堆栈信息,本质上是在调试程序崩溃之后产生的一个内存镜像文件

配置coredump可以使用ulimit -c unlimited来打开coredump的开关,(ulimit -a是显示所有的)

采用gdb [可执行程序] [coredump文件]来对其进行查看

二、make&&makefile

  1. make是自动化的解释器,makefile是一个文件
  2. 通过make解释makefile文件,构建可执行程序
  3. makefile文件的规则:
  • 目标文件:需要生成的可执行程序或目标程序
  • 依赖对象:生成目标对象的时候所要依赖的文件
  • 编译命令:如何使用依赖对象生成目标对象
  1. makefile文件编写格式:

在这里插入图片描述

make解释makefile文件的原则

原则1:make解释器在解释makefile时,会对比依赖对象(源文件)和目标对象(可执行程序)的生成时间

  • 如果目标对象生成的时间距离较近,说明目标对象是最新的,不需要重新编译makefile文件
    (time - 目标对象生成时间) < (time - 依赖对象生成时间),则不编译
  • 如果依赖对象生成的时间距离现在比较近,说明依赖对象更改过,需要重新编译makefile文件
    即**(time - 目标对象的生成时间) > (time - 依赖对象生成时间)**,则重新编译

原则2:只为生成第一个目标对象而服务,一旦make解释生成了第一个目标对象,则停止解释,如下图:

makefile文件中写了两个目标对象a和main
在这里插入图片描述
而用make解释器解释时,只解释了第一个目标对象
在这里插入图片描述

怎么解决此类问题呢,我们来看原则3
原则3:make解释器在解释makefile时,为了生成第一个目标对象,也会判断第一个目标对象依赖的对象是否存在,如果不存在,则makefile会在后续语句中进行查找,如下图:

在makefile文件中用all作为目标对象,寻找依赖对象为a,main的存在,发现没有,则继续在后续语句中寻找
在这里插入图片描述
直接用make解释器进行解释,可发现两个对象都被解释
在这里插入图片描述

预定义变量和自定义变量

$^:依赖的所有对象
$@:目标对象
$符号相当于解引用符号,可以拿到变量中的内容
举个例子:

假设开始文件夹有a.c,b.c,d.c,main.c,test.c和makefile文件,如下图:
在这里插入图片描述
要求在makefile文件中一次生成对应的可执行程序文件test和main
代码如下图:
在这里插入图片描述
其中,$^和 $@就是预定义变量,CFLAGS和BIN1、BIN2是系统自定义文件
执行make解释后,会根据目标对象来寻找对应的依赖对象,从而生成对应的可执行程序

在这里插入图片描述

makefile清理
即在makefile中删除生成的目标对象
在makefile中使用clean: 语句
然后在外面直接调用make clean即可清除生成的目标对象,如下图:

在这里插入图片描述
在这里插入图片描述

git操作

  1. 克隆仓库
    git clone "url"
    其中url是你想要克隆仓库的地址(可以是github中的,也可以是码云中的)
  2. 上传
    ① 标记:告诉git工具需要管理哪些文件
    git add [FileName]
    ②提交到本地仓库
    git commit -m [提交日志]
    ③推送给远端仓库
    git push origin [分支名]
     注:如果是自己的仓库,分支名一般都为master
  3. 删除仓库当中的内容
    即删除本地仓库的内容 + 远端仓库内容
    git rm "FileName"
    然后重复步骤2中的②③步骤
  4. 从远端仓库下载源码
    git pull

注:上述步骤2,3,4一定要在自己的本地仓库运行(即自己电脑上存放git clone 下来文件的地方)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值