如何使用 CLion 解决 7 大主要 C++ 痛点
在 C++ Foundation 开展的“2023 年度 C++ 开发者调查”中,社区确定了使用 C++ 时的一些主要痛点(请参阅调查摘要的第 11 页)。
如本文所述,CLion 可以通过多种方式帮助 C++ 开发者:
管理第三方库
使用 C++ 时最大的挑战是管理 C++ 应用程序依赖的第三方库:47% 的用户认为这是一个主要痛点。 与许多其他编程语言不同,C++ 没有标准的软件包管理器,并且使用了各种解决方案。 CLion 具有对 vcpkg 的内置支持,这是最流行的 C++ 软件包管理器之一。 您还可以将另一款流行的 C++ 软件包管理器 Conan 与 CLion 结合使用。 适用于 CLion 的 Conan 插件目前与最新版本的 CLion 不兼容。 修正正在进行中,但在此期间,您仍然可以将 Conan 与 CLion 一起使用,因为 Conan 会输出与 CLion 兼容的 CMake 文件。
对于 CMake 已知的第三方软件包,CLion 现在提供 find_package
的代码补全。
缩短构建时间
根据用户反馈,第二大挑战是构建时间,43% 的受访者认为这是一个主要痛点。 虽然 CLion 不包含编译器,而只是调用工具链中配置的编译器(例如 GCC 或 Clang),不能直接影响构建时间,但使用 CLion 的 CMake 分析功能也可以优化 CMake 执行步骤。 CMake 分析能够识别 CMake 配置期间最耗时的操作,并在必要时优化 CMake 脚本,有助于减少项目的总体构建时间。
搭建 CI 管道
根据调查,第三大主要痛点是从头开始搭建持续集成管道(自动化构建、测试等)。 CLion 为此提供了很多工具, 内置了对所有主流 C++ 测试框架(Google Test、Boost.Test、Catch2、Doctest、CTest)的支持。 包括测试的专属运行和调试配置、用于运行或调试测试/套件/固定例程和检查其状态的装订区域图标、专属测试运行程序,以及测试和固定例程类的代码补全。
此外,还有适用于 TeamCity 的 CLion 插件、JetBrains 自己的自动化构建管理和 CI 工具,以及用于其他持续集成解决方案的插件。
管理 CMake 项目
31% 的用户表示,其主要痛点是管理 CMake 项目。 CMake 是最流行的 C 和 C++ 跨平台构建系统。 CLion 捆绑了 CMake,并具有广泛的 CMake 集成,使 CMake 项目管理体验更为流畅。 CLion 搭载了一个强劲编辑器,这个编辑器具有完整的语法高亮显示、自动补全以及 CMake 脚本的快速文档;内置 CMake 调试器;针对添加配置、构建类型,创建 CMake 目标,在这些目标中添加或移除文件,以及重新加载 CMake 项目的内置 GUI 支持;CMake 预设和 CMake 配置文件支持;以及其他功能。
但 CMake 并不是 CLion 唯一支持的项目模型。 管理 Makefile 也是用户经常报告的一大痛点。 好消息是,CLion 还支持 Makefile 项目和 Makefile 语言,这大幅简化了 Makefile 的使用。
实时检查代码中的线程、内存和类型安全问题
用户报告的其他几个主要痛点与安全有关, 包括线程安全(竞争、死锁等)、内存安全(边界安全、释放后使用、内存泄漏等)和类型安全。 为了识别和修正这些常见问题,CLion 向开发者提供了多种静态和动态代码分析选项。 对于静态分析,CLion 提供了许多实用的代码检查、Clang-Tidy 集成以及内置数据流分析。
CLion 的数据流分析 (DFA) 可以静态识别许多未定义行为和潜在漏洞的来源,例如无限循环、无限递归、缺少 return 语句、悬空指针、可能无效的迭代器和越界内存访问。 DFA 可以在单个函数内局部运作,也可以在整个翻译单元上全局运作。 在以下示例中,局部 DFA 识别出一个可能因调用 vector::push_back: 而失效的迭代器:
在以下示例中,全局 DFA 通过已在另一个函数中删除的指针发出释放后写入警告:
对于动态分析,CLion 与 Valgrind 以及众多 Sanitizer 完全集成,例如 AdressSanitizer、LeakSanitizer、ThreadSanitizer、UndefinedBehaviourSanitizer 和 MemorySanitizer。 我们最近还增加了更好的多线程调试支持,用于跟踪并发问题,例如并行堆栈视图以及调试期间冻结和解冻个别线程的功能。
开发环境
用户报告的另一个痛点是从头开始搭建开发环境(编译器、构建系统等)的困难。 CLion 也可以为此提供帮助:如前文所述,CLion 已捆绑 CMake,但它还附有捆绑的调试器、Windows 上的捆绑 MinGW、通过专属 Docker 插件和 Docker 工具链实现的 Docker 支持,以及其他功能。 对于远程开发,CLion 支持 JetBrains Gateway,允许在远程主机上运行 CLion 并通过瘦客户端连接,以及搭建远程开发环境的各种其他方式。
将代码现代化
最后,将现有代码迁移到最新的语言标准对于 8% 的用户来说是主要痛点,对于 27% 的用户来说是次要痛点。 为了轻松地将现有代码迁移到更现代的 C++ 标准,CLion 直接在 IDE 中支持 Clang-Tidy 现代化检查。
本博文英文原作者: