【gcc编译以及Makefile与GDB调试】
From ChatGPT
Prompt:教我gcc编译以及Makefile与GDB调试
好的!我来一步步教你如何使用 GCC 编译、Makefile 进行管理,以及 GDB 调试 C/C++ 程序。
1. 使用 GCC 编译 C/C++ 代码
1.1 编译 C 代码
假设有一个 C 语言程序 main.c
:
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
编译命令:
gcc main.c -o main
运行:
./main
1.2 编译 C++ 代码
如果是 C++ 代码 main.cpp
:
#include <iostream>
int main() {
std::cout << "Hello, C++!" << std::endl;
return 0;
}
编译:
g++ main.cpp -o main
运行:
./main
1.3 启用调试信息
如果你需要用 GDB 调试,编译时加 -g
:
g++ -g main.cpp -o main
2. 使用 Makefile 进行编译管理
如果你的项目有多个源文件,每次编译手动输入 g++
会很麻烦,所以可以使用 Makefile 自动化编译。
2.1 例子
假设你的项目结构如下:
project/
│── src/
│ ├── main.cpp
│ ├── add.cpp
│ ├── add.h
│── Makefile
文件 add.h
:
#ifndef ADD_H
#define ADD_H
int add(int a, int b);
#endif
文件 add.cpp
:
#include "add.h"
int add(int a, int b) {
return a + b;
}
文件 main.cpp
:
#include <iostream>
#include "add.h"
int main() {
std::cout << "3 + 4 = " << add(3, 4) << std::endl;
return 0;
}
2.2 Makefile
CXX = g++
CXXFLAGS = -Wall -g
TARGET = main
SRCS = src/main.cpp src/add.cpp
OBJS = $(SRCS:.cpp=.o)
$(TARGET): $(OBJS)
$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJS)
src/%.o: src/%.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
clean:
rm -f $(OBJS) $(TARGET)
2.3 使用 Make
在project目录下与运行
- 编译:
make
- 运行:
./main
- 清理:
make clean
3. 使用 GDB 进行调试
如果你的程序有 bug,需要用 GDB(GNU Debugger) 进行调试。
3.1 先编译带调试信息的程序
g++ -g main.cpp add.cpp -o main
3.2 启动 GDB
gdb ./main
3.3 常用调试命令
命令 | 作用 |
---|---|
run (r ) | 运行程序 |
break main (b main ) | 在 main 函数设置断点 |
break 10 (b 10 ) | 在第 10 行代码设置断点 |
next (n ) | 单步执行(不进入函数内部) |
step (s ) | 单步执行(进入函数内部) |
continue (c ) | 继续运行 |
print x (p x ) | 查看变量 x 的值 |
info locals | 查看当前作用域的所有变量 |
quit (q ) | 退出 GDB |
3.4 调试示例
启动 GDB:
gdb ./main
在 main.cpp
第 5 行设断点:
b main.cpp:5
运行程序:
r
单步执行:
n
查看变量值:
p a
p b
退出:
q
总结
- GCC/G++ 直接编译 C/C++ 程序
- Makefile 自动化管理编译流程
- GDB 进行调试,排查 bug
这样,你就可以用 GCC + Makefile + GDB 高效地开发 C/C++ 程序了!有问题可以随时问我 😃