Комментарии 21
К сожалению, всё больше проблем в Qt Creator. На днях попытка снять комментарий привела к утечке памяти и аварийному завершению при исчерпании всей доступной ОЗУ и swap. Версия 12.0.1. пришлось подправить код в другом редакторе и вновь открыть в ide. Ошибка воспроизводится.
Возможно, это следствие быстрого наращивания функционала. Из последнего, вызывают вопросы интеграция с CompilerExplorer и возможность дебага CMake файлов. Первая, на мой взгляд, довольно сырая (хотя отметки Experimental
в меню нет), а вторую так и не удалось ни разу запустить :(
Можем посоветовать открыть тикет у них в баг-трекере. На вопросы они отвечают, да и ошибки правят.
Приходилось писать им в баг-трекер (QTBUG-53244). В результате обратили внимание только через полтора года, закрыли из-за того что не смогли воспроизвести. Пришлось прислали им видео, разобраться в исходниках, исправить ошибку. После этого они внесли изменения. Полтора года это много для довольно критичного бага.
У меня отладка СМаке работает на 3.28, правда тоже некоторые не отлаживает. Рандом короче.
А вы заводите MR на исправление этих ошибок? Так было бы больше пользы от проведенной проверки.
Составление грамотного MR требует значительного времени для стороннего разработчика. Как минимум нужно вникнуть в тонкости проекта, его code style, пройти ревью и прочее. Поэтому ограничиваемся обычными баг-репортами. На основе данной статьи создали QTCREATORBUG-30284.
Прошу вас в Заключении в статье об этом упомянуть! У вас в статье много недочётов указано, после прочтения каждого подзаголовка задаюсь вопросом:"Но они же сделали багрепорт в Qt Company?" "Ну после такого-то они сделали багрепорт?" "А теперь?"
Раньше под каждой подобной статьёй был FAQ, потом стали оставлять ссылку https://pvs-studio.ru/ru/blog/posts/a0085/
В какой-то момент перестали добавлять, хотя вопросы не прекратились.
Не по теме.
Думаю на vim перебраться, но в нём хуже поддержка Qt. :(
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. Кстати, интересно было-бы почитать?
del
Qt Creator* ищет ошибки в Qt Creator