Z
ZHANK
编程在线教程C 语言教程开发工具:Makefile 与 gdb 调试
入门基础

开发工具:Makefile 与 gdb 调试

Makefile 自动化构建、gdb 断点调试/单步/查看变量、VS Code 调试配置

开发工具:Makefile 与 gdb 调试

写 C 程序不光要会写代码,还要会用工具:Makefile 让编译自动化,gdb 让你看程序运行时内部发生了什么。

学完本章你将: 掌握 Makefile 基础、gdb 断点/单步/查看变量、VS Code 调试配置。


Makefile —— 告别手敲 gcc

最简单的 Makefile

makefile
# Makefile
hello: hello.c
	gcc hello.c -o hello

clean:
	rm -f hello
bash
make           # 编译
make clean     # 清理

多文件项目的 Makefile

makefile
CC = gcc
CFLAGS = -Wall -Wextra -std=c17 -O2

program: main.o utils.o
	$(CC) $(CFLAGS) main.o utils.o -o program

main.o: main.c utils.h
	$(CC) $(CFLAGS) -c main.c

utils.o: utils.c utils.h
	$(CC) $(CFLAGS) -c utils.c

clean:
	rm -f *.o program

💡 Makefile 的核心价值:只重新编译修改过的文件,项目越大越省时间。


gdb 调试 —— 程序的"时光机"

编译时必须加 `-g`

bash
gcc -g hello.c -o hello   # -g 包含调试信息
gdb ./hello

常用 gdb 命令

gdb
break main          # 在 main 函数设断点
break hello.c:10    # 在第 10 行设断点
run                 # 开始运行
next                # 单步(不进入函数)
step                # 单步(进入函数)
continue            # 继续运行到下个断点
print x             # 查看变量 x 的值
backtrace           # 查看调用栈
quit                # 退出

调试示例

bash
$ gdb ./hello
(gdb) break main
(gdb) run
# 程序停在 main 第一行
(gdb) next
(gdb) print x
$1 = 42
(gdb) continue

VS Code 调试配置

.vscode/launch.json 关键配置:

json
{
    "configurations": [{
        "name": "C Debug",
        "type": "cppdbg",
        "request": "launch",
        "program": "${workspaceFolder}/hello",
        "stopAtEntry": false,
        "cwd": "${workspaceFolder}",
        "externalConsole": false,
        "MIMode": "gdb"
    }]
}

F5 启动调试,在行号左边点击设断点,左侧面板查看变量值——和 IDE 体验一致。

⚠️ 调试需要以 -g 选项编译。发布版本应去掉 -g 以减小文件体积。