GCC和GDB
一句话概括:gcc用来编译C,gdb用来调试C。
-
GCC (GNU Compiler Collection)
GCC(GNU编译器套件)是一个由GNU项目开发的编译器系统,支持多种编程语言,如C、C++、Objective-C、Fortran、Ada和Go等。GCC是自由软件,遵循GNU通用公共许可证(GPL)。它最初是为GNU操作系统开发的,但现在几乎所有类Unix系统,包括Linux,都在使用GCC。
-
GDB (GNU Debugger)
GDB(GNU调试器)是一个由GNU项目开发的调试工具,用于调试程序的运行和排除错误。GDB支持多种编程语言,如C、C++、Fortran、Ada和Pascal等。它也遵循GNU通用公共许可证(GPL)。
MinGW-w64(Minimalist GNU for Windows, 64-bit)
是一个用于在Windows操作系统上开发和运行原生Windows应用程序的编译器套件。它是MinGW(Minimalist GNU for Windows)的扩展版本,支持64位系统,并增加了一些额外的功能。
组成部分
- GCC编译器:用于将源代码编译成可执行文件。
- binutils:包含链接器、汇编器等工具。
- 运行时库:提供标准C库、C++库和其他必要的运行时库。
- 头文件和链接库:用于支持Windows API的开发。
安装
MinGW-w64可以通过多种方式安装,如通过msys2、官方安装包或者其他包管理工具。
MinGW-w64 - for 32 and 64 bit Windows download | SourceForge.net可以直接使用这个网址去下载,但是我使用的Windows电脑,下载不了,所以我使用另一种方式下载,如果你可以下载,后续配置gcc和gdb都是相同的步骤,只是下载方式不一样。
以下是通过msys2安装MinGW-w64的步骤:
下载 MSYS2
MSYS2下载步骤根据官网来,记住下载的位置。
更新软件包数据库和基本系统:
- 打开 MSYS2 Shell(在开始菜单中找到 MSYS2 MinGW 64-bit)。
- 运行以下命令更新软件包数据库和基本系统:
pacman -Syu
安装 GCC 和 GDB
pacman -S mingw-w64-ucrt-x86_64-gccpacman -S mingw-w64-ucrt-x86_64-gdb
配置环境变量
-
打开系统属性:
- 按
Win + R
键,输入sysdm.cpl
并按 Enter。 - 或者直接搜索系统环境变量。
- 按
-
编辑环境变量:
- 在“系统属性”窗口中,点击“高级”选项卡,然后点击“环境变量”。
- 在“系统变量”部分,找到并选择
Path
,然后点击“编辑”。 - 点击“新建”,添加 MSYS2 的
bin
目录路径,例如:
C:\msys64\mingw64\bin
验证路径配置
-
打开命令提示符:
- 按
Win + R
键,输入cmd
并按 Enter。
- 按
-
检查 GCC 和 GDB 版本:
- 在命令提示符中输入以下命令,并按 Enter:如果路径配置正确,你应该会看到 GCC 和 GDB 的版本信息。
gcc --version
gdb --version
在 VS Code 中配置 GCC 和 GDB
安装 C/C++ 扩展
- 打开 VS Code。
- 点击左侧活动栏中的扩展图标(或按
Ctrl+Shift+X
)。 - 在搜索框中输入
C/C++
,选择由 Microsoft 提供的 C/C++ 扩展并安装。
1. 创建任务配置文件
-
打开 VS Code:
- 打开你的工作区或创建一个新的文件夹。
-
创建
tasks.json
文件:- 在 VS Code 中,打开命令面板(按
Ctrl+Shift+P
),输入Tasks: Configure Task
并选择它。 - 选择
Create tasks.json file from template
,然后选择Others
。
- 在 VS Code 中,打开命令面板(按
-
编辑
tasks.json
文件:- 在工作区根目录的
.vscode
文件夹中,编辑tasks.json
文件,添加以下内容:
- 在工作区根目录的
{"version": "2.0.0","tasks": [{"label": "Build C Program", // 任务标签,用于在 VS Code 中选择任务"type": "shell", // 任务类型,这里是 shell 命令"command": "gcc", // 要运行的命令,这里是 GCC 编译器"args": [ // 传递给命令的参数列表"-g", // 生成调试信息"${file}", // 要编译的源文件"-o", // 输出文件选项"${fileDirname}\\${fileBasenameNoExtension}.exe" // 输出可执行文件的路径和名称],"group": { // 任务分组"kind": "build", // 任务类型,这里是构建任务"isDefault": true // 是否是默认任务},"problemMatcher": ["$gcc"], // 用于解析 GCC 编译器输出的错误和警告"detail": "Generated task to build C program using gcc" // 任务的详细描述}]
}
2. 配置调试器
-
创建
launch.json
文件:- 在 VS Code 中,打开命令面板(按
Ctrl+Shift+P
),输入Debug: Open launch.json
并选择它。 - 如果没有
launch.json
文件,选择C++ (GDB/LLDB)
。
- 在 VS Code 中,打开命令面板(按
-
编辑
launch.json
文件:- 在
.vscode
文件夹中,编辑launch.json
文件,添加以下内容:
- 在
{"version": "0.2.0","configurations": [{"name": "Launch", // 调试配置的名称"type": "cppdbg", // 调试器类型(用于 C++ 调试)"request": "launch", // 调试请求类型,这里是启动程序"program": "${fileDirname}\\${fileBasenameNoExtension}.exe", // 要调试的程序路径"args": [], // 启动程序时的命令行参数"stopAtEntry": false, // 是否在程序入口处停下"cwd": "${workspaceFolder}", // 程序的工作目录"environment": [], // 环境变量"externalConsole": false, // 是否使用外部控制台运行程序"MIMode": "gdb", // 调试模式,这里是使用 GDB"setupCommands": [ // 调试器启动前执行的命令{"description": "Enable pretty-printing for gdb", // 命令描述"text": "-enable-pretty-printing", // 启用 GDB 的漂亮打印"ignoreFailures": true // 忽略失败}],"preLaunchTask": "Build C Program", // 调试前执行的任务,这里是编译程序"miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe", // GDB 调试器路径"logging": {"engineLogging": true // 启用引擎日志记录}}]
}
3. 检查代码
创建一个hello.c的文件,这里最容易出的错就是头文件找不到。#include <stdio.h>int main() {printf("Hello, World!\n");return 0;
}
常见问题解决
- 路径错误:确保路径使用双反斜杠
\\
或单斜杠/
。 - 环境变量:确保
Path
中包含C:/msys64/mingw64/bin
。 - 文件找不到的问题通常是由于 IntelliSense 未正确配置导致的,以下是解决办法
配置 IntelliSense
创建c_cpp_properties.json
- 打开 VS Code 并进入工作区。
- 打开命令面板(按
Ctrl+Shift+P
),输入C/C++: Edit Configurations (UI)
并选择它。 - 如果提示创建
c_cpp_properties.json
文件,选择Yes
。 - 在
.vscode
文件夹中找到c_cpp_properties.json
文件,添加或修改如下配置:
{"configurations": [{"name": "Win32", // 配置名称,可以在 VS Code 中选择这个配置"includePath": [ // 头文件搜索路径"${workspaceFolder}/**", // 当前工作区文件夹中的所有子文件夹"C:/msys64/mingw64/include", // MSYS2 MinGW 64 的头文件路径"C:/msys64/usr/include", // MSYS2 用户头文件路径"C:/msys64/mingw64/x86_64-w64-mingw32/include" // MSYS2 MinGW 64 特定的头文件路径],"defines": [ // 预定义的宏"_DEBUG", // 表示调试模式"UNICODE", // 使用 Unicode 字符集"_UNICODE" // 使用 Unicode 字符集],"windowsSdkVersion": "10.0.18362.0", // Windows SDK 版本"compilerPath": "C:/msys64/mingw64/bin/gcc.exe", // 编译器路径"cStandard": "c11", // C 语言标准版本"cppStandard": "c++17", // C++ 标准版本"intelliSenseMode": "windows-gcc-x64" // IntelliSense 模式,这里是 Windows 上的 GCC x64}],"version": 4 // 配置文件版本
}