Как отладка и/или профилирование 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-project ищу помощь, но я не понял, какие шаги необходимы, когда вы хотите отлаживать/профилировать удаленное приложение с помощью среды настройки сборки.
Итак, я хотел бы знать, нужен ли какой-либо из следующих шагов, и в положительном случае, что на самом деле является необходимым кодом.
- библиотеки Qt ./настроить конкретные варианты.
- QtCreator конкретные параметры для подключения / запуска к удаленному приложение.
- Cmake включает и библиотеки, необходимые в конечном исполняемом приложении .
приветствуется любая помощь, ссылка и т. д.
5 ответов
С 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: соединение установлено
после этого я смог установить точки останова и проверить переменные. Также только что работал профилировщик, доступный через страницу analyze.
ваш случай, очевидно, немного сложнее, чем ваш разработка встроенного приложения.
Qt creator не поддерживает развертывание и выполнение проектов на основе 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;
проверка docs все данные ответы кажутся ненужными. Далее он жестко кодирует отладочный код в выпусках. Я понятия не имею, почему QQmlDebuggingEnabler
было бы необходимо, но если вы проверите код здесь и здесь, вы узнаете, что instatiation из QQmlDebuggingEnabler
is не надо. Просто включите QQmlDebuggingEnabler
и выберите QT_QML_DEBUG
флаг, например, как это (CMake)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DQT_QML_DEBUG ")
однако согласно docs QQmlDebuggingEnabler
Не надо.
Furtermore: профилирование неоптимизированного кода не имеет смысла.
для меня задание QT_QML_DEBUG
как флаг и проверка флажка для отладки QML достаточно.
вот" более чистая " альтернатива ответ @ sebasgo, пункт 1.
если вы используете Qt5 с QtQuick2, вам нужно только определить QT_QML_DEBUG
перед QtQuick
в некотором файле (не имеет значения, какой файл, если он является частью исполняемого файла). Например, достаточно запустить свой main.cpp
со строк:
#define QT_QML_DEBUG
#include <QtQuick>
это не повредит, если вы вместо этого используете компилятор -DQT_QML_DEBUG
флаг (например, через qmake определяет или cmake add_definitions директивы), возможно только в отладочных сборках.
если вы застряли с legacy QtQuick1 (в Qt5 или Qt4), используйте QT_DECLARATIVE_DEBUG
макрос вместо этого, например,
#define QT_DECLARATIVE_DEBUG
#include <QtDeclarative>
для любопытных, вот соответствующий источник Qt, короткий и понятный: