文章目录
- [`**` 意思就是:](#
**意思就是:) - 一、gcc
- 超通俗比喻
- [gcc 具体干 3 件事](#gcc 具体干 3 件事)
- 你平时敲的命令是什么意思?
- [没有 gcc 会怎样?](#没有 gcc 会怎样?)
- 总结(最关键)
- 二、**gdb(调试器)**
- [**GDB 到底是啥?和 GCC 是什么关系?**](#GDB 到底是啥?和 GCC 是什么关系?)
- [一句话讲清 GDB](#一句话讲清 GDB)
- 用生活比喻最清楚
- [GCC 和 GDB 的关系(黄金搭档)](#GCC 和 GDB 的关系(黄金搭档))
- 举个超级简单的例子你就懂
-
- [直接运行(只用 GCC)](#直接运行(只用 GCC))
- [用 GDB 调试](#用 GDB 调试)
- [GDB 最常用的 4 个功能(你必须知道)](#GDB 最常用的 4 个功能(你必须知道))
- [你在 VS Code 里看到的那一大段东西](#你在 VS Code 里看到的那一大段东西)
- 最终总结(超级好记)
- [三、**怎么在 VS Code 里用 GDB 断点调试?(超级简单,30 秒学会)**](#三、怎么在 VS Code 里用 GDB 断点调试?(超级简单,30 秒学会))
- [VS Code GDB 断点调试 超傻瓜教程(一看就会)](#VS Code GDB 断点调试 超傻瓜教程(一看就会))
-
- [1. 编译必须加 -g(最重要!)](#1. 编译必须加 -g(最重要!))
- [2. VS Code 打断点](#2. VS Code 打断点)
- [3. 开始调试](#3. 开始调试)
- [4. 调试面板 4 个按钮(背下来就行)](#4. 调试面板 4 个按钮(背下来就行))
- [5. 看变量值](#5. 看变量值)
- [GCC ↔ GDB 关系一句话终极版](#GCC ↔ GDB 关系一句话终极版)
- 你刚才那段日志翻译
C:\mingw64\include\c++\15.2.0**
这个后面的**啥意思
** 意思就是:
包含当前文件夹 + 所有子文件夹
(递归包含、全部包含、无限层级包含)
#举个超级简单的例子
你有这个路径:
C:\mingw64\include\c++\15.2.0\
里面有:
15.2.0/
├─ iostream
├─ vector
├─ algorithm
└─ bits/
└─ stdc++.h
-
如果只写
15.2.0只会找直接放在里面 的文件:
iostream、vector... -
如果写
15.2.0\**会找:
- 直接文件
- bits 文件夹里的所有文件
- 所有子文件夹、孙子文件夹......全部一起找
用一句话总结
` = 全部、所有、递归、连子子孙孙文件夹都算上**
你在哪里会看到它?
通常在这两个地方:
- VS Code 的 include 路径配置
- Makefile 里的头文件搜索路径
作用:
让编译器能找到所有 C++ 标准库头文件
比如 #include <iostream>、#include <vector>
超级好记版
*= 所有文件**= 所有文件 + 所有子文件夹
一、gcc
一句话核心
gcc = 把你写的 C 语言代码,翻译成电脑能看懂的程序(exe)
你写的代码是人看的,电脑看不懂。
gcc 就是中间的翻译官 + 生成器。
超通俗比喻
你写的代码:
c
printf("Hello");
这是中文。
电脑只懂:
01010100 11010011 ...
这是机器语言。
gcc 就是把中文 → 翻译成机器语言的工具。
gcc 具体干 3 件事
-
检查你代码有没有写错
少个分号、括号不匹配,它直接报错。
-
把代码编译成二进制文件
电脑只认识二进制,不认识你写的英文。
-
生成 exe 可运行文件
你双击就能跑的程序,就是 gcc 做出来的。
你平时敲的命令是什么意思?
bash
gcc main.c -o main
翻译成人话:
喂,gcc!把 main.c 这个代码,编译成 main.exe 这个可执行程序!
没有 gcc 会怎样?
你写的代码永远只是文本文件 ,
不能运行、不能生成程序、电脑完全不认。
总结(最关键)
- 你写代码
- gcc 编译代码
- 生成 exe 运行
gcc 就是 C 语言的编译器 ,是写 C 语言必须有的工具。
你现在已经装好了,完全能用 ✅
二、gdb(调试器)
好!我继续用最简单、最白话的方式,给你讲清楚:
GDB 到底是啥?和 GCC 是什么关系?
你现在已经知道:
- GCC = 把代码变成 exe(翻译官)
- GDB = 帮你找代码里的 bug(侦探/医生)
一句话讲清 GDB
GDB 是调试器,专门用来:
找错、排查崩溃、看程序内部到底在干嘛。
用生活比喻最清楚
你写代码 → 相当于 做菜
GCC 编译 → 相当于 把菜做好端上桌
GDB 调试 → 相当于 菜坏了/不好吃,拆开看哪一步做错了
GCC 和 GDB 的关系(黄金搭档)
GCC:负责「生成程序」
- 把
.c变成.exe - 只管编译、运行
- 错了就报错,不告诉你错在哪
GDB:负责「检查程序」
- 让程序停下来
- 一行一行看执行过程
- 看变量值、看哪里崩溃
- 精准找到 bug 位置
举个超级简单的例子你就懂
你写代码:
c
int a = 10;
int b = 0;
int c = a / b; // 这里会崩溃!除以0
直接运行(只用 GCC)
程序直接闪退/崩溃
你根本不知道为什么!
用 GDB 调试
它会告诉你:
- 程序停在第几行
- 是因为 除以 0 了
- 变量 b 现在的值是 0
直接定位错误!
GDB 最常用的 4 个功能(你必须知道)
-
断点(Breakpoint)
让程序运行到某一行自动停下来
你就能看里面发生了什么
-
单步执行(Step)
一行一行跑代码
像看慢动作一样
-
查看变量
看
a等于几?b等于几? -
找到崩溃位置
程序崩了,直接告诉你哪行炸的
你在 VS Code 里看到的那一大段东西
就是 GDB 在工作
- 程序停下来了
- 加载系统库
- 准备让你检查代码
不是报错!是调试功能正常!
最终总结(超级好记)
- GCC = 编译 → 生成 exe
- GDB = 调试 → 找 bug
- 写代码必须用 GCC
- 代码出错必须用 GDB
它们俩就是 C 语言的 左膀右臂 ✅
你现在的环境:
✅ GCC 正常
✅ GDB 正常
✅ VS Code 调试正常
✅ 全套 C 语言开发环境完美
三、怎么在 VS Code 里用 GDB 断点调试?(超级简单,30 秒学会)
VS Code GDB 断点调试 超傻瓜教程(一看就会)
结合你WinLibs+MinGW环境,完全通用
1. 编译必须加 -g(最重要!)
gcc 默认编译出来不能调试
你要用这条命令编译:
bash
gcc main.c -o main.exe -g
-g = 给程序加上调试信息,GDB 才能看懂代码
2. VS Code 打断点
点击代码行号左边空白处
出现红色圆点 = 断点成功
程序运行到这里自动停下
3. 开始调试
直接按 F5
就是你刚才看到一大堆 GDB 日志的界面
4. 调试面板 4 个按钮(背下来就行)
- 继续 F5:跑到下一个断点
- 单步跳过 F10:一行一行往下走,不进入函数
- 单步进入 F11:进入函数内部细看
- 跳出 Shift+F11:退出当前函数
5. 看变量值
左边侧边栏「运行和调试」
自动显示:
- 所有变量当前是多少
- 程序走到第几行
GCC ↔ GDB 关系一句话终极版
- gcc -g :打包一个带病历的程序
- gdb:医生,看病、查bug、看运行全过程
- 不加
-g→ GDB 啥也看不到
你刚才那段日志翻译
Thread 1 hit Breakpoint 1
程序碰到你断点,停住了
exited normally 代码0
程序跑完,没bug,正常结束