ian-fisher-developer/vscode-cpp-dev-tools
GitHub: ian-fisher-developer/vscode-cpp-dev-tools
基于 Docker 容器化的 VSCode C++ 开发环境模板,预配置了代码静态分析、内存检测和变异测试等全套质量保障工具链。
Stars: 0 | Forks: 0
# VSCode C++ 开发工具
一个面向 Linux 的 VSCode C++ 开发环境,配备了丰富的
注重质量的工具。
## 简介
VSCode 用户都知道该应用程序具有高度的可扩展性和灵活性。他们也
明白,要发现所有配置 VSCode 的工具和技巧并非易事。本仓库
提供了一个高度集成的 VSCode 环境,专用于在 Linux 上进行
注重质量的 C++ 开发。
一个 C++ 统计累加器类有助于展示该环境的特性。该类类似于
Boost 的统计累加器,但无需依赖 Boost。代码本身并不是本仓库的
重点。它的作用是演示将 VSCode 打造为功能丰富的 C++ IDE 所需的
大量额外配置。这些大量的额外配置才是本仓库的核心所在。它可以
作为新的 VSCode C++ 项目的模板。
使用其他 IDE,甚至是命令行进行开发的用户,可能会对本项目中的
某些部分感兴趣。例如,用于变异测试和代码 sanitizers 的自定义构建
任务是由脚本驱动的,这些脚本可以轻松移植到其他 C++ 开发环境中。
请按照下面的分步说明试用该环境。

## 使用环境
这些说明假定您在 Linux 上工作,并且已经安装了 VSCode、git、docker.io
和 docker-compose。此外,还假定您拥有一个 GitHub 账户并注册了 SSH 密钥,以便您可以克隆此仓库并在 VSCode 中打开它。
```
git clone git@github.com:ian-fisher-developer/vscode-cpp-dev-tools.git
cd vscode-cpp-dev-tools
code .
```
### 在容器中重新打开
该环境使用了 VSCode 的 DevContainer 功能。从 `View` 菜单中选择
`Command Palette`,然后搜索 `Reopen in Container` 命令。请注意,
仅首次使用时,VSCode 构建 Docker 镜像可能需要一些时间。请检查您是否
已正确进入 DevContainer 环境:
- 左下角的远程窗口指示器应亮起蓝色并
显示“Dev Container: STATS”
- 左侧的扩展垂直列表中应包含该环境
指定的额外项目,例如 GitLens 和 CMake Tools
- 底部的状态栏应显示多个扩展控件,
尤其是针对 CMake 的控件。
### 开始工作
当 DevContainer 会话准备就绪后,请按照以下步骤体验该环境的 C++ 开发功能。
- **配置构建**
CMake Tools 扩展在 VSCode 状态栏中提供了一个构建套件选择器。
选择 GCC 11.4.0。该扩展会将 CMake 的配置步骤运行到
build/build-vscode-cmake-tools 目录中。
- **构建所有目标并使用测试资源管理器**
选择 `all` 构建目标(在状态栏选择器中)。
注意一个陷阱...状态栏可能同时具有 `default build target` 和 `default launch target` 选择器。它们很容易混淆。在此,我们要设置的是构建目标。
按下构建按钮以创建库、单元测试程序和示例程序。打开测试资源管理器侧边栏以查看并运行单元测试。
测试资源管理器提供了运行所有测试、测试子组或单个测试的控件。当通过其 Continuous Run(持续运行)功能重新构建测试程序时,它可以自动重新运行所有/子组/单个测试。请注意,在上面的屏幕截图中,测试资源管理器被移到了 VSCode 右侧的次要侧边栏。
- **试用代码编辑器**
从文件资源管理器中打开 src/lib/StatisticsAccumulator.cpp。
代码编辑器为当前行提供了 git blame 功能。将鼠标悬停在简短的
内联描述上,即可弹出更详细的信息。
注意 linter(clang-tidy)的“波浪线”建议。将鼠标悬停在故意错误命名的变量 'dVal' 上,可获取更多信息以及针对违反项目代码命名约定的“fixit”修复方案。
来自 LLVM 项目的 clangd 扩展提供了完整的 C++ 代码模型,
从而实现了许多代码编辑辅助功能,例如代码补全选项。请注意,
VSCode 倾向于默认安装 GitHub Copilot。AI 的非确定性内联建议
可能会造成干扰。Copilot 的菜单(位于状态栏右下角)提供了切换开关,
您可以将其关闭,以便回归到来自代码模型的准确信息。
Ctrl-S 会根据项目标准自动格式化 C++ 和 CMake 文件。
- **检查代码覆盖率**
从 `all` 切换到 `statistics_coverage_report` 目标并进行构建。
从编辑器的右键上下文菜单中选择 Coverage Gutters: Preview Coverage Report 以浏览 [HTML 报告][1]。
从编辑器的右键上下文菜单中选择 Coverage Gutters: Watch,以在 C++ 代码编辑器中通过行号旁边的
彩色条形式添加覆盖率注释。
- **测试测试用例**
自定义构建任务为项目提供了[变异测试][2]功能,有助于
发现测试中的漏洞,即使代码覆盖率全部显示为绿色也是如此。
从 VSCode 的 `Terminal` 菜单中选择 `Run Build Task`,通过
应用无差异过滤器来创建[完整的变异测试报告][3]。
- **检查内存泄漏**
自定义构建任务在 valgrind 下运行单元测试程序,并将结果
记录到一份 [valgrind 报告][4] 中。
从 VSCode 的 `Terminal` 菜单中选择 `Run Build Task` 以执行该任务。
- **使用代码 sanitizers**
自定义构建任务使用编译器的 sanitize 标志创建了一份 sanitizer 测试报告。它提供了
address sanitizer 和 undefined-behavior sanitizer 的选项。
从 VSCode 的 `Terminal` 菜单中选择 `Run Build Task` 以执行该任务。
创建一份 [address sanitizer][5] 报告和一份 [undefined-behavior sanitizer][6]
报告。它会使用相应的 sanitizer 标志构建项目的
代码,然后运行单元测试程序。如果
发现任何问题,插桩后的代码会将其写入日志文件中。
标签:Bash脚本, Boost 替代, C++, C++ 最佳实践, C++ 统计累积器, DevContainer, Docker, SamuraiWTF, VSCode, VSCode 扩展, 云安全监控, 代码 sanitizer, 变异测试, 威胁情报, 安全防御评估, 容器化开发, 工具链, 开发环境, 开发者工具, 搜索语句(dork), 教程, 数据擦除, 模板, 编译器, 脚本自动化, 请求拦截, 质量保证, 跨平台开发, 远程开发, 集成开发环境, 静态分析