Публикации и ответы на комментарии в блогах JetBrains не выходят на русском языке с 2022 года.
Приносим извинения за неудобства.
CLion 2021.3: новый механизм удаленной разработки, тулчейн для Docker, улучшения отладчика и многое другое
Традиционно начало декабря — время, когда релизятся все продукты JetBrains. И сегодня мы расскажем о CLion 2021.3 — новой версии нашей кроссплатформенной IDE для разработки на C и C++.
Решения для удаленной разработки
Главная новость прошедшей релизной недели — выпуск нового решения для удаленной разработки. Его модель предполагает, что исходный код, тулчейн и бэкенд IDE находятся на удаленном сервере, а для взаимодействия с IDE используется тонкий клиент, запущенный на локальной машине. Таким образом решается несколько проблем:
- Вам не нужно загружать код на локальную машину. Он хранится на удаленном (и, вероятно, защищенном) сервере — вам просто нужно подключиться к нему.
- Локальной машине не обязательно быть мощной, так как бэкенд IDE запускается на удаленной машине.
- Вам не придется тратить время на настройку окружения. Достаточно один раз настроить набор стандартных сред, после чего ваша команда сможет ими пользоваться. В будущем, если среда «прогрета», вам даже не придется даже ждать окончания индексации — просто открывайте локальный клиент, подключайтесь и сразу приступайте к работе.
![](https://habrastorage.org/getpro/habr/upload_files/1eb/5a0/f0c/1eb5a0f0c05585ab88e99f39296878de.png)
Именно об этой возможности вы давно нас просили! Ведь старый удаленный режим — при котором CLion запускается на локальной машине, код синхронизируется с удаленной на локальную машину, а компиляция и сборка выполняются удаленно — не всех устраивал. Пока что новое решение имеет ряд ограничений. Рекомендуем вам предварительно ознакомиться с ними.
Другие обновления в CLion 2021.3
Следующие улучшения будут полезны независимо от используемой вами платформы и специфики разработки:
- работа с тулчейнами — оптимизация и новые возможности;
- отладчик — улучшенное представление данных;
- редактор — подсказки для выведенных типов;
- анализ кода — повышение точности и новые возможности;
- новая опция для представления структуры текущего файла.
А теперь разберем все в деталях.
Тулчейны
Мы поддержали новый тип тулчейна для работы с контейнерами Docker. Раньше мы предлагали использовать для этого тулчейн Remote. Но копирование исходного кода в контейнер по ssh давало лишние накладные расходы. Новый тулчейн Docker просто монтирует директорию с проектом к контейнеру. Подробнее об особенностях работы нового тулчейна на Windows и о том, как его настроить на любой из платформ, рассказывает наш новый девелопер-адвокат Тимур Думлер (на английском):
Для пользователей Windows мы подготовили сразу несколько улучшений:
- MinGW теперь включен в поставку CLion, чтобы сэкономить время на предварительную конфигурацию окружения тем, кто только начинает работу в CLion. В настоящее время в CLion встроена версия MinGW-w64 9.0 с параметром languages=c,c++, потоками POSIX и структурированной обработкой исключений (SEH).
- Тулчейн System позволяет настроить исполняемые файлы для CMake, компилятора и отладчика, не указывая заранее настроенное окружение (MinGW, Cygwin, WSL, Visual Studio и пр.). Версия тулчейна для Windows работает аналогично версиям для Linux и macOS.
![](https://habrastorage.org/getpro/habr/upload_files/058/cdd/5ba/058cdd5bad17684e6354605a2079f2ca.png)
Также есть несколько важных улучшений для разработчиков встроенных систем. Появилась опция Custom Compiler, позволяющая использовать компиляторы, которые не поддерживаются из коробки. Теперь таким компиляторам не придется «маскироваться» под GCC или Clang. Достаточно прописать компиляторные определения в файле формата *.yaml и указать этот файл в настройках Settings/Preferences | Build, Execution, Deployment | Toolchains | Custom Defined Compiler:
![](https://habrastorage.org/getpro/habr/upload_files/183/882/c2d/183882c2d1a4805a611b1f31a8e54a7d.png)
Теперь CLion умеет работать с заданными таким образом компиляторами. Мы создали специальный GitHub-репозиторий, в который будем добавлять конфигурационные файлы для популярных компиляторов. Некоторые из них мы уже добавили:
![](https://habrastorage.org/getpro/habr/upload_files/076/954/0b8/0769540b8ed520a722283c1d35080f9a.png)
В некоторых случаях окружение компилятора можно настроить с помощью скрипта. В нем вы сможете инициализировать переменные окружения, настроить переменную PATH и пр. Теперь CLion позволяет указать такой скрипт в настройках тулчейна и исполняет его при первом запуске тулчейна. Кстати, похоже, что таким образом можно научить CLion работать с новым компилятором от Intel на базе LLVM. Мы еще не до конца исследовали этот вопрос, но пока тестирование проходит успешно.
Большинство наших пользователей предпочитает работать над проектами CMake (тогда как CLion также еще поддерживает Makefile, compilation database, и совместим с плагинами для Gradle и Bazel). В качестве генератора CMake большинство пользователей предпочитают Ninja. CLion 2021.3 включает Ninja v1.10.2. Если вы откроете или создадите проект в CLion с CMake v3.20+, то при запуске локальных тулчейнов по умолчанию будет использован именно Ninja. Управлять используемым в CMake генератором теперь можно не только через опции CMake, но и из интерфейса CLion: Settings/Preferences | Build, Execution, Deployment | CMake.
![](https://habrastorage.org/getpro/habr/upload_files/1f7/bec/c77/1f7becc779ab500f6df57115f4ec21c5.png)
Отладчик
В этом релизе нам удалось улучшить отладчик в двух направлениях. Улучшение, которое касается всех пользователей: мы расширили настройки отображения данных в отладчике. Мы заметили, что шаблонизированные типы стандартной библиотеки и спецификаторы пространств имен (особенно ABI) зачастую перегружают окно отладчика. При этом пользователю, как правило, важнее знать значения переменных. Теперь вы можете настроить отображение типов переменных и функций в окне фреймов, исходя из ваших предпочтений:
![](https://habrastorage.org/getpro/habr/upload_files/a5d/9b8/a05/a5d9b8a052e735f29ef82bcac0ac331a.png)
Например, можно не отображать в окне отладчика вспомогательные пространства имен, глобальные спецификаторы и спецификаторы для областей доступа отдельных функций, а также пространства имен версии ABI стандартной библиотеки. Можно вообще не отображать типы. Посмотрите, насколько существенным может быть отличие:
![](https://habrastorage.org/getpro/habr/upload_files/867/039/4e3/8670394e3c467ce238230a4c2e12a61c.png)
В окне фреймов можно убрать тип возвращаемого значения функции, скрыть ее параметры и аргументы шаблона. Также можно и добавлять: например, добавьте имя модуля, чтобы видеть, какой файл выполняется в данный момент времени и какой идентификатор потока передан ОС при запуске:
![](https://habrastorage.org/getpro/habr/upload_files/5a2/5ae/bcb/5a25aebcb70fc58c24b982401e21f337.png)
Новое действие View as Array доступно для всех переменных типа указатель. Оно добавляет представление значение указателя в виде массива в список просматриваемых переменных. Чтобы запустить действие, откройте контекстное меню для переменной и укажите размер массива:
![](https://habrastorage.org/getpro/habr/upload_files/185/9fd/f2b/1859fdf2bf7da8c9397ae1d6fa047c92.gif)
В прошлой версии CLion шестнадцатеричное представление числовых переменных было экспериментальной функцией. В новой версии мы улучшили эту возможность и добавили ее на страницу настроек. Также появилась возможность просмотра параллельных стеков при отладке многопоточных приложений. А встроенный LLDB был обновлен до 13-й версии.
Также мы добавили ряд важных улучшений для разработчиков встроенных систем на базе RTOS. Помимо FreeRTOS, CLion теперь поддерживает Zephyr RTOS. Что касается FreeRTOS, мы поддержали дополнительные таблицы — для просмотра выполняющихся задач, активных очередей, программных таймеров, а также использования кучи и распределения блоков памяти:
![](https://habrastorage.org/getpro/habr/upload_files/277/159/63c/27715963c1a5f5f252f39fcebc86b936.png)
Подсказки для выведенных типов
В современном C++ можно не указывать тип явно, а скрыть его ключевым словом auto либо спрятать в структурное связывание или лямбду. Однако при работе с таким кодом разработчику нужно знать тип переменной или возвращаемого значения. Поэтому мы добавили в редактор подсказки для выведенных типов. CLion показывает актуальный тип прямо в редакторе:
![](https://habrastorage.org/getpro/habr/upload_files/7d8/0bb/af2/7d80bbaf295fdd61ea2a3ffc9d51b064.png)
Анализ кода
Мы обновили инструменты LLVM до версии 14.0.0. Это касается как кастомизированного нами языкового движка Clangd, так и инструментов Clang-Tidy и ClangFormat. Благодаря этому языковые функции работают точнее, а демон Clangd — реже падает. Также в анализаторе Clang-Tidy появились новые проверки — сразу после обновления версии CLion спросит вас, какие из них вам нужны.
В прошлых релизах мы перевели анализ потока данных (DFA) на Clangd и реализовали его в глобальном контексте (то есть не просто в теле функции, а в рамках единицы трансляции). В новом релизе разные вызовы функций рассматриваются по-разному: параметры и возвращаемые значения для разных точек вызова анализируются отдельно. Это уменьшило количество ложных срабатываний анализатора и повысило точность его работы. Вот типичный пример с поиском подвисшего указателя (dangling pointer):
![](https://habrastorage.org/getpro/habr/upload_files/ff8/40d/ede/ff840dede9388f359d65888657cb80cf.png)
К слову, мы улучшили анализ времени жизни объекта (реализован в CLion через DFA на основе предложения Герба Саттера Lifetime Safety), и теперь он отлавливает больше проблемных случаев.
Мы продолжаем работу по поддержке MISRA C 2012 и MISRA C++ 2008 в CLion. В этом релизе добавилось много новых проверок. Полный список доступен по ссылке. В следующем году планируем, вероятно, добраться и до спецификации AUTOSAR.
Структура текущего файла
В новой версии CLion квалифицированные имена функций-членов отображаются полностью. Благодаря этому при анализе структуры файла в окне Structure вы сможете легко различать функции с одинаковыми именами. Настроить отображение можно с помощью специальной настройки в верхней панели:
![](https://habrastorage.org/getpro/habr/upload_files/629/b00/bbd/629b00bbde75afdb5bc550e646a600e1.gif)
Мы планируем доработать эту функциональность в следующей версии, а также добавить возможность группировки членов классов в окне Structure.
В качестве эпилога
На этом у нас все. Если вы дочитали до конца, напишите в комментариях ваше любимое сочетание клавиш в CLion :) (Я так пишу каждый релиз, но пока никто не поделился с нами в комментариях любимым сочетанием… Кто же станет первым?)
Новую версию можно скачать на нашем сайте и попробовать бесплатно в течение 30 дней. Если у вас есть активная подписка на CLion или All Products Pack, просто обновите версию до 2021.3. Напоминаем, что при покупке годовой подписки на любой продукт JetBrains вы получите резервную бессрочную лицензию.
Оставляйте ваши вопросы, мысли и предложения в комментариях — нам интересно, что вы думаете, и мы всегда рады помочь!
Ваша команда CLion
The Drive to Develop
Оригинал статьи опубликован на Habr.com.