实用技巧 | 使用 CLion 解决 C++ 的 7 大痛点

原创
2023/10/09 10:24
阅读数 80

在 C++ Foundation 开展的“2023 年度 C++ 开发者调查”中,社区确定了使用 C++ 时的一些主要痛点(请参阅调查摘要的第 11 页)。

痛点

如本文所述,CLion 可以通过多种方式帮助 C++ 开发者,就让我们一一道来

  • 管理第三方库

  • 缩短构建时间

  • 搭建 CI 管道

  • 管理 CMake 项目

  • 实时检查代码中的线程、内存和类型安全问题

  • 从头开始搭建开发环境

  • 将代码现代化


管理第三方库

使用 C++ 时最大的挑战是管理 C++ 应用程序依赖的第三方库:47% 的用户认为这是一个主要痛点。与许多其他编程语言不同,C++ 没有标准的软件包管理器,并且使用了各种解决方案。CLion 具有对 vcpkg 的内置支持,这是最流行的 C++ 软件包管理器之一。您还可以将另一款流行的 C++ 软件包管理器 Conan 与 CLion 结合使用。适用于 CLion 的 Conan 插件目前与最新版本的 CLion 不兼容。修正正在进行中,但在此期间,您仍然可以将 Conan 与 CLion 一起使用,因为 Conan 会输出与 CLion 兼容的 CMake 文件。

对于 CMake 已知的第三方软件包,CLion 现在提供 find_package 的代码补全

增强 CMake 中的补全

缩短构建时间

根据用户反馈,第二大挑战是构建时间,43% 的受访者认为这是一个主要痛点。虽然 CLion 不包含编译器,而只是调用工具链中配置的编译器(例如 GCC 或 Clang),不能直接影响构建时间,但使用 CLion 的 CMake 分析功能也可以优化 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 调试器

但 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 并通过瘦客户端连接,以及搭建远程开发环境的各种其他方式。

Gateway

将代码现代化

最后,将现有代码迁移到最新的语言标准对于 8% 的用户来说是主要痛点,对于 27% 的用户来说是次要痛点。为了轻松地将现有代码迁移到更现代的 C++ 标准,CLion 直接在 IDE 中支持 Clang-Tidy 现代化检查。

将 C++ 代码现代化


本博文英文原作者:Anastasia Kazakova


直播预约 | JetBrains GameDev Day 2023


2023 年  10 月 13 日(星期五),JetBrains 将举办 GameDev Day 2023 活动,邀请来自不同领域的 11 位专家发表演讲、主持讨论,分享制作最佳游戏的专业技巧。活动将探讨游戏测试、CI/CD、Unity 的 DOTS 以及 Apple Vision Pro 开发等方面。

我们将在视频号、B站同步转播此活动,并提供同传双语字幕。欢迎准时收看!




CLion 相关阅读

关于 CLion

CLion 是用于 Windows、Linux 和 macOS 上 C 或 C++开发的智能 IDE。CLion 了解现代 C++ 标准并提供预处理程序支持。它还集成了 GDB/LDB 和一套单元测试框架。 

进一步了解 CLion

⏬ 戳「阅读原文」了解更多

本文分享自微信公众号 - JetBrains(JetBrainsChina)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部