Какие части программного обеспечения Qt / QML необходимы для компиляции в приложении, чтобы иметь возможность отлаживать / профилировать QML?
Мое текущее приложение построено с использованием cmake и работает на встроенном устройстве. Кроме того, я начинаю использовать Qt 4.8.3 (до сих пор 4.7.0).
Я хотел бы использовать эти необычные / интересные функции (для разработчиков встроенных приложений):
http://doc.qt.digia.com/qtcreator/creator-qml-performance-monitor.html
Я искал корыто кварты-проект ищу помощь, но я не понял, какие шаги необходимы для отладки / профилирования удаленного приложения с помощью настраиваемой среды сборки.
Итак, я хотел бы знать, нужен ли какой-либо из следующих шагов, и в положительном случае, что на самом деле является необходимым кодом.
Любая помощь, ссылка и т. Д. Приветствуется.
С Qt 4.8 это стало довольно просто. Все необходимые библиотеки теперь являются частью самого Qt, и вам не нужно создавать библиотеку отладки для вашей версии Qt.
Я занимаюсь разработкой настольного приложения Qt / QML, также созданного с помощью CMake. Мне пришлось выполнить следующие шаги, чтобы включить отладку QML:
Включить средство отладки в код запуска моего приложения
#include <QtDeclarative/qdeclarativedebug.h>
/* [...] */
QDeclarativeDebuggingEnabler enabler;
добавлять QML_DISABLE_OPTIMIZER=1
в среду исполнения моего приложения
Это можно сделать в Qt Creator на вкладке выполнения страницы проектов.
Установите флажок для отладки 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».
Я использую Qt 5, и это стало еще проще. С моей стороны потребовался только один шаг для профилирования QML:
#include <QQmlDebuggingEnabler>
...
QQmlDebuggingEnabler enabler;
Проверка документы все приведенные ответы кажутся ненужными. Далее он жестко кодирует отладочный код в выпусках. Я понятия не имею, почему 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.
Вот «более чистая» альтернатива @ ответ Себасго, пункт 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, краткий и не требующий пояснений:
С Qt 5.1 новая функция qInstallMessageHandler был добавлен.
Это позволит вам отлавливать и регистрировать ошибки и предупреждения, чтобы вы могли обращаться с ними по своему усмотрению.