CLion 2019.2 已经发布!增加了面向嵌入式开发者的新功能、实验性 MSVC 调试器、更新的 Unused Includes 检查、参数提示等
今年的第二个重大更新 CLion 2019.2 已经发布!
它为嵌入式开发者带来了诸多改进,并增加了更多调试功能,包括用于 Microsoft Visual C++ 工具链的实验性调试器。这还不是全部,还有一个完全重新设计的 Unused Includes 检查、编辑器中的功能增强、改进的性能等等。
要更新到此版本,请使用 Toolbox 应用、快照包(在 Ubuntu 上)、我们的网站或 2019.1 最新版本的补丁更新。
简而言之,下面是主要改进:
-
-
使用 GDB 服务器进行在线调试(On-Chip debugging)
-
ARM 设备的 Peripherals 视图
-
-
-
GDB 相关的功能增强
-
补全 GDB/LLDB 命令
-
即时检测待定、已解决和无效的行断点
-
用于 Microsoft Visual C++ 工具链的实验性调试器
-
Memory View 下的 Go to address 和 ASCII 视图
-
-
-
“Unused Includes”检查已回归,现在更加准确
-
更新后的 Clang-Tidy 为 CLion 带来了一系列新检查
-
添加了参数名提示,使代码更易于阅读
-
ClangFormat 配置文件中的代码辅助
-
嵌入式开发
不久以前,我们开始着力支持 CLion 中的嵌入式开发。此版本提供了广泛的在线调试功能和新的 Peripherals 选项卡。
使用 GDB 服务器进行在线调试(On-Chip debugging)
对于在线调试,您可以使用 v2019.1 中提供的 OpenOCD 调试器和配置。现在是时候使用更多调试器了!如果您的微控制器支持通过 GDB 服务器进行调试,现在可以在 CLion 中执行。
这意味着,对于 OpenOCD、ST-Link GDB 服务器,Segger J-Link GDB 服务器、QEMU 以及许多其他特定的 GDB 服务器,您可以从 CLion 运行它们,并从 CLion 提供的内置调试功能中受益。
您需要做的就是在新添加的 Embedded GDB Server 运行/调试配置中提供设置:
配置自定义 GDB 服务器的路径、GDB 服务器特定的参数(例如,端口号或开发板配置文件)以及工作目录、环境变量、开发板重置命令和启动延迟(如果需要)。
请注意,与 OpenOCD 运行/调试配置类似,此新配置目前仅适用于基于 CMake 的项目。将来,我们计划添加为自定义目标启动这些配置的功能 (CPP-16079)。
ARM 设备的 Peripherals 视图
对于 ARM 设备,通常会在 .svd 文件中描述适合您的微控制器类型的指定 Peripherals 视图。CLion 现在提供了一种在 Debug 工具窗口的专用 Peripherals 选项卡中读取这些值的便捷方法:
它适用于 Embedded GDB Server 和 OpenOCD Download & Run 配置,并在加载一个或多个 .svd 文件时可用。除此之外,您还可以在 Peripherals 中搜索(只需输入您正在查找的名称),并将视图导出为 CSV 文件并且/或者在编辑器中打开该文件以供将来调查,知道这一点十分有用。您可以在这篇博文中了解详情。
调试器
GDB 相关的功能增强
在调试器中,我们捆绑了 GDB 8.3 并引入了一整套全新的 GDB 相关修复,以改善您的体验。例如,我们已经修复了变量的值在“Set Value”命令之后的步进中未更新的 GDB 问题,以及在 MinGW-w64 和多行命令的情况下 GDB 挂起的问题。
补全 GDB/LLDB 命令
接下来,对于 LLDB 和 GDB,我们已在调试器控制台选项卡中启用调试器命令补全(通过 Tab
或 Ctrl+空格
)。如果需要为 GDB/LLDB 使用命令行界面,现在可以在 CLion 中轻松实现:
即时检测待定、已解决和无效的行断点
此外,在 v2019.2 中,您还会注意到 CLion 现在可以区分 3 种类型的断点并实时更新它们的图标:
-
Pending:行断点不在调试会话中,这意味着会话尚未启动或尚未加载相应的共享库。
-
Resolved:行断点由 GDB 或 LLDB 使用提供的调试符号成功解析,并且在执行期间可被命中。
-
Invalid:行断点无法由 GDB 或 LLDB 解析,且永远不会被命中。
当断点实际位于可执行代码之外或某些调试符号缺失时,可能会发生这种情况。
实验性调试器功能
最后,下面有两个值得一提的实验性功能。首先,我们想提醒您,要启用实验性功能,您需要调用 Maintenance 对话框(Linux/Windows 上为Shift+Ctrl+Alt+/
,macOS 上为 ⌥⇧⌘/
)| Experimental features 并启用您要使用的功能。不过,请注意,实验性功能尚未达到发布的质量,我们提供这些功能的主要目的是收集反馈。
cidr.debugger.value.numberFormatting.hex 可在调试器中启用实验性的十六进制数字格式。实际上,这项功能在 v2019.2 之前已通过注册表设置添加,但现在它以实验性功能形式提供。cidr.debugger.lldb.windows 可为 Windows 上的 Microsoft Visual C++ 工具链启用实验性调试器!
对于此功能所依托的技术,值得说上几句。
对于使用 Microsoft Visual C++ 编译器编译的代码,各种工具都会提供几个调试引擎。在 Microsoft 工具中,使用了vsdebugeng.dll 引擎,由于许可限制,其他人无法使用该引擎。CDB 和 WinGDB 使用 dbgeng.dll 调试引擎。最初,我们尝试在其基础上构建调试器。但是,我们遇到了一些问题,包括崩溃和带有大量 PDB 的大型二进制文件的性能不佳。这就是我们探索另一种选项的原因 – 在 LLDB 之上实现调试器。这种做法奏效了!我们还有很多工作要做,但我们对自己的机会非常乐观。
我们基于 LLDB 的调试器可以使用从 Visual Studio 安装或项目中获取的原生可视化工具。只需在 Settings | Build, Execution, Deployment | Debugger Data Views | Enable NatVis renderers for LLDB 中启用此工具。
在开始使用此实验性调试器之前,我们建议您在我们的博文中查看已知问题和限制的列表。
Memory View 下的 Go to address 和 ASCII 视图
Memory View 可帮助您在调试时查看正在运行的进程的原始内存。在 v2019.2 中,它添加了几个更新。首先,新的 Go to address 意味着您可以从 Memory View 导航到内存中的特定地址。提供一个地址(十六进制)、变量名称或通过 &
调用其地址并跳转到相应的地址:
请注意,代码补全适用于已知符号。此外,ASCII 视图添加到原始内存视图的右侧。
编辑器中提供更多代码辅助
Unused Includes(未使用的 Includes)
由于出现多个误报,“Unused Includes”检查关闭了一段时间。现在,我们完全重新实现了基于 Clang 的检查,并将其恢复为默认值。因此,如果您保持基于 Clangd 的默认引擎处于开启状态,则更新的检查将奏效并高亮显示不必要的 include 指令。
该检查使用在设置中配置的检测策略,默认情况下为 Detect not directly used,此策略遵循 Include What You Use 原则,其中源文件应包括包含该源文件中使用的符号的头文件。因此,如果头文件中的声明未直接在此文件中使用,CLion 会将 include 标记为未使用:
可以在 Settings / Preferences | Editor | Inspections | C/C++ | Unused code | Unused include directive 中配置其他策略。在这里详细了解实现。
Clang-Tidy
Clang-Tidy 二进制文件已更新为较新的 Clang 版本。更新带来了一整套全新的检查,例如 modernize-avoid-c-arrays、modernize-use-nodiscard、新的 abseil-*检查和来自 clang-analyzer-* 组的检查,等等。默认情况下,并非所有检查都会开启。请在此处查看 CLion 的默认配置。
参数名提示
有多少次,您看到一个函数调用的参数是“true, false, true”或“10, 20, 30”,并试图猜测各个参数的含义?当然,您可以导航到函数声明,检查 Quick Documentation 弹出窗口或调用 Parameter Info,但是如何更快地获得此信息?参数名提示,就是这样!
对于函数调用、lambda、构造函数、初始值设定项列表和宏表达式,CLion 可以显示传递参数的参数名。如果参数是文字或具有多个操作数的表达式,则此方法有效。
ClangFormat 配置文件中的代码辅助
在 v2019.1 的 CLion 中作为替代格式化程序引入 ClangFormat 后,我们注意到用户倾向于在 CLion 中更新其项目中的 .clang-format 配置文件。这就是我们为他们添加一些代码辅助的原因。
CLion 补全选项的名称及其值,在补全弹出窗口中显示选项的描述。而 Quick Documentation(Windows/Linux 上为 Ctrl+Q
,macOS 上为 F1
)则提供原始文档和示例。
这一切都是通过添加内置的 JSON 架构来实现的,CLion 使用此架构来验证选项的值。如果值不匹配,则会显示相应的警告并提供快速修复。
性能改进
性能一直是我们连续发布的几个版本的首要任务。我们可以向您保证,有一些很棒的新想法正在产生,我们正在仔细调查并付诸开发。但是,这不是一个或两个发布周期的问题。通常,这些变更需要更多工作,甚至可能影响 CLion 与 IntelliJ 平台交互的方式。与此同时,较小的改进正在应用到每个版本。
以下是 v2019.2 中包含的一些改进:
-
重新设计了已有的 Rename 重构,以消除滞后和冻结。
-
显著提高了编辑器中限定表达式的代码补全性能。
-
收集编译器信息并通过减少 I/O 操作数而加速远程加载 CMake 的步骤。
-
现在,CLion 会在 Windows Defender 影响构建性能时发出警告,并且能够自动从实时扫描中排除目录。
除了我们正在进行的所有这些增量变更之外,我们的团队(与 IntelliJ 平台团队一起)在 6 月份开展了内部性能周/黑客马拉松活动,提出了几个新鲜而大胆的想法来改善性能。其中有一些想法出类拔萃,我们希望在 v2019.3 中将它们引入产品。
新语言的语法高亮显示
通常,您的 C或 C++ 项目中存在来自其他编程语言的代码。Python、JavaScript、HTML、XML 和 SQL 都捆绑在 CLion 中。对于 Rust,有一个便捷的插件。但是那些在 C++ 世界中不那么受欢迎但仍在使用的其他语言呢?例如,Ruby 和 C#。对于这种情况,在 v2019.2 中,我们为 20 多种不同的编程语言添加了语法高亮显示,并且此功能开箱即用,无需任何其他配置。可在 Settings/Preferences | Editor | TextMate Bundles 中找到可用语言的完整列表。您可以轻松在那里添加新语言(支持基于 TextMate 语法)!
但请注意,这仅与语法高亮显示有关。我们在 CLion 中仅为有限的语言选择提供更复杂的支持。
Shell 脚本
在讨论 C 和 C++ 项目中的补充语言时,Shell 脚本对于大多数此类项目而言都是自然选择在此类脚本中执行一些代码生成或构建/安装步骤并不罕见。Shell 脚本中的编码辅助可能有助于提高您的生产效率。这就是为什么现在 CLion 捆绑了 Shell Script 插件的原因,此插件提供了一些便利的功能,例如代码高亮显示、单词与路径补全,甚至是文本重命名:
编写脚本从未如此简单!通过在内置终端中运行脚本,您可以立即在 IDE 中检查这些脚本!
命名惯例
命名惯例也是 v2019.1 中出现的一个功能,后来在 v2019.2 中得到了增强。我们要感谢为我们提供有关如何改进 CLion 命名惯例支持的反馈和想法的所有人!
借助重新设计的 UI、新的设置(例如 Visibility(Public、Private 或 Protected)和 Specifier(Const 或 Static))、新的样式(例如 Leading_snake_case 和Upper_Snake_Case),命名惯例设置变得更加灵活和强大。我们希望新的 UI 能够让您更轻松地进行配置。
我们还努力确保您当前的命名设置从 2019.1 顺利迁移到 2019.2!
平台功能增强
CLion 基于 IntelliJ 平台,这意味着每个版本都会带来数十项平台改进。
此版本的主要亮点如下:
-
引入了一个新的插件页面,使用户能够更加舒适地在 IDE 中使用插件。例如,您现在可以在安装之前轻松启用/禁用已安装的插件或阅读插件的描述(因为插件描述现在位于插件列表旁边)。
-
检查工具提示具有更新的 UI – 除了问题描述外,如果可能,它还会为您提供第一个可用修复(要应用此修复,请使用
Alt+Shift+Enter
)。 -
像往常一样,我们的 VCS 团队为 VCS 子系统准备了一组更新。
-
捆绑的自定义 JBR 已更新为 v11(包含 JetBrains 团队修复的 OpenJDK 分叉)。
此转换解决了包括性能在内的各种问题。
Rust 插件
Rust 插件在此版本中得到了显著更新。最大的变化是一个新的实验性宏扩展引擎(在 Settings/Preferences | Languages & Frameworks | Rust | Expand declarative macros 中启用),它可以实现高亮显示、名称解析以及来自 impl
块的生成模块和方法的补全等功能。
此外,它还支持在宏调用中导航。
在其他值得注意的变化中,我们应该提到:
-
面向 Rust 的全新 Duplicate code fragments 检查
-
新的 Make public 和 Create Field 快速修复
-
新的 Add format string argument 和 Use destructuring declaration 意图
-
Evaluate Expression 和 GDB/LLDB 控制台中的补全
就是这些!
当然,还有许多其他各种各样的错误修复和改进这里没有提到,但是最好亲自尝试新的版本,看看它是否对您的情况作出了更改。
您的 CLion 团队,
JetBrains
The Drive to Develop
原文发表于2019年7月24日,作者Anastasia Kazakova