Как стать автором
Обновить

Комментарии 21

К сожалению, всё больше проблем в Qt Creator. На днях попытка снять комментарий привела к утечке памяти и аварийному завершению при исчерпании всей доступной ОЗУ и swap. Версия 12.0.1. пришлось подправить код в другом редакторе и вновь открыть в ide. Ошибка воспроизводится.

Возможно, это следствие быстрого наращивания функционала. Из последнего, вызывают вопросы интеграция с CompilerExplorer и возможность дебага CMake файлов. Первая, на мой взгляд, довольно сырая (хотя отметки Experimental в меню нет), а вторую так и не удалось ни разу запустить :(

Можем посоветовать открыть тикет у них в баг-трекере. На вопросы они отвечают, да и ошибки правят.

Приходилось писать им в баг-трекер (QTBUG-53244). В результате обратили внимание только через полтора года, закрыли из-за того что не смогли воспроизвести. Пришлось прислали им видео, разобраться в исходниках, исправить ошибку. После этого они внесли изменения. Полтора года это много для довольно критичного бага.

Странно, что они так долго рассматривали такую ошибку. Кажется я даже костылил workaround подобного бага в QML.

Судя по соседней issue, они внесли тот же косяк в Qt 6. Но благо, уже поправили.

У меня отладка СМаке работает на 3.28, правда тоже некоторые не отлаживает. Рандом короче.

А вы заводите MR на исправление этих ошибок? Так было бы больше пользы от проведенной проверки.

Составление грамотного MR требует значительного времени для стороннего разработчика. Как минимум нужно вникнуть в тонкости проекта, его code style, пройти ревью и прочее. Поэтому ограничиваемся обычными баг-репортами. На основе данной статьи создали QTCREATORBUG-30284.

Прошу вас в Заключении в статье об этом упомянуть! У вас в статье много недочётов указано, после прочтения каждого подзаголовка задаюсь вопросом:"Но они же сделали багрепорт в Qt Company?" "Ну после такого-то они сделали багрепорт?" "А теперь?"

Спасибо за замечание. Добавил UPD со ссылкой на тикет в заключение.

Раньше под каждой подобной статьёй был FAQ, потом стали оставлять ссылку https://pvs-studio.ru/ru/blog/posts/a0085/

В какой-то момент перестали добавлять, хотя вопросы не прекратились.

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

Не по теме.
Думаю на vim перебраться, но в нём хуже поддержка Qt. :(

Сам с попеременным успехом пользуюсь Visual Studio, VSCode и QtCreator, но везде чего-то не хватает. Идеальную IDE ещё не изобрели :)

Благо, использование CMake, позволяет безболезнено переходить с одного "блокнота" на другой.

Editor::Editor(TextEditorActionHandler &actionHandler)
  : m_document(new JsonSettingsDocument(&m_undoStack))
{
  setContext(Core::Context(Constants::CE_EDITOR_ID));
  setWidget(new EditorWidget(m_document, &m_undoStack, actionHandler));

  connect(&m_undoStack, &QUndoStack::canUndoChanged, this,
          [&actionHandler] { actionHandler.updateActions(); });

Вопрос еще по этому участку кода, в конструктор попадает ссылка на TextEditorActionHandler &actionHandler

затем мы передаем этот объект в лямбду по ссылке

[&actionHandler] { actionHandler.updateActions(); }

Нет ли здесь проблемы? Что будет если объект actionHandler будет удален?

Немного полистал окрестности того кода: упомянутый вами actionHandler приходит из статического объекта ceEditorFactory, который создаётся при инициализации плагина CompilerExplorer. Из-за особенностей работы системы плагинов Qt Creator, его время жизни равно времени жизни программы. Если всё же предположить, что actionHandler будет удален, то получим висячую ссылку и падение программы при выполнении тела лямбда-функции.

Если же вас смущает то, что лямбда по ссылке захватывает ссылку, то на CppReference есть упоминание того, что происходит в этом случае. По сути, происходит захват оригинального объекта:

If a lambda odr-uses a reference that is captured by reference, it is using the object referred-to by the original reference, not the captured reference itself

утечки памяти в функции получения пути до отчётов о падении IDE

Это же наверное из категории применимости "null garbage collector” - утечки после отчёта о падении уже не важны, все равно закрываемся?

https://devblogs.microsoft.com/oldnewthing/20180228-00/?p=98125

Спасибо за ссылку. В целом, подход рабочий. "Некоторые" даже используют его в статических анализаторах: "Какая стратегия освобождения памяти используется в C и С++ ядре PVS-Studio?" :)

Статья шикарная, как всегда!

Товарищи, а кто уже попробовал альтернативный мультиплатформенный доставщик Qt?

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

Возможно выложу скрипт на GitHub, когда буду писать статью про написание плагинов для Qt Creator. Кстати, интересно было-бы почитать?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий