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

Средства диагностики Плагин для Qt Creator Qt5 и Qt6

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров1.2K

Производительность любого приложения является главным приоритетом с точки зрения клиента. Для разработчика выявление проблем эффективности до релиза действительно является сложной задачей, которую помогают решать плагины или расширения среды разработки. К сожалению, в Qt Creator нет таких же удобных диагностических инструментов, как Visual Studio Diagnostic Tools. Вместо этого есть профилирование, более функциональные и сложные инструменты диагностики: QMLProfiler, Valgrind с набором инструментов и визуализацией Kcachegrind. Поэтому, для удобства, многим удобнее было бы пользоваться разработанным плагином DiagnosticTools для Qt Creator (Qt5, Qt6), в котором вы можете получить подробную информацию о разрабатываемых приложениях во время отладки кода.

Ui плагина
Ui плагина

Как включить инструмент диагностики DiagnosticTools для Qt Creator

По умолчанию окно диагностических инструментов не открывается автоматически во время отладки. Вы можете включить его вручную, выбрав из меню «Разделить» DiagnosticTools на левой боковой панели, как показано на рисунке 1

 Рисунок 1: Включить диагностические инструменты
Рисунок 1: Включить диагностические инструменты

Существует аналогичный проект с меньшой функциональностью, разработанный более 8 лет назад для Qt4. На мой взгляд, он уже не актуален, поэтому я создал свой проект как отдельный, основываясь на данном решении. Мой Плагин был протестирован в Linux. Мой проект не проходил тестирование на MacOS и Windows, но код содержит все необходимое для сборки под эти операционные системы.

Для добавления собранного плагина в IDE Qt Creator требуется релизную версию плагина /build/Qt_6_4_2_Qt_6_4_2-Release/lib/qtcreator/plugins/libDiagnostictools.so добавить в директорию к другим плагинам, директория /usr/lib/x86_64-linux-gnu/qtcreator/plugins/ или ваша по похожему адресу там где установлен IDE Qt Creator.

пример команды:

sudo cp '/home/vladimirpve/Doc/plagin/Diagnostictools Qt_6_4_2/build/Qt_6_4_2_Qt_6_4_2-Release/lib/qtcreator/plugins/libDiagnostictools.so' /usr/lib/x86_64-linux-gnu/qtcreator/plugins/

Стоит отметить что тема сборки проектов plagin для Qt Creator слабо описана в источниках для версий Qt5 и Qt6. По этой причине на примере сборки этого плагина я написал небольшую статью с основными моментами. Вкратце для сборки плагина следует добавить дополнительные параметры запуска -pluginpath %{buildDir} и для версии Qt5 установить патч с изменениями библиотек. Поэтому я не буду тут останавливаться на общей информации и перейду сразу к описанию плагина.

Описание плагина Qt Creator

Плагин представляет собой аналог команды

ps -p <PID> -o pid,vsz,rss

которая выводит показания загрузки памяти vsz и rss по PID процесса. Плагин строит диаграмму нагрузки на процессор и расход памяти как это показано на рисунке 2.

 Рисунок 2: Диаграммы контроля состояния процесса отладки с помощью разработанного плагина
Рисунок 2: Диаграммы контроля состояния процесса отладки с помощью разработанного плагина

В плагине есть расширенный функционал, который позволяет работать одновременно с несколькими запущенными процессами (программы запущенные в IDE Qt Creator). Этот функционал осуществляется благодаря отслеживанию состояния

class PROJECTEXPLORER_EXPORT RunControl : public QObject

этот класс имеет метод allRunControls() который может возвращать полный список PID от всех программ запущенных в IDE Qt Creator. Соответственно далее полученный массив

QList<ProjectExplorer::RunControl *> runControls = ProjectExplorer::ProjectExplorerPlugin::instance()→allRunControls();

обрабатывается с помощью программного кода и результат записывается в диаграмму. Переключение между контролируемыми процессами, по его идентификатору (PID), осуществляется из окна UI разработанного плагина, через ввод числа (порядочного номера запущенного процесса) в QspinBox или переключением его стрелочных кнопок как на рисунке 3.

 Рисунок 3: QspinBox который переключает контроль между доступными процессами, по его идентификатору (PID)
Рисунок 3: QspinBox который переключает контроль между доступными процессами, по его идентификатору (PID)

Также переключение между контролированными процессами, по его идентификатору (PID), возможно в автоматическом режиме путем активации QcheckBox "AutoMax", как на рисунке 4. Данный чекбокс будет всегда переключать номер контролируемого (PID) на последний максимальный доступный процесс запущенной программы в IDE Qt Creator. Это является очень удобной и полезной функцией, если вы будите запускать сразу несколько экземпляров одного и того же кода. Вывод информации о последнем запущенном процессе является более актуальным, особенно если учесть тот факт, что программа является завершенной, в том случае, если в IDE Qt Creator закрыта соответствующая процессу вкладка «Вывод приложения».

 Рисунок 4: Активация QcheckBox "AutoMax" для контроля последнего максимального процесса
Рисунок 4: Активация QcheckBox "AutoMax" для контроля последнего максимального процесса

В плагине есть поддержка двух языков русского и английского. По умолчанию в плагине установлен английский язык, переключение языка осуществляется путем активации QcheckBox "ru", как на рисунке 5. Язык по умолчанию можно поменять изменив исходный код при сборке плагина. Также в плагине есть функционал, который сохраняет выставленные настройки после закрытия окна плагина только в текущей запущенной сессии IDE Qt Creator.

 Рисунок 5: Активация QcheckBox "ru" для включения русского перевода
Рисунок 5: Активация QcheckBox "ru" для включения русского перевода

Таймер, встроенный в плагин, отображает время в течение которого собиралась информация о пиковом использовании памяти RSS и VSZ. Пиковое значение указано снизу под надписью Пик, а сверху отображается последнее значение использованной памяти. Как на рисунке 6.

 Рисунок 6: Значения максимумов пиков за время сессии
Рисунок 6: Значения максимумов пиков за время сессии

В плагине есть функция отображения загрузки процессора в данный момент и кнопка которая сбрасывает графики и собираемую статистику Пик вместе с таймером, как на рисунке 7.

 Рисунок 7: Загрузка процессора и кнопка сброса статистики
Рисунок 7: Загрузка процессора и кнопка сброса статистики

Отображение подсказок плагина настроена на поле QLedit при наведении на которое отображается всплывающие окно с подсказками о контролируемом параметре, как на рисунке 8. Текст подсказок контролируемых параметров, есть на двух языках и записан: RSS: Размер резидентной памяти в килобайтах (Resident Set Size)— это количество физической памяти, используемой процессом в данный момент. Это память, которая фактически загружена в оперативную память. VSZ: Размер виртуальной памяти процесса в килобайтах (Virtual Size)— это общее количество виртуальной памяти, используемой процессом, включая все его модули и библиотеки.

 Рисунок 8: Диалоговые окна с подсказками о контролируемых данных
Рисунок 8: Диалоговые окна с подсказками о контролируемых данных

Плагин можно масштабировать до минимального размера просто уменьшив диалоговое окно, как на рисунке 9, веденные настройки можно изменить развернув плагин обратно. История имения размера плагина работает так же как и для других диалоговых окон Qt Creator.

 Рисунок 9: Минимальный размер плагина
Рисунок 9: Минимальный размер плагина

Заключение

В заключение, разработанный плагин для Qt Creator представляет собой мощный инструмент для мониторинга и анализа загрузки памяти и процессора тестируемых программ. Его функционал, позволяет пользователям получать актуальные данные о состоянии процессов, что особенно полезно при отладке и оптимизации программного обеспечения.

Теги:
Хабы:
Всего голосов 8: ↑8 и ↓0+10
Комментарии0

Публикации

Работа

QT разработчик
8 вакансий
Программист C++
93 вакансии

Ближайшие события