Привет, Хабр!

В конце июля в JetBrains стартует очередной релизный «паровоз». На этой неделе обновились многие IDE на платформе IntelliJ, на следующей запланированы обновления наших продуктов для .NET. И сегодня мы хотим поговорить о CLion 2021.2 — новейшей версии нашей кроссплатформенной IDE для разработки на C и C++.

Коротко о главном. CLion 2021.2 защитит ваш код от типичных проблем доступа к памяти в C++, автоматически загрузит настройки сборки приложения из CMake Build Presets, откроет проект с использованием GNU Autotools, поможет с профилированием на удаленном хосте и на WSL. Кроме того, значительно улучшен отладчик (самые крупные обновления ждут наших пользователей на Windows). А для тех, кто пока только изучает C++ или прототипирует новое приложение или библиотеку, мы добавили интеграцию с Cling — интерпретатором С++.

Новую версию можно скачать с нашего сайта и попробовать бесплатно в течение 30 дней. Если у вас есть активная подписка на CLion или All Products Pack, просто обновите версию на 2021.2. Напоминаем, что при покупке годовой подписки на любой продукт предоставляется резервная бессрочная лицензия.

А теперь поговорим о нововведениях и улучшениях в версии 2021.2 подробнее.

Отладчик

Что касается отладчика, то мы всегда ведем работу в нескольких направлениях сразу: исправления на бэкенде самих отладчиков, улучшения UI на стороне CLion, поддержка новых возможностей.

Отладка на Windows

Для тех, кто разрабатывает на Windows с использованием тулчейна MSVC, мы написали собственный отладчик на базе LLDB (отладчик из Visual Studio мы не можем использовать по лицензионным соображениям). Этот же отладчик используется в раннем превью Rider for Unreal Engine (версии IDE JetBrains Rider для разработки игр под Unreal Engine), поэтому мы уделили особое внимание поддержке Natvis — формата для описания визуализации данных в отладчике. В новой версии CLion мы переписали поддержку Natvis, и теперь:

  • Доступны такие возможности настройки Natvis, как Inheritable attribute, спецификаторы формата и CustomListItems.

  • Встроенные визуализаторы получили однострочные цветные описания для всех структур, не покрытых Natvis.

  • Появилось представление [Raw View] для значений, сгенерированных Natvis.

  • Сортировка переменных в окне просмотра значений переменных не влияет на порядок членов класса — сортируются только сами переменные.

  • Исправлены проблемы с копированием переменных в окне отладчика.

  • Исправлено некорректное отображение std::tuple.

Отладка дампов памяти теперь также доступна пользователям Windows. О том, как собрать дамп памяти упавшего пользовательского процесса на Windows, можно узнать здесь. В CLion же все предельно просто: запускаете действие Run | Open Core Dump, заполняете настройки новой конфигурации и вперед!

И еще одно важное улучшение для пользователей Windows — теперь для запуска и отладки приложений вместо внутренней консоли CLion можно использовать консоль cmd.exe.

Режим просмотра потоков FreeRTOS

При отладке приложений FreeRTOS в CLion теперь можно использовать режим просмотра со списками задач. Используйте окно отладчика, чтобы выбрать нужный поток и просматривать его переменные:

Общие улучшения в отладчике

Когда проект хранится локально (на той же машине, на которой запущен CLion), конфигурация для отладки проста и обычно не требует дополнительных настроек. Однако если вы будете отлаживать приложение, собранное на другой машине (например, на CI), CLion потребует указать соответствия путей в проекте, чтобы правильно определить точки останова в вашем коде. По умолчанию отладчик использует полные пути к файлам, но CLion 2021.2 позволяет использовать только имя файла:

В большинстве случаев этого достаточно. Если же в проекте найдутся два файла с одинаковым именем, точка останова сработает в каждом из них.

Если при пошаговой отладке CLion не найдет файл с исходным кодом, для дальнейших шагов он перейдет к коду на ассемблере. Теперь же в таком случае можно будет явно указать, где искать исходный код, и перейти туда:

Кстати, раз уж мы заговорили про отладку ассемблерного кода, CLion 2021.2 позволяет при пошаговой отладке добавлять и удалять точки останова прямо на строках инструкций. Как и с обычными точками останова, вы можете, например, указать, чтобы отладчик не останавливал исполнение, а лишь записал в лог какое-то значение или сообщение. Так же можно задать и другие настройки.

Если вы предпочитаете отладчик LLDB, то эта новость для вас: CLion теперь поставляется с версией LLDB 12. К тому же, LLDB теперь можно использовать для удаленной отладки произвольного исполняемого файла (раньше это работало только с GDB). Новая конфигурация для настройки такой отладки называется Remote Debug:

Подробнее о настройках отладчика для удаленной отладки можно прочесть в нашем блоге.

Чтобы при пошаговой отладке не открывать в редакторе слишком много вкладок, можно пользоваться вкладкой предварительного просмотра. В CLion 2021.2 она доступна во время сеансов отладки и позволяет просматривать файлы в одной вкладке друг за другом (раньше каждый файл открывался в новой вкладке).

Тут самое время припомнить нам назойливую проблему с полными (fully qualified) именами. После подстановки всех шаблонных параметров и пространств имен они порой оказываются такими длинными, что значение переменной, расположенное после типа, уже попросту не помещается в окно. Мы занимаемся реализацией логики сворачивания таких имен на стороне CLion. Надеемся, что эти изменения попадут в следующий релиз — 2021.3. Также мы планируем научить CLion показывать переменные типа указатель как массивы, улучшить шестнадцатеричное представление числовых переменных и многое другое. Кстати, если вас интересуют задачи по поддержке отладчиков в CLion, мы с радостью обсудим это с вами :) Вот тут есть актуальная вакансия.

Обновления для проектов CMake, Makefile и GNU Autotools

Мы включили в CLion 2021.2 одну из самых свежих версий CMake — 3.20. Главное ее нововведение — предустановки CMake Presets. Они позволяют сохранить настройки сборки проекта в универсальном формате и делиться ими, например, через систему контроля версий. И теперь CLion тоже поддерживает CMake Presets! Это значит, что вы можете загружать эти настройки и использовать их при работе с проектом.

Если в корневом каталоге вашего проекта лежит файл CMakePresets.json или CMakeUserPresets.json, CLion загрузит все указанные там предустановки для сборки Build Presets. Работает это пока только со второй версией CMake Presets. Предустановки появятся в CLion в виде выключенных по умолчанию профилей CMake в Settings/Preferences | Build, Execution, Deployment | CMake. Пока что редактировать их  можно только в редакторе (как json-файлы).

Мы сняли небольшое видео (на английском) о том, как это работает:

Шаблоны новых проектов CMake теперь можно редактировать. То есть вы можете изменить содержимое корневого файла CMakeLists.txt, который автоматически генерируется мастером создания новых проектов:

Мы расширяем список проектов Makefile, поддерживаемых CLion. Теперь CLion умеет запускать шаг преконфигурации для создания файла Makefile и загружать с его помощью проект. Мы обновили список проектов, на котором мы тестируем нашу поддержку, добавив новые данные. Благодаря поддержке шага преконфигурации теперь CLion умеет загружать проекты GNU Autotools. Вот, к примеру, проект make v4.3, открытый в CLion:

Анализ времени жизни объекта

Опросы сообщества показывают, что больше всего неприятностей разработчикам на C++ причиняют проблемы безопасной работы с памятью. Не обошел их своим вниманием и комитет по стандартизации. Герб Саттер работает над предложением Lifetime safety, которое предполагает анализ времени жизни объектов на стадии компиляции. Когда именно это появится во всех основных компиляторах для C++, сказать сложно. А пока мы научили CLion 2021.2 выполнять такой анализ на этапе написания кода в редакторе. Встроенный статический анализатор в CLion умеет находить самые разные проблемы:

Также вы можете разметить свой код аннотациями GSL (подробное описание — в предложении Герба Саттера), и CLion будет использовать их при анализе:

Интерпретатор Cling

А вы знали, что для языка C++ есть интерактивный интерпретатор — Cling? Это такая своеобразная песочница, где можно прототипировать библиотеки или новые приложения либо просто изучать язык C++. Cling теперь интегрирован в CLion. Для пользователей это значит, что:

  • Сессия Cling запускается из IDE через вызов действия Tools | Cling | Start New Cling Session… и открывается в окне в CLion.

  • Можно работать дальше с самой сессией, а можно отправлять код в интерпретатор прямо из редактора, используя контекстные действия Отправить выделенный код в сессию, Отправить текущую строку в сессию, Отправить включенные заголовочные файлы в сессию.

Поддержка систем контроля версий и локальная история

Как и другие IDE на платформе IntelliJ, CLion 2021.2 предоставляет улучшенную поддержку систем контроля версий. Так в список действий, которые могут выполняться перед коммитом, мы добавили выполнение тестов. А для запуска действия Analyze code перед коммитом можно указать профиль анализатора кода.

Если ваш проект не хранится в системе контроля версий, за историей изменений присмотрит локальная история. В релизе 2021.2 появилась возможность текстового поиска по локальной истории. Например, вы можете найти текст, который был по ошибке удален или изменен.

Разные полезные мелочи

И еще немного важных, хоть и некрупных, улучшений:

  • Профилирование теперь работает для удаленных проектов и для проектов на WSL. В обоих случаях требуется задать путь к исполняемому файлу Perf в настройках Settings/Preferences | Build, Execution, Deployment | Dynamic Analysis Tools | Perf.

  • При удаленной разработке в Docker теперь можно не синхронизировать исходный код между локальной машиной и контейнером, если вы включили в Docker сопоставление томов (mapped volumes). Для этого достаточно в настройках Deployment выбрать тип соединения Local or mounted folder.

  • Постфиксное автодополнение теперь работает и для литералов.

  • Для работы с WSL больше не требуется SSH, ведь теперь CLion использует для работы с подсистемой специальный API WSL.

  • В CLion теперь видны все дистрибутивы WSL, которые выдает команда wsl -l -v — независимо от способа установки (из Microsoft Store или пользовательского дистрибутива).

На этом у нас все. Если вы дочитали до конца, напишите в комментариях ваше любимое сочетание клавиш в CLion :)

Оставляйте ваши вопросы, мысли и предложения в комментариях — нам интересно, что вы думаете, и мы всегда рады помочь!

Команда CLion
The Drive to Develop

Комментарии (35)


  1. Sazonov
    29.07.2021 20:20
    +5

    С удовольствием покупаю вашу IDE для личного пользования. Спасибо за работу, очень радует набор фич в последнем релизе.

    Пользуясь случаем, существует ли возможность починить вот этот баг, который висит уже год и сводит на нет все прелести remote host: https://youtrack.jetbrains.com/issue/CPP-21192


    1. anastasiak2512 Автор
      29.07.2021 23:22
      +3

      Спасибо за такой позитивный отзыв! Очень приятно)

      Про проблему обсудим с командой. Там это задача по дороге сменила ответственного девелопера, мы подумаем как ее вписать в наши планы и в чем там вообще в корне проблема и по мотивам отпишемся в трекере.


      1. Sazonov
        03.08.2021 15:12

        Очень ждём, спасибо. У нас без precompiled headers очень медленная сборка.


        1. anastasiak2512 Автор
          03.08.2021 16:32

          Мы смотрим, пока не очень понятно, чем ситуация отличается от той, где PCH нормально работают. Отпишемся, как будет больше ясности, в задаче.


  1. gdt
    30.07.2021 04:53

    Есть ли хотя бы теоретическая возможность иметь опенсорсный сторонний плагин, добавляющий поддержку отладчика VS?


    1. anastasiak2512 Автор
      30.07.2021 11:38

      Лицензия отладчика VS не позволяет запускать его не из MS-продуктов. Так что даже если кто-то такой и сделает, использовать его будет нарушением лицензии VS.


  1. gudvinr
    30.07.2021 06:04

    Как у вас в этот раз дела с фризами всего редактора во время работы?


    1. anastasiak2512 Автор
      30.07.2021 11:39

      Фризами мы постоянно занимаемся. Так что общий ответ - в этой версии довольно много фиксов подобных проблем. Но наверное вас интересует что-то более конкретное?


      1. gudvinr
        30.07.2021 17:21

        Сейчас я не могу что-то конкретное показать, но если не ошибаюсь, для этого есть мета-задача, где описаны, кажется, все похожие фризы, которые я встречал.


        На большом проекте это довольно часто происходит, настолько что пришлось отказаться от CLion потому что так работать очень трудно. Несколько раз (ещё кажется в 2020.X) я отправлял дампы после, но и в 2021.1 тоже периодически возникают похожие зависания.


        Поэтому довольно спорные ощущения возникают. С одной стороны постоянно добавляются новые функции, которые кому-то наверняка нужны, но при этом годами приходится бороться с тем, что основа функциональности IDE — редактор кода с подсветкой синтаксиса и анализом кода — работает ужасно. Это всё-таки утилитарный продукт для всех, кроме JB, и хочется им пользоваться, а не разбираться почему он мешает работать, вместо того, чтобы помогать и годами постить и анализировать багрепорты. Причём это о стабильных версиях речь идёт, а не о EAP


        1. anastasiak2512 Автор
          30.07.2021 18:01
          +1

          Спасибо за ответ. Мы понимаем, что проблемы с перфомансом и фризами все еще есть. И пользователи от них страдают. Но они часто разные от версии к версии, и даже в одном и том же тикете могут внутри оказываться самые разные дампы) Поэтому лучше приходите с конкретными примерами, которые раздражают именно вас, мы посмотрим и ответим вам точнее, что это и когда мы планируем это поправить.
          Переход на Clang, переписывание DFA, переделка работы с юнит тестами - все эти изменения, на самом деле, так или иначе делаются, чтобы улучшить производительность. И еще много больших изменений запланировано или уже в работе.


        1. storoj
          30.07.2021 21:54

          Я бросил попытки понять и простить, потому что годами ничего не меняется. Вряд ли я когда-либо снова запущу любую из IDE, кроме IDEA. Она почему-то работает хорошо.


  1. ctapmex
    30.07.2021 11:37

    Этот релиз был прям очень ожидаем мной. Начиная с первых EAP пользовался.

    • запуск в отдельной консоли вроде такая мелочь, но реально нужна для части проектов

    • выполнение доп. шагов перед запуском/отладкой сильно упрощает жизнь

    • работа с отдельно установленными машинами в WSL позволяет держать множество отдельно установленных под проекты виртуалок. На фоне того, что включение WSL2 ломает работу VirtualBox, это очень нужно. Есть вариант использовать VmWare , но чем меньше разных типов виртуалок, тем лучше

    • CMakePresets реально упрощает жизнь, особенно когда не хочешь в публичный проект тащить файлы от IDE.

    к сожалению есть все еще привнесённые ошибки в старый функционал (баги завел). Но терпимо.

    сейчас по мне самой важной фичей, и кажется не сложной, является копирование конфигураций CMakePresets в штатную CLion конфигурацию. Т.к. то, что в CMakePresets оно read-only (и правильно). А часто хочется поправить часть параметров для отладки здесь и сейчас: портить CMakePresets не хочется; а просто задать новую конфигурацию, когда там много параметров, это долго и муторно.

    ах да. Открыл для себя, в рамках CMakePresets , что в CLion можно задать использование Ninja. Это же прям небо и земля по скорости сборки. VS Code и VC++ используют его по умолчанию, и выглядят очень шустрыми. Может и тут сделать его по умолчанию, и заодно для логов сборки сделать подсветку его логов ?


    1. anastasiak2512 Автор
      30.07.2021 11:47

      Спасибо за такой отзыв, это очень приятно!

      Про копирование конфигурации, который пришла из пресета, мысль интересная. Мы обсудим в команде. Нам казалось, что логичнее тогда отнаследоваться в CMakeUserPresets.json и править там, чем в сеттингах CLion.

      Ninja можно было задать и в родных конфигурациях CLion еще до пресетов. И мы как раз делаем его дефолтом) https://youtrack.jetbrains.com/issue/CPP-25935
      Про подсветку тоже есть тикет - https://youtrack.jetbrains.com/issue/CPP-17786 - пока не смотрели в его сторону.


    1. MadHacker
      30.07.2021 13:17

      VirtualBox (по крайней мере из последних) работает совместно с wsl2.
      Но надо явно ставить машине интерфейс паравиртуализации в kvm и в некоторых случаях обязательно включать ускорение 3д графики.
      В своих юзкейсах (десктоп Ubuntu ) потратил пару часов на выяснение какого чёрта (ускорение 3д графики, без него падала оболочка в убунте) и заметил снижение скорости работы виртуальной машины, но не критичное.


  1. borisxm
    30.07.2021 13:18

    Может команда clion возьмет на себя смелость пофиксить баг 7 летней давности youtrack.jetbrains.com/issue/IDEA-126491? Или если он назначен конкретному лицу, то теперь это лицо может исправлять его до бесконечности?


    1. anastasiak2512 Автор
      30.07.2021 13:32
      +2

      Данный тикет назначен на человека, который отвечает за подсистему. Причем это подсистема общая для всех IntelliJ IDEs. Так что назначенный человек, действительно, лучше всех понимает, что и как там можно делать, чтобы не сломать File watchers везде и для всех. Не то, чтобы это значит, что мы не можем забрать и поправить для всех, это норм практика. Но у нас тоже ресурсы ограничены и пока до такого руки не доходят.
      Я переговорю с назначенным человеком и узнаю, какой там план.


  1. MadHacker
    30.07.2021 13:23

    Спасибо за релиз.
    Но это был первый случай, когда мне пришлось с EAP откатываться на стабильную версию. На одном из промежуточных патчей Clangd стал есть памяти как не в себя (до полного out of memory) и не поддавался никакому контролю. В релизе вроде починено.
    И ещё при возникновении ошибок в Clion не всегда удаётся их отрепортить. Периодически при ошибках в Clion отваливаются настройки прокси (или авторизации на ней) и отправить отчёт из формы не удаётся. А после перезапуска прокси снова работает, но отчёта уже нет.
    В остальном — ждём дальнейшего развития :)


    1. anastasiak2512 Автор
      30.07.2021 13:29

      Приносим извинения, хотя в целом EAP немного "имеет права быть нестабильным") Но мы очень внимательно следим за фидбеков, который нам доносят EAP-пользователи, чтобы успевать убирать такие проблемы в релизе.

      О каким ошибках идет речь? Exceptions?


      1. MadHacker
        02.08.2021 13:31

        Просто ЕАП обычно стабильны, и такие моменты вызывают удивление :)
        Да. При некоторых Exception и вот почему то при запуске после падения по out of memory.
        Причём прокси умирает сразу во всех подсистемах. Из окна настроек тестовый конект не проходит, маркет плагинов не обновляется, репорты не отправляются.
        Перезапуск всё лечит.
        Ещё когда встаёт новая версия и происходит импорт настроек из старой — тоже бывает история с тем, что прокси не срабатывает и не даёт подключить лицензию с аккаунта. Приходится включать в триал и потом уже подключать аккаунт после полной загрузки среды.


        1. anastasiak2512 Автор
          02.08.2021 13:34

          Давайте попробуем через саппорт разобраться в проблеме. Нам наверное будут нужны как минимум логи IDE. Это вообще не нормальное поведение.


          1. MadHacker
            03.08.2021 13:21

            Подскажите что потребуется. И если эта ситуация снова возникнет — оформлю багрепортом.


            1. anastasiak2512 Автор
              03.08.2021 16:30

              Для начала лог IDE. Сложно пока попросить что-то больше. Надо разбираться


  1. iroln
    30.07.2021 17:51

    У меня есть Qt CMake-based проект. CMake проект состоит из CMake-подпроектов, где есть несколько исполняемых файлов и несколько библиотек. Проект надо собирать для x86 и x86_64. Я попробовал настроить проект в CLion — замучился с вашими конфигурациями сборки. Вроде бы всё довольно гибко сделано, но на каждый "чих" надо вручную создавать Toolchains и CMake профили. И я не могу взять и собрать все мои подпроекты за раз для x86 и/или x64, каждый подпроект с исполняемым файлом надо собирать отдельно, выбирая соответствующую конфигурацию сборки из списка тех, что он там насоздавал.


    В QtCreator как-то всё сильно проще сейчас происходит. Ладно, Qt он сам находит и настраивает конфигурации тулчейнов для него, потому что он под Qt заточен, но там не надо каждый подпроект собирать отдельно, само всё как надо конфигурируется и собирается сразу. Есть две платформы: x86, x64 и в каждой автоматически настроились Release/Debug таргеты и всё. Выбираешь что нужно, делаешь сборку и все подпроекты со всеми библиотеками собираются. В CLion же надо каждый раз тыкать и выбирать что я хочу собрать, какой подпроект с executable в какой конфигуцрации под какую платформу. Сильно напряжно. Можно это как-то упростить?


    Ну и запуск, по умолчанию, он, конечно же не работает, потому что никаких Qt библиотек не находит. Но это понятно почему.


    Не планируется вообще сделать какой-то плагин для Qt, чтобы он максимально автоматизировано настраивал окружение для работы с Qt-проектами?


    В QtCreator вот так само всё настроилось


    1. anastasiak2512 Автор
      30.07.2021 18:11

      Почему не создать просто два тулейчна для x86 и x86_64, и по CMake profile, использующему каждый из тулчейнов? Для сборки всего есть
      - Build Project (соберет вообще все)
      - Build all in <config> (соберет все в выбранной конфигурации)
      Они в меню Build живут.

      Еще можно воспользоваться новомодными CMake Presets) Будут профили сборки везде универсальные. Но это уже так, как дальнейшее развитие для проекта.


      1. iroln
        30.07.2021 18:24

        Так я и создал два тулчейна и два профиля. Но в конфигурациях сборки, которые генерируются для таких настроек каждый executable надо собирать отдельно.


        Заголовок спойлера




        Вот спасибо! Build all in… — это то, что нужно! Build Project у меня недоступно, но Build all вполне достаточно сейчас.


        • Build Project (соберет вообще все)
        • Build all in (соберет все в выбранной конфигурации)
          Они в меню Build живут.


        1. anastasiak2512 Автор
          30.07.2021 22:54

          Но в конфигурациях сборки, которые генерируются для таких настроек каждый executable надо собирать отдельно.

          Да, можно собирать для каждого профиля по-отдельности, а можно вот указанными Build командами. Они для такого и сделаны. Наверное, не очень очевидно и удобно, что они вынесены в отдельное меню, но не загромождать же ими панель.. Пока как-то лучшего места не придумали для них.


        1. anastasiak2512 Автор
          02.08.2021 13:32

          Чтобы разобраться, почему Build Project недоступно, надо вероятно смотреть на содержимое .idea директории. Если готовы, пришлите в саппорт архив и попробуем разобраться.


  1. maksim-q
    30.07.2021 17:57

    CLion вообще никогда не пользовался, но слежу постоянно за развитием. Как раз перетаскиваю несколько проектов на CMake, а тут и поддержка CMakePresets в CLion появилась. Решил затестить, как оно будет работать с нашими проектами. На данный момент, для них актуально следующее: сборка пресета в VS - всё работает гладко, CMake-GUI - всё ОК, CMake через консоль в Ubuntu - без проблем. Запускаю CLion, всё красиво: и в корпоративном прокси авторизацию запросили, и самоподписанному сертификату предложили доверять. Открываю проект с CMakePresets. Появляется окошко с созданием профилей, никакие пресеты не подтягиваются (речь идёт о buildPresets, конечно). Что я только ни делал: пробовал вызывать запрятанную команду Load CMake Presets, пробовал Reset Cache and Reload Project - ничего не происходит вообще, Event Log пустой, в Build, Execution, Deployment - CMake профили не появляются.


    1. anastasiak2512 Автор
      30.07.2021 18:12

      Что-то идет не так) А можете прислать лог IDE в clion-support@jetbrains.com?


      1. maksim-q
        30.07.2021 22:16

        Выслал


    1. ujohnny
      30.07.2021 18:19

      Спасибо за комментарий! Какой версии CMake presets Вы используете? Нет ли дополнительных ошибок в problems окне?


      1. maksim-q
        30.07.2021 22:18

        Используется CMakePresets версии 2. Кроме "Typo In Word" в Current File при открытом CMakePresets.json ничего нет. В Project Errors пусто.


        1. anastasiak2512 Автор
          30.07.2021 22:46

          Лог получили, посмотрим и ответим в почте! Спасибо


  1. neverlight
    02.08.2021 22:43

    А когда можно ожидать поддержку модулей из C++20?


    1. anastasiak2512 Автор
      02.08.2021 23:28

      Как только она появится в Clang, автоматом после апдейта будет и в CLion уже что-то. А может, мы и раньше что-то сделаем. Но, если честно, пока в CMake модули не завезли, не очень понятно, куда нам торопиться)