linux系统编程1-gdb调试工具和makefile项目管理

一、gdb调试工具

gdb发现逻辑错误,gcc发现语法错误

-g:使用该参数编译可以执行文件,得到调试表。
gcc -g tst.c -o tst

在这里插入图片描述
启动gdb
在这里插入图片描述
在这里插入图片描述

列出源码
在这里插入图片描述
按l是继续列出
在这里插入图片描述
设置断点 b 加行号
在这里插入图片描述
设置完断点运行程序run
在这里插入图片描述
n/next: 下一条指令(遇到函数会越过函数)
s/step: 下一条指令(遇到函数会进入函数)
两者的区别在碰到函数时会有不同
但是像rand()系统函数无法使用s只能使用n,s无法进入系统函数里面,这时候只能使用n进入下一步或者使用until 加上行号直接蹦到对应行,或者使用finish结束这个局部函数的调用
在这里插入图片描述
在这里插入图片描述
finish跳出局部函数
在这里插入图片描述
continue跳到下一个断点如果没有后续断点直接运行结束
在这里插入图片描述
finish和continue的区别
在这里插入图片描述

p查看变量的值
在这里插入图片描述
条件断点
在这里插入图片描述

向main函数传递参数

一般的做法
在这里插入图片描述
在这里插入图片描述
使用gdb传入参数有两种方式,一种是先设置再开始,另一种是run加参数
在这里插入图片描述
也可以使用run加参数
在这里插入图片描述
使用info b查看断点位置清单
在这里插入图片描述
ptype:查看变量类型
在这里插入图片描述

栈帧
在这里插入图片描述
有时候会遇到当调试进入一个局部函数后,我需要看外面
这时候
用bt列出当前程序正存活着的栈帧。
frame加编号 切换栈帧。
在这里插入图片描述
添加监视,不用每次都查看,使用display命令
在这里插入图片描述
使用undisplay加变量的编号取消跟踪
在这里插入图片描述

二、gdb调试工具总结

gdb发现逻辑错误,gcc发现语法错误
1、基本用法
调试前准备 加上-g得到调试表 例如gcc -g tst.c -o tst
开始调试gdb ./a.out
list: list 1 列出源码。根据源码指定 行号设置断点。
b: b 20 在20行位置设置断点。
run/r: 运行程序
n/next: 下一条指令(遇到函数会越过函数)
s/step: 下一条指令(遇到函数会进入函数) 两者的区别在有函数时会有不同,是已经执行了,但是像rand()系统函数只能使用n,这个使用s是无法进入函数,只能用n进行下一步
p/print:p i 查看变量的值。
continue:继续执行断点后续指令。 回跳到下一个断点,如果没有下一个断点会直接运行完剩下代码
finish:结束当前函数调用。
quit:退出gdb调试。
2、设置main函数命令行参数

set args 后面接参数,然后再开始运行
run 后面接参数

3、栈帧
bt:列出当前程序正存活着的栈帧。
frame: 根据栈帧编号,切换栈帧。
4、其他命令
info b: 查看断点信息表
ptype:查看变量类型。
display:设置跟踪变量
undisplay:取消设置跟踪变量。 使用跟踪变量的编号。
5、开始运行
run和start都可以作为开始
前者蹦到第一个断点处,后者是到程序的开始处
6、结束运行
quit

三、makefile

makefile文章

一个规则

		目标:依赖条件
		(一个tab缩进)命令

		1. 目标的时间必须晚于依赖条件的时间,否则,更新目标

		2. 依赖条件如果不存在,找寻新的规则去产生依赖条件。
		
		ALL:指定 makefile 的终极目标。

两个函数

src = $(wildcard ./*.c): 匹配当前工作目录下的所有.c 文件。将文件名组成列表,赋值给变量 src。  
	src = add.c sub.c div1.c 
obj = $(patsubst %.c, %.o, $(src)): 将参数3中,包含参数1的部分,替换为参数2。 
	$(src)是用的前面的add.c sub.c div1.c ,然后将.c都改成.o,也就是下面这样
	obj = add.o sub.o div1.o
	

用法
在这里插入图片描述
clear函数
接上面的内容,删除obj代表的那些和a.out
在这里插入图片描述
执行时make clean,但在执行前先加个参数模拟执行,确认无误后再执行make clean
在这里插入图片描述
三个自动变量:

		$@: 在规则的命令中,表示规则中的目标。

		$^: 在规则的命令中,表示所有依赖条件。

		$<: 在规则的命令中,表示第一个依赖条件。如果将该变量应用在模式规则中,它可将依赖条件列表中的依赖依次取出,套用模式规则。

在这里插入图片描述
模式规则:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贪睡的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值