Как отладка и/или профилирование 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:

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

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

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

  3. установите флажок для отладки 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, короткий и понятный: