核心要点:Makefile + gdb
一、Makefile
-
作用
- 提高编译效率:仅重新编译修改过的文件(基于时间戳判断)。
- 多文件项目联合编译(如
main.c
、student.c
、teacher.c
)。
-
基本结构
- 文件名:
Makefile
或makefile
(后者优先级更高)。 - 规则格式:
makefile
目标: 依赖
shell指令(需以 Tab 缩进)
- 文件名:
-
分步编译
- 汇编:
gcc -c *.c -o *.o
- 链接:
gcc *.o -o 可执行文件
- 执行:
./可执行文件
- 汇编:
-
变量与赋值
- 定义与引用:
变量 = 值
,引用为$(变量)
。 - 赋值方式:
=
:递归赋值(最终取值)。:=
:立即赋值。+=
:追加赋值(空格分隔)。?=
:条件赋值(未定义时赋值)。
- 定义与引用:
-
特殊变量
$@
:目标文件名。$^
:所有依赖文件。$<
:第一个依赖文件。
-
内置函数
wildcard
:查找文件,如$(wildcard *.c)
。patsubst
:模式替换,如$(patsubst %.c,%.o,*.c)
。
-
伪目标
- 声明:
.PHONY: 目标
,避免与同名文件冲突。
- 声明:
二、gdb
-
核心功能
- 启动程序、设置断点、查看运行状态、修改变量。
-
调试步骤
- 生成调试文件:
gcc -g *.c -o 可执行文件
(必须加-g
)。 - 启动调试:
gdb 可执行文件
。
- 生成调试文件:
-
常用命令
命令 功能 b 函数名/行号
设置断点 run
启动程序 bt
查看堆栈 print 变量
打印变量值 c
继续执行 next
单步执行(跳过函数) step
单步执行(进入函数) info b
查看断点信息 d 断点编号
删除断点 quit
退出 gdb -
调试 core 文件
- 生成 core 文件:
- 确保权限:
ulimit -c unlimited
。 - 崩溃后生成
core
文件。
- 确保权限:
- 调试命令:
gdb 可执行文件 core
。
- 生成 core 文件:
-
调试正在运行的程序
- 查看进程号:
ps -ajx | grep 程序名
。 - 附加调试:
gdb -p 进程号
。
- 查看进程号:
注意事项
- Makefile:依赖关系需明确,避免冗余编译。
- gdb:调试前需确保编译时添加
-g
选项,否则无法获取调试信息。 - core 文件:若未生成,检查系统配置(如
/proc/sys/kernel/core_pattern
)。
思考 18 秒