Как Qt — Qml отладки и / или профилирования?

Какие части программного обеспечения Qt / QML необходимы для компиляции в приложении, чтобы иметь возможность отлаживать / профилировать QML?

Мое текущее приложение построено с использованием cmake и работает на встроенном устройстве. Кроме того, я начинаю использовать Qt 4.8.3 (до сих пор 4.7.0).

Я хотел бы использовать эти необычные / интересные функции (для разработчиков встроенных приложений):

http://doc.qt.digia.com/qtcreator/creator-qml-performance-monitor.html

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

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

  • Библиотеки Qt ./ Configure конкретные варианты.
  • QtCreator специфические опции для подключения / запуска к удаленному приложению.
  • Cmake включает в себя и библиотеки, необходимые в конечном исполняемом файле приложения.

Любая помощь, ссылка и т. Д. Приветствуется.

8

Решение

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

Я занимаюсь разработкой настольного приложения Qt / QML, также созданного с помощью CMake. Мне пришлось выполнить следующие шаги, чтобы включить отладку QML:

  1. Включить средство отладки в код запуска моего приложения

      #include <QtDeclarative/qdeclarativedebug.h>
    
    /* [...] */
    
    QDeclarativeDebuggingEnabler enabler;
    
  2. добавлять QML_DISABLE_OPTIMIZER=1 в среду исполнения моего приложения

    Это можно сделать в Qt Creator на вкладке выполнения страницы проектов.

  3. Установите флажок для отладки QML, также найденной на вкладке выполнения

    Это добавляет необходимые параметры командной строки для связи между Qt Creator и компонентом отладчика QML, встроенным в приложение.

Если все прошло нормально, приложение приветствует вас следующим выводом, если он запущен в режиме отладки:

Отладка Qml включена. Используйте это только в безопасной среде!
QDeclarativeDebugServer: Ожидание соединения через порт 3768 …
QDeclarativeDebugServer: соединение установлено

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

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

Создатель Qt не поддерживает развертывание и выполнение проектов на базе CMake на встроенных платформах. Вам придется сделать это самостоятельно. Не забудьте передать необходимые аргументы вашему приложению для настройки отладки QML:

$ your-app -qmljsdebugger=port:3768,block

Чтобы подключить Qt Creator к удаленно запущенному приложению для сеанса профилирования, используйте соответствующие записи «Внешние» в меню «Анализ» в главном меню Qt Creator. Где также аналогичная опция для отладки с «Connect to Debug-Server» в «Debug»> «Debug».

12

Другие решения

Я использую Qt 5, и это стало еще проще. С моей стороны потребовался только один шаг для профилирования QML:

#include <QQmlDebuggingEnabler>

...

QQmlDebuggingEnabler enabler;
6

Проверка документы все приведенные ответы кажутся ненужными. Далее он жестко кодирует отладочный код в выпусках. Я понятия не имею, почему QQmlDebuggingEnabler было бы необходимо, но если вы проверите код Вот а также Вот, Вы поймете, что создание QQmlDebuggingEnabler является не необходимо. Просто включите QQmlDebuggingEnabler и установить QT_QML_DEBUG флаг например как это (CMake)

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DQT_QML_DEBUG ")

Однако в соответствии с документы QQmlDebuggingEnabler не обязательно.

Furtermore: профилирование неоптимизированного кода не имеет смысла.

Для меня настройка QT_QML_DEBUG достаточно установить флаг и установить флажок для отладки QML.

3

Вот «более чистая» альтернатива @ ответ Себасго, пункт 1

Если вы используете Qt5 с QtQuick2, вам нужно только определить QT_QML_DEBUG перед включением QtQuick в каком-то файле (не имеет значения, какой файл, если он является частью исполняемого файла). Например, достаточно начать свой main.cpp со строками:

#define QT_QML_DEBUG
#include <QtQuick>

Это не повредит, если вы вместо этого используете компилятор -DQT_QML_DEBUG флаг (например, через qmake DEFINES или сделать add_definitions директивы), возможно, только в отладочных сборках.

Если вы застряли с устаревшим QtQuick1 (в Qt5 или Qt4), используйте QT_DECLARATIVE_DEBUG вместо макроса, например

#define QT_DECLARATIVE_DEBUG
#include <QtDeclarative>

Для любопытных вот соответствующий источник Qt, краткий и не требующий пояснений:

2

С Qt 5.1 новая функция qInstallMessageHandler был добавлен.
Это позволит вам отлавливать и регистрировать ошибки и предупреждения, чтобы вы могли обращаться с ними по своему усмотрению.

-2
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector