# C-demo **Repository Path**: 6feel/c-demo ## Basic Information - **Project Name**: C-demo - **Description**: C语言案例库 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-12 - **Last Updated**: 2026-02-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # C 语言程序通用调试指南 本文档介绍如何在 macOS 环境下使用 VS Code 对 C 语言程序进行调试,涵盖自动化调试和命令行调试两种方式。 ## 1. 环境准备 - **编辑器**: VS Code - **必备插件**: - [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb): **macOS 用户强烈推荐**。相比微软官方插件,它对 macOS 自带的 `lldb` 调试器支持更好。 - C/C++ (Microsoft): 提供代码高亮和智能提示。 - **编译器**: GCC / Clang (macOS 通常自带) ## 2. VS Code 调试 (推荐) 本项目已配置好 `.vscode/launch.json` 和 `.vscode/tasks.json`,支持 **F5 一键调试**。 ### 调试步骤 1. **打开文件**: 在 VS Code 中打开源代码文件。 2. **设置断点**: 鼠标点击代码行号左侧的空白处,出现**红点**即为断点。 3. **启动调试**: - 按下键盘上的 **F5** 键。 - 或者点击左侧 "运行和调试" 图标 -> 点击绿色的 "播放" 按钮。 4. **自动流程**: - VS Code 会先自动运行 `make` 命令编译代码(由 `preLaunchTask` 配置)。 - 编译成功后,自动启动调试器并运行程序。 - 程序会在断点处暂停,你可以查看变量值、调用堆栈等。 ### 调试快捷键 - **F5**: 继续运行 (Continue) - 直到下一个断点或程序结束。 - **F10**: 单步跳过 (Step Over) - 运行当前行,不进入函数内部。 - **F11**: 单步进入 (Step Into) - 进入函数内部逐行调试。 - **Shift + F11**: 单步跳出 (Step Out) - 执行完当前函数并返回上一层。 - **Shift + F5**: 停止调试 (Stop)。 ### 如何调试新文件? 如果你添加了新的 C 文件(例如 `src/03_test.c`),需要做以下简单修改: 1. **修改 Makefile**: 确保新文件能被 `make` 编译生成到 `bin/` 目录。 2. **修改 launch.json**: 打开 `.vscode/launch.json`,将 `"program"` 字段修改为新文件的输出路径(例如 `"${workspaceFolder}/bin/03_test"`)。 --- ## 3. 命令行手动调试 (进阶) 如果你更喜欢使用终端,或者在没有 VS Code 的服务器上调试,可以使用 `lldb` (macOS 默认调试器)。 ### 3.1 编译代码 **必须**加上 `-g` 参数,告诉编译器生成调试信息。 ```bash # 语法: gcc -g -Wall -o <输出文件> <源文件> gcc -g -Wall -o bin/02_plus src/02_plus.c ``` ### 3.2 启动调试 ```bash lldb bin/02_plus ``` ### 3.3 常用调试命令 (lldb) 进入 `(lldb)` 交互界面后,可以使用以下命令: | 命令 | 缩写 | 作用 | 示例 | | :--- | :--- | :--- | :--- | | `breakpoint set` | `b` | 设置断点 | `b main` (在main函数停) 或 `b 10` (在第10行停) | | `run` | `r` | 开始运行程序 | `r` | | `next` | `n` | 下一步 (不进函数) | `n` | | `step` | `s` | 下一步 (进函数) | `s` | | `print` | `p` | 打印变量值 | `p a` (查看变量 a 的值) | | `continue` | `c` | 继续运行 | `c` (直到下一个断点) | | `quit` | `q` | 退出调试器 | `q` | ### 3.4 示例会话 ```bash (lldb) target create "bin/02_plus" Current executable set to 'bin/02_plus' (arm64). (lldb) b main Breakpoint 1: where = 02_plus`main + 24 at 02_plus.c:5:9, address = 0x0000000100003f48 (lldb) r Process 96234 launched: '/Users/.../bin/02_plus' (arm64) Process 96234 stopped * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 frame #0: 0x0000000100003f48 02_plus`main at 02_plus.c:5:9 2 3 int main() 4 { -> 5 int a = 0; 6 int b = 0; 7 (lldb) n (lldb) p a (int) $0 = 0 ```