We are glad to say that the Early Access Program for CLion 2017.3 is now open. The release is scheduled for the end of this year, and there are so many things planned!
For now, please feel free to download the build and check the new features and enhancements that are already included. Your feedback is very welcome.
This build (173.2099.3) addresses issues in several major areas, including C++ parser and debugger, it also provides better support for unit testing and a more flexible toolchains configuration. Let’s see what’s inside:
- Gutter icons to run/debug unit tests
- Bundled GDB 8.0
- C++ language engine improvements
- Multiple toolchains support
Unit testing: easy to run and debug from the gutter
If you use Google Test or Catch framework for unit testing on your project, you may benefit from the built-in test runner in CLion, which provides a progress bar, a tree view of all the tests running, information about the status, duration, and output stream. There is also the ability to easily sort and rerun tests, export/import testing results, and navigate to the test’s sources. This EAP now makes it easier to run tests and review results by adding special test icons to the editor’s left gutter:
You can run the tests using these icons. Besides, they show the status of the tests – success or failure, so you always know, when looking through the code of your tests if they failed recently or not:
Debugger: GDB 8.0
CLion 2017.3 EAP comes with GDB 8.0 bundled. Among other things, this brings fixes to several major issues and inconveniences.
Since bundled GDB is now built with multiarch support, it can be used for remote cross-platform debug in various Linux/Windows and embedded cases. For example, target Linux from the IDE running on Windows. There is no need to find/build another GDB version for this.
Previously, there was a bug with Application output on Windows, which redirected you to a separate console window instead of the default Run window when debugging (CPP-8175). The most critical case here was debugging the unit tests. Updating to GDB v8 helped to fix the bug, so now the output is printed to the default Run window for both, Run and Debug. (Bear in mind, that on Windows, CLion uses bundled GDB when MinGW32 is selected as the toolchain.)
C++ language engine improvements
List initialization improvements
We’ve promised a big overhaul in the problematic areas of CLion’s language engine, which parses, resolves and highlights the issues in your code, as well as provides info for the context search, navigation, and refactorings. Following the plan, we’ve started with the list initialization.
This work addresses lots of issues, most of which are linked to CPP-8143. Like for example:
- some false “no matching constructor” error,
- some false “too many arguments” and “too few arguments” errors,
- invalid “parameter type mismatch” error for boost weak pointer initialization,
- failed resolve for members of auto variables initialized with uniform initialization,
- false “Invalid initializer” error with C99 union initializers,
- and many others.
We definitely appreciate your feedback, and your reports on any issues you find (we expect some regressions here due to the massive changes).
Support for __COUNTER__
__COUNTER__ macro is now properly supported in CLion, which means CLion increments its value properly in the language engine and doesn’t show invalid duplicate declaration errors now:
Unique_ptr related issues (GCC7)
In case of using GCC7 one may encounter various issues with
unique_ptr. CLion 2017.3 EAP comes with the proper support for it, and thus issues with
unique_ptr such as incorrect “parameter type mismatch” and false “applying operator ‘->’ to … instead of a pointer” are now fixed:
Invert if condition
One very common refactoring pattern is to invert the condition in the if clause and flip the if-else blocks. It can be used, for example, to simplify complex code using multiple nested if statements. CLion now provides a code intention that can do that:
In case you have include directives inside namespaces, which is a typical case for JUCE library, you will be glad to know that code completion, navigation and refactorings now work correctly for the symbols from such headers:
Besides, CLion 2017.3 EAP comes with the support for C++11 friend declaration syntax (CPP-3680).
Upd. CLion 2017.3 was released! Checked the final UI and description in the release blog post.
With this EAP we’ve started working on a configurable list of toolchains. When done, it should allow you to use different CMake/debugger or MinGW/Cygwin/Microsoft Visual C++ toolchains for different projects or configurations (ready in this EAP), and conveniently switch compilers, environment settings, etc (not yet ready).
The work has just recently started, but we want to present this current state to you within this EAP build. Let’s look at what is now supported.
In Settings/Preferences | Build, Execution, Deployment | Toolchains you can now add several toolchain configurations in addition to the Default one.
Default toolchain (macOS case):
Extra toolchain configured:
For now you can change:
On Windows this comes with an ability to select the environment – MinGW, Cygwin or Microsoft Visual C++ (keep in mind that MSVC support is still experimental and is available under clion.enable.msvc setting in the Registry):
Now, when you have several toolchains configured, you can go to CMake settings under Settings/Preferences | Build, Execution, Deployment | CMake and select different toolchains for different CMake configurations, for example, one toolchain for Debug, another one for Release:
Note that currently the CMake configuration should be named differently (CPP-8466).
These CMake configurations are now available for selection in Run/Debug Configurations:
Besides this, on Windows CLion now works correctly with tools without providing a full path, for example, custom compiler path. The same logic as platform shell is used to find an executable.
That’s it for now! Check the full release notes here. More changes are coming with further EAP builds – stay tuned.
Your CLion Team
The Drive to Develop