What's New in CLion

CLion 2019.2 provides more assistance to Embedded Developers and improves the general debugging abilities across several important aspects. The editor now has Parameter Name hints and it has improved code analysis capabilities, bringing back an updated check for ‘Unused Includes’. This all is accompanied with IDE performance improvements and a couple of huge changes from the IntelliJ Platform.

2019.2 (Jul 24)

Embedded Development

Debug with GDB Server

On-Chip debugging with GDB Server

If it’s possible to debug on the microcontroller of your choice with a GDB Server, you can now do it from CLion using a special Embedded GDB Server Run/Debug configuration. It covers OpenOCD, ST-Link GDB Servers, Segger J-Link GDB Server, QEMU, and many other specific GDB Servers.

Create a configuration, providing a path to GDB Server, arguments to run the server, and other appropriate settings, and you are all set and ready to debug on-chip from CLion!

Peripherals

Peripheral View for ARM Devices

When debugging on-chip, it’s crucial to have the ability to view the peripherals. In CLion, this view is now available for two types of Run/Debug configurations: Embedded GDB Server and OpenOCD Download & Run. In both cases, a Peripherals tab appears in the debug tool window when you start debugging. Load the appropriate .svd file for your board and select the active peripherals you need to see.

Learn more

Debugger

Line breakpoints

Pending, resolved, and invalid breakpoints

CLion 2019.2 now distinguishes three types of line breakpoints:

  • Pending: Line breakpoint is out of the debugging session, which means the session hasn’t started yet or the corresponding shared library hasn’t been loaded yet).
  • Resolved: Line breakpoint is successfully resolved by GDB or LLDB using the provided debug symbols, and can be hit during the execution.
  • Invalid: Line breakpoint can’t be resolved by GDB or LLDB and can never be hit.

The types are detected automatically on the fly and the breakpoint icons are updated accordingly.

Debugger commands completion

Completion for GDB/LLDB commands

If you prefer the command line interface of GDB/LLDB and use the debugger console available in the debug tool window, you will benefit from completion for GDB/LLDB commands. Use Tab or Ctrl+Space to invoke it.

This completion is powered by GDB or LLDB, respectively; CLion simply gives you access to the suggestions.

MSVC debugger

An experimental debugger for the MSVC toolchain

If you use the Microsoft Visual C++ toolchain in CLion, now you can try a new experimental debugger.

It’s implemented by the JetBrains team on top of LLDB and is bundled into CLion. To enable bundled support for native visualizers, use Settings | Build, Execution, Deployment | Debugger Data Views | Enable NatVis renderers for LLDB.

An experimental debugger is available when turned on explicitly: call up the Maintenance dialog (Shift+Ctrl+Alt+/) | Experimental features, and select cidr.debugger.lldb.windows to control it.

Learn more

Memory View

When debugging your application, you can easily review the memory behind a pointer: in the Variables view of the debug tool window, press Ctrl+Enter on a pointer to invoke the Memory View. In 2019.2, we’ve updated the Memory View to make it even more useful.

Go to address

Go to address

Navigate to a particular address in memory from the Memory View. Use the hex value representing an address, a pointer variable, or call the address (&) of any variable you are interested in.

Code completion will assist you with the known symbols.

ASCII view

ASCII View

If you are interested in the ASCII memory format, you’ll find the ASCII view in the column on the right of the Memory View useful.

Parameter hints

Parameter Name hints

Thanks to parameter name hints in v2019.2, you can avoid switching to the function signature while exploring a function call. This in turn should help increase the code readability.

For function calls, lambdas, constructors, initializer lists, and macro expressions, CLion shows the names of the parameters for the passed arguments. This works if an argument is a literal or an expression with more than one operand.

Learn more

Code analysis

Unused Include

Unused Includes

The ‘unused includes’ check is back and completely reimplemented on top of the Clangd-based engine. It suggests 3 detection strategies: a conservative one, an aggressive one, and the default one (Detect not directly used) which is the closest to the “Include What You Use” principle.

Learn more
Clang-Tidy

Clang-Tidy update

The Clang-Tidy bundled binary was updated to the newest version, which brings a set of new checks to CLion. This includes some new abseil-* checks, a few from the clang-analyzer-* group, several new modernize-* checks, and more.

Code assistance for .clang-format files

Since v2019.1, CLion has support for ClangFormat as an alternative formatter tool. Now, if you have customized your .clang-format config files in the project, you can benefit from code assistance when you update them. Learn more

Quick Doc

Quick Documentation

To learn about any particular option, call the Quick Documentation popup (Ctrl+Q) and read the original documentation with samples.

ClangFormat config inspection

Schema validation inspection

CLion validates the content of your .clang-format config file against the built-in JSON schema. If the option’s value doesn’t match the allowed value set, a warning will be shown.

ClangFormat completion

Code completion

When customizing the .clang-format config file, you can benefit from code completion working for both options and their values.

ClangFormat doc

Options description in completion

Code completion popup for option names also includes a short description of the option, so you can quickly check it while typing the option name.

Naming convention

Naming settings

New settings

The naming convention settings (Settings | Editor | Code Style | C/C++ | Naming Convention) were reworked to provide better flexibility and more opportunities. New settings like Visibility (Public, Private, or Protected) and Specifier (Const or Static) were added. We’ve also updated the rules to address several kinds of entities at once.

It’s possible to work with the new UI without using the mouse.

Leading Snake Case

Leading snake case

As requested by CLion users, a new style – Leading_snake_case, which capitalizes only the first letter in the snake_case name, leaving the rest in lower case – is now available, along with the somewhat similar Upper_Snake_Case style and others.

Shell Script plugin

Shell Script plugin

If you need to edit shell scripts while you are working on your C++ project, you can do this with CLion as it now bundles the Shell Script plugin.

You can benefit from code highlighting, word and path completion, and even textual Rename.

Syntax highlighting for new languages

Ruby syntax highlighting

CLion provides bundled profound support not only for C and C++, but also for Python, JavaScript, XML, and more, as well as providing plugins for Rust, Swift, and Kotlin/Native.

Have code in your project in other languages, such as PHP, Ruby, or C#? You’ll be happy to learn that syntax highlighting is now available in CLion for over 20 different programming languages!

Learn more

VCS: Commit from the Local Changes

Commit from Local Changes

You can now commit directly from Local Changes tab. Just enable the “Commit from the Local Changes without showing a dialog” option at Settings | Version Control | Commit Dialog.

Use the Commit shortcut (Ctrl+K) and the IDE will select the modified files for the commit and focus on the Commit message field in the Local Changes tab of the Version Control tool window.

Learn more about other VCS changes

Performance improvements

There is some huge ongoing work in CLion to improve the IDE’s performance such as indexing, responsiveness, and elimination of freezes, among others. Part of this work is already included in v2019.2:

  • The in-place Rename refactoring was reworked to eliminate lags and freezes.
  • The performance of code completion for qualified expressions in the editor has been significantly improved.
  • Collecting compiler information and thus loading the CMake step in remote cases was accelerated by reducing the number of I/O operations.
  • CLion now warns you when Windows Defender is affecting the build performance and is able to automatically exclude directories from real-time scanning.

Rust plugin update

Rust plugin

Another huge update for the Rust plugin brings a new experimental macro expansion engine. You can turn it on in Settings | Languages & Frameworks | Rust | Expand declarative macros.

This engine provides you with code insight features such as highlighting, name resolution, and completion for generated modules and methods from impl blocks. Besides this, it enables navigation in the macro calls.

Other changes include a Duplicate code fragments inspection for Rust, and other new quick-fixes and inspections.

2019.1 (Mar 27)

Embedded Development

STM32CubeMX integration

STM32CubeMX integration

If you develop for STMicroelectronics boards, you’ll be happy to know that CLion now integrates with STM32CubeMX:

  • CLion can create a new .ioc project or open an existing one, and generate a CMake file to correctly work with it.
  • You can start STM32CubeMX any time directly from CLion to update board settings and generate code.
  • CLion reminds you to select a board config and suggests a list of options in the UI.
OpenOCD support

OpenOCD support

Debugging with the Open On-Chip Debugger is now supported by CLion. Use the new Run/Debug configuration template, ‘OpenOCD Download and Run’ to debug on your microcontroller.

If you work with a STM32CubeMX project in CLion, an OpenOCD Run/Debug configuration will be created for you automatically.

Learn more about STM32CubeMX & OpenOCD integration

ClangFormat

The ClangFormat tool is widely used in the C/C++ world and even regarded as a standard by many developers. Its config files can be found in many projects, and especially in open source software. And it’s now supported in CLion! Learn more.

ClangFormat across all IDE actions

ClangFormat across all IDE actions

CLion 2019.1 adds ClangFormat as an alternative code formatter. Turn it on for your current project or all projects in CLion and let CLion use it to format your code as you:

  • Type in the editor or paste code
  • Call the Reformat Code action
  • Reformat as a pre-commit hook
  • Generate boilerplate code
  • Refactor code
  • Apply quick-fixes or intention actions
Working with .clang-format config

Working with .clang-format config

CLion detects .clang-format config files in your project and will suggest switching to ClangFormat. If there are multiple config files, you can identify which one is used in a particular file opened in the editor by selecting “View ClangFormat options for <file name>” from the toolbar switcher.

Don’t have a config file? No problem – CLion will simply default to LLVM style.

Naming conventions

Setting naming in CLion

Setting naming in CLion

CLion now respects the naming scheme you provide. The selected settings will be used when:

  • Autocompleting code
  • Generating code
  • Refactoring code
  • Applying quick-fixes

You can configure the style manually in Settings | Editor | Code Style | C/C++ | Naming Convention or select naming from the predefined scheme.

Inconsistent naming inspection

Inconsistent naming inspection

CLion can help enforce the selected naming convention in the editor. Simply turn on the Inconsistent Naming inspection, and CLion will highlight problematic names and suggest a quick-fix to replace all usages with a more accurate name.

Header Guard style

Header Guard style

In Settings | Editor | Code Style | C/C++ | Naming Convention, you can configure the style for Header Guards to be used when creating a new header file.

You can update this Velocity template or select a style from one of the predefined schemes.

C++ support

Code highlighting and quick-fixes with Clangd

Code highlighting and quick-fixes with Clangd

To improve the editor performance, code highlighting and quick-fixes are now implemented on top of the complementary Clangd-based language engine (and are enabled by default along with the engine).

For quick-fixes, the location of the quick-fix is calculated in Clangd, while the fix itself is provided by CLion.

Error messages powered by Clang

Error messages powered by Clang

For some time now, we have been leveraging the Clangd-based language engine to annotate code errors and warnings in the editor. In v2019.1, CLion gets improved and more detailed error messages powered by Clang.

A practically useful example of this is debugging a failed overload resolution in your C++ code.

Improved Rename refactoring

Improved Rename refactoring

We’ve improved the Rename refactoring for files:

  • When you do a file rename, CLion asks if you’d like to also rename an associated class/struct, and the other way around.
  • When the header file is renamed, the header guards are updated accordingly.
Improved Extract refactoring

Improved Extract refactoring

The Extract refactoring is now more accurate and:

  • Respects type aliases and doesn’t expand on static members
  • Respects std:: namespace qualifier
  • Respects template specialization and template parameters
Member function can be static

Member function can be static

This new inspection reports member functions that can be marked as static. It works on top of the Clangd-based language engine and analyzes the method body, trying to check if it depends on this or not.

Debugger

Disassembly View

Disassembly View

Disassembly View is now available for LLDB in addition to GDB backend. We’ve also improved the view in general so that now it shows information divided by function.

As before, Disassembly View works when you use Force Step Into (Shift+Alt+F7) on a function with no source code.

Mute Variables

Mute Variables

To get a better stepping performance, or if you need to watch the variables only occasionally, you can now explicitly Mute Variables. A general per-IDE switch will stop the variable calculation, and each variable in the variables view gets a Load option which you can apply as needed.

Learn more

Memory View

Memory View

Memory View dumps the memory behind the pointer in the Debug mode. To invoke it, select a pointer variable in the debugger’s variables view and press Ctrl+Enter.

During stepping, if you have Memory View opened, CLion will highlight the memory changes that take place in the selected memory piece.

Custom Build and Run

Custom Build Targets

Custom Build Targets

Build-system independent Build Targets (Settings | Build, Execution, Deployment | Custom Build Targets) allow you to add custom targets and configure any tools to be used for Building/Cleaning the target.

The most typical use case is a compilation database project, which lacks the information about building the whole project.

Custom Run/Debug Configurations

Custom Run/Debug Configurations

To run and debug Custom Targets from CLion, create a corresponding Run/Debug configuration by using the Custom Build Application template (Run | Edit Configurations…).

The debugger will be taken from the Toolchain setting of the Custom Build Target.

Injected languages

Injected languages

String literals with pieces of code in other languages can now be treated accordingly. To temporarily inject a language, press Alt+Enter, apply the intention “Inject language or reference”, and select the appropriate language. For example, SQL strings, HTML code, or Regular Expressions.

Based on the language chosen, CLion will provide code highlighting and language-specific intentions and actions.

Custom color themes

Brighten up Your IDE

Tired of Black and White themes in CLion? Tweak literally every color in your IDE, from icons to radio buttons and arrows.

Each theme is actually a theme plugin that you can download directly from our plugin repository. Or, if you feel up to it, create your own theme plugin using the DevKit and modify CLion’s appearance via the JSON file.

Learn more

Recent locations

Recent locations

The Recent Locations Popup (Shift+Ctrl+E) lists all the locations that you’ve visited in a chronological order so that you can easily go back and find things.

Use instant search to filter the locations by file name or code snippet included. Or, switch to showing changed locations only.

Other improvements

  • The process of building CLion’s plugins was simplified by publishing CLion as a Maven dependency to be used by gradle-intellij-plugin (since version 0.4.2). Learn more
  • The bundled CMake is updated to 3.13, the bundled LLDB is updated to 7.0.1, and the latest supported Cygwin is now 3.0.
  • IPv6 is now supported to help you use Remote Development mode in CLion. Learn more
  • The Rust plugin received a massive update: it suggests out-of-scope items in completion and auto-import, as well as supports Rust language injection into code snippets in doc comments. Besides, profiler tools (like DTrace or Perf) are now supported for Rust.
2018.3 (Nov 27)

Initial Remote Development support

You can now develop remotely from a Windows, Linux, or macOS client machine to a Linux remote host, for CMake-based projects only. The current setup assumes the source code is located on a local machine, which CLion synchronizes to the remote machine. Many other remote development setups are planned for future CLion releases.

Supported configurations

Supported configurations

To start developing remotely, first create a remote toolchain in Settings | Build, Execution, Deployment | Toolchains. Provide the remote host address and credentials, and then use the toolchain in one or several CMake Profiles. After CMake is reloaded, you’ll be ready to start working remotely with your project in CLion.

Learn what’s going on in CLion under the hood.

Remote mode

Remote mode

After the configuration is done, you can run or debug your application or unit tests remotely from CLion. Code is built, run and debugged on a remote host, while you work with the code in CLion on your local machine. Code is resolved locally, and CLion synchronizes the header search path to the local machine to speed up the process.

Supported configurations

Enable remote as default

To use CLion in remote mode for all your projects, both the new and existing ones, you can set your remote toolchain to be the default.

Go to Settings | Build, Execution, Deployment | Toolchains and simply move the toolchain to the top of the list. CLion will then use this toolchain automatically for any projects you open in CLion.

CPU Profiler

CPU Profiler

CLion now integrates with CPU Profiler on Linux (Perf) and macOS (DTrace). You can run the profiler right from the IDE and review the analysis results in a dedicated tool window (View | Tool Windows | CPU Profiler).

Use the flame chart, call tree and method lists to get a better overview of the possible performance issues in your code. Navigate to the source code to locate the issues in the code base.

Learn more

C++ Support

Clangd-based navigation and search

Clangd-based navigation and search

We’ve been using an experimental, complementary Clangd-based language engine to help you annotate errors in the editor. Now, it also powers several navigation and search actions, including Go to declaration (Ctrl+B)/definition (Ctrl+Alt+B), highlighting references under the caret, quick documentation (Ctrl+Q), and Find usages (Alt+F7). The results are still merged with the ones collected by CLion’s own engine.

C++17: fold expressions and deduction guides

C++17: fold expressions and deduction guides

Now, CLion correctly parses C++17 fold expressions and C++17 deduction guides. This means that there is less false code highlighting and better code assistance for you. For example, the correct type will be shown in the parameter info for user-defined deduction guides.

New IDE actions

New Build and Rebuild actions

New Build and Rebuild actions

The new Build menu comes with a set of new and updated build-related actions for CMake:

  • Build/Rebuild all target from all CMake Profiles
  • Build/Rebuild all target from the selected CMake Profile
  • Build/Rebuild the selected configuration
  • Recompile the current file
  • Install
  • Clean
Activity Monitor

Activity Monitor

This new experimental feature shows how much CPU the subsystems and plugins (both built-in and additionally installed ones) are consuming. To access it, go to Help | Activity Monitor.

If you see a subsystem whose %CPU is unusually high, feel free to ask our support team about it or report it to the issue tracker.

New Run Anything

New Run Anything

Run Anything (Double Ctrl) is a new and universal way to run and debug any configuration in your project, or even open a project.

To run a configuration, just start typing its name.

To debug, hold down the Shift key to switch to the Debug Anything mode.

To open a project, type “Open” and select the desired project from the list.

Updated Search Everywhere

Updated Search Everywhere

The updated Search Everywhere (Double Shift) now includes all the multiple actions in one:

  • Search Everywhere
  • Find Action
  • Go to Class
  • Go to File
  • Go to Symbol

Each has its own separate tab in the dialog, and you can use Tab to switch between them.

Unit testing

In v2018.3, we’ve reworked the integration with unit testing frameworks in CLion (Google Test, Boost.Test, and Catch (2)) in order to eliminate various performance issues and hangs. We’ve also improved output processing in many cases.

Learn the details.

Show Test List

Show Test List

To improve performance, CLion now uses lazy test detection. This reduces project indexing times in many situations. For diagnostic purposes, we’ve implemented a new action called Show Test List (available from the Find Action dialog), which provides a text file with a list of all the tests currently detected in the project.

Compilation database validation

Compilation database validation

CLion now provides specific inspections to check for compliance with the compilation database’s JSON schema.

For example, it can highlight situations when an incorrect type is used for the property value, or when the property is missing.

Editor

Formatted macro expansion in Quick Doc

Formatted macro expansion

CLion now formats the macro replacement in the Quick Documentation popup (Ctrl+Q). It also highlights strings and keywords used in the final substitution, so you can quickly understand the code that will be substituted after the preprocessor pass.

Multiline TODO comments

Multiline TODO comments

To add more information to TODO comments but keep them readable, you can now split the comment into several lines. Just add an indent starting from the second line of your multiline TODO comment and the IDE will differentiate it from an ordinary comment.

VCS

Git submodules

You can now work with Git submodules in CLion. When you clone the root repository, CLion will clone all its submodules. The same is true for updates, and other VCS actions work with submodules as well.

GitHub pull requests

A brand-new GitHub pull requests tool window (VCS | Git | View Pull Requests) lets you view all the pull requests to the repository. Search them by state, assignee, author, etc., and easily create a new local branch with a simple right click.

Accessibility improvements

To make our tools accessible to as many people as possible, we’ve added a few new options to the Appearance section in the IDE’s settings (Settings | Appearance & Behavior | Appearance). Here, you’ll find a new High-contrast theme, expanded support for screen readers (they can now read line numbers, VCS annotations, and gutter icons tooltips) and an option to adjust IDE colors for people with color deficiencies.

High-contrast Theme

High-contrast Theme

A High-contrast Theme is now available for CLion. You can either switch it on just for the editor (Ctrl+`) or for the whole IDE (Settings | Appearance & Behavior | Appearance | Theme).

Plugins

New Plugins UI

New Plugins UI

Plugins settings under Settings | Plugins have been redesigned from the ground up. The new UI makes it much easier to control the plugins installed in your CLion instance and keep them up-to-date.

Featured plugins and marketplace

Featured plugins and marketplace

You can see a list of the most valuable plugins for CLion located in the Featured plugins list. Or, sort all the plugins by rating or number of downloads.
If you are a plugin writer, check out our new platform for third-party plugin vendors.

Other improvements

CLion 2018.3 comes with the Swift Package Manager support in the Swift plugin. Simply open the SPM project in CLion and work with it – no additional configuration required. Read more and watch a short demo

Rust plugin was updated to get partial Rust 2018 support, Move analysis inspection and cargo unit testing support.