CLion 2023.1 EAP5: Disassemble on Demand, Support for CMake Presets Versions 4 and 5, QML Formatter
The new CLion 2023.1 EAP build (231.7665.29) is available from our website, via the Toolbox App, or as a snap package (if you are using Ubuntu). Update via patch if you are using the previous EAP build.
We’ve been integrating CLion with CMake presets ever since their very first release. This time around, we’ve added support for the following:
- CMake presets version 4, in particular presets with the
- CMake presets version 5.
CLion supports several project models – CMake, Makefile, compilation database, and Gradle (via a plugin). We’re working to unify the UI used for all of them in CLion. When you edit CMakeLists.txt files in your project, CLion notifies you that CMake has changed and suggests reloading it. This was the only in-editor notification, while other similar notifications are done via the floating toolbar. As of this EAP, the CMake reload notification is also floating:
If you still prefer the old notification style, you can disable the floating toolbar in Settings/Preferences | Advanced Settings | CMake | Use floating toolbar to notify that CMake project needs to be reloaded.
Support for QML syntax was added to CLion earlier in this EAP cycle. We’ve finalized our integration of qmlformat, which means that CLion can now use it to format QML code. This feature is enabled by default and can be disabled in Settings/Preferences | Languages & Frameworks | QML.
And by the way, we updated the QML settings in response to your feedback under the first QML support announcement. The Qt and QML paths are now separated into 2 settings:
Disassemble on demand in the CLion debugger
In situations where source code is unavailable, the CLion debugger allows you to step into and debug the disassembled code in a dedicated view. But what if you want to explore the underlying assembly code even when the source code is available? This is now possible in CLion too!
In the context menu in the frames view, there is now a new action that opens a regular disassembly view for the selected frame:
It opens a disassembly view side-by-side with the source code and highlights the execution line in both:
You can step through the assembly code, change execution points by dragging the arrow that appears next to the current execution line, and set address breakpoints.
Once the disassembly view has been opened, it stays synchronized with the current frame selected in the frames view, and switching frames scrolls to the execution point in both the editor and the disassembly view.
When the disassembly view is active, the execution point line is highlighted in a different color than the one in the source code. This is because the stepping behaves differently; when in disassembly, the debugger steps through individual instructions, while in the editor it goes line by line. It can take more than one instruction to proceed to the next line in the regular source code.
There is also a change in behavior we are still reviewing internally. Previously, CLion opened the disassembly view when no source code was available during stepping. Now, the only way to open it is to use the Disassemble Frame action.
We are eager for you to give this new feature a try and share your feedback with us! Please keep in mind that there are a few lingering issues, but we’re aware of them and plan to work on them in the near future:
- Instruction-level stepping is not yet implemented for LLDB on Windows.
- CLion does not yet mirror breakpoints between the source file and the disassembly view.
- We want to improve the discoverability of the disassemble action.
That’s it for today! The full release notes are here.
And here are the main highlights of the previous EAP builds:
- Support for vcpkg
- Support for QML syntax
- Improved Attach to Process… dialog
- Suspend or resume individual threads while debugging
- A new action to add C++20 modules
- Terminal emulation
- Clangd-based indexer for faster Find Usages
Your CLion team
The Drive to Develop
Subscribe to Blog updates
Thanks, we've got you!