В этой статье рассматривается одна из причин такого поведения IDE Qt Creator и приводится решение этой проблемы. Актуальность:
В интернете нет описания и решения данной проблемы (я искал).
Некоторые решения данной проблемы, которые может выполнить пользователь, вредоносны.
ИИ не предлагает верного решения.
У ide Qt Creator нет лога ошибки данной проблемы (QT_DEBUG_PLUGINS=1 и gdb бесполезны).
Введение
У меня несколько раз за шесть лет возникала эта проблема с Qt Creator, и каждый раз я решал её неправильно, полностью переустанавливая Qt Creator. Это решение неверно, так как при этом теряются настройки профилей и сессий Qt. Переустановка с помощью sudo apt reinstall qtcreator и sudo apt purge qtcreator; sudo apt install qtcreator не помогает решить эту проблему.
Причина данной проблемы
Причина данной проблемы это повреждение файла в ~/.config/QtProject. Причём Qt Creator никак не логирует эту ошибку, даже при запуске с флагом QT_DEBUG_PLUGINS=1 или в gdb. Дело в том, что Qt Creator при запуске и переходе между вкладками («Проект», «Отладка», «Редактор») или изменении масштаба каждый раз читает и записывает файл ~/.config/QtProject/QtCreator.ini. И если этот файл переполнится, например, на 570 МБ, запуск и все операции, использующие этот файл, будут длиться по 10 секунд в зависимости от размера файла ~/.config/QtProject/QtCreator.ini. Неисправность файла QtCreator.ini заключается в том, что по неизвестной, но часто возникающей причине Qt Creator записывает битые данные, которые в текстовом виде превращаются в одну длинную строку более 570 МБ. В моём файле ~/.config/QtProject/QtCreator.ini было два сектора с такими битыми данными.
Первый — самый большой 500 мб+ WatchItems=140510285099456\\004ÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃ
Второй параметр — 30 МБ+, отвечающий за историю поиска кода в проекте:
FindCompletions\40\Flags=0
FindCompletions\40\Text=on_pushButton_sum_clickedÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÂÃÂÃÂÃÂÃ
Как видно, параметры разные, но механизм сбоя похож. Причину сбоя выяснить не удалось; возможно, она связана с кодировкой и так далее
Исправить ошибку очень просто: необходимо удалить повреждённую строку через редактор nano сочетанием клавиш Ctrl+K, затем, при желании, вернуть пустые значения сектора и сохранить файл. Данный способ удалит только повреждённые участки истории Qt Creator. Видео решения проблемы и её проявления:
Заключение
Возможно, кому‑то пригодится такое решение проблемы долгого запуска Qt Creator с последующими фризами. Самое главное в таком решении, что сохраняются настройки профилей Qt и сессий Qt.
domix32
Звучит как кейс для разбора@PvsTeam.
Кажется проблема с WatchItems находится тут - запись полупустого QStringList пишет кучу мусора из неинициализированной памяти. С FindCompleteions видимо похожая история и пишутся какие-то неполные QStringlIst
PVE-Vladimir Автор
Тут ещё создаётся файл QtCreator.ini.lock, который, по-видимому, нужен для того, чтобы ограничить доступ к файлу QtCreator.ini. Я думал, что причина, возможно, связана с тем, что из-за некорректной блокировки доступа к файлу какой-то поток записывает мусор. Вообще, это очень сложный сбой, периодически возникающий. Неясно, у какого количества пользователей вообще происходил такой сбой и когда он появился, сколько человек полностью удаляли QtCreator или переустанавливали Linux из backup, не зная, что причина в этом. Статистики нет =(
domix32
Если я правильно разобрался в цепочке вызовов, то эта штука срабатывает при записи истории вызовов в отладчике. Вероятно когда в список отладчика добавляется выражение для отслеживания, тогда же оно и пишет его в этот файл. Правда непонятно, почему оно пишет весь аллоцированный список выражений, а не только активные и почему оно в принципе резервирует памяти под 500 метров. Есть подозрение что вместе с этим там ещё и квадратичный алгоритм закрался где-то для обработки всего этого.
PvsTeam
Да, кейс интересный. Выпишем себе, чтобы вернуться к нему, если будет возможность
PVE-Vladimir Автор
Буду следить. Если что, могу отправить дефектный ~/.config/QtProject/.