Отладка приложений QML
При разработке приложения с QML существует множество способов отладки возможных проблем. В следующих разделах описаны доступные инструменты отладки и способы их использования.
API консоли
| Функция | Описание |
|---|---|
| Лог | Используйте console.log, console.debug, console.info, console.warn, или console.error для вывода отладочной информации в консоль.Например: function f(a, b) {
console.log("a is ", a, "b is ", b);
} Вывод генерируется с помощью методов qCDebug, qCWarning или qCCritical в C++, с категорией |
| Ассерция |
console.assert проверяет, что выражение истинно. Если нет, то записывает необязательное сообщение в консоль и выводит стек вызовов.Например: function f() {
var x = 12
console.assert(x == 12, "This will pass");
console.assert(x > 12, "This will fail");
} |
| Таймер |
console.time и console.timeEnd регистрируют время (в миллисекундах), затраченное между вызовами. Оба принимают строковый аргумент, идентифицирующий измерение.Например: function f() {
console.time("wholeFunction");
console.time("firstPart");
// first part
console.timeEnd("firstPart");
// second part
console.timeEnd("wholeFunction");
} |
| Трейс |
console.trace выводит стек вызовов выполнения JavaScript в той точке, где он был вызван. Этот стек вызовов содержит имя функции, имя файла, номер строки и номер столбца. Стек вызовов ограничен последними 10 кадрами. |
| Счётчик |
console.count выводит текущее количество раз, когда определенный фрагмент кода был запущен, вместе с сообщением.Например: function f() {
console.count("f called");
} Приведенный выше фрагмент кода печатает |
| Профилирование |
console.profile включает профилировщики QML и JavaScript. Вложенные вызовы не поддерживаются и в консоль выводится сообщение об ошибке. |
| Конец профилирования |
console.profileEnd отключает профилировщики QML и JavaScript. Вызов этой функции без предыдущего вызова console.profile выводит в консоль предупреждение. Клиент профилирования должен быть подключен до этого вызова для получения и хранения данных профилирования.Например: function f() {
console.profile();
//Call some function that needs to be profiled.
//Ensure that a client is attached before ending
//the profiling session.
console.profileEnd();
} |
| Исключение |
console.exception выводит сообщение об ошибке вместе со стеком вызовов выполнения JavaScript в той точке, где он вызван. |
Отладка импорта модулей
Установите переменную среды QML_IMPORT_TRACE для включения вывода отладки от механизмов загрузки импорта QML.
Например, для простого файла QML, такого как:
import QtQuick
Rectangle { width: 100; height: 100 } Если вы установите QML_IMPORT_TRACE=1 перед запуском Сцены QML или вашего QML C++ приложения, вы увидите вывод, похожий на:
QQmlImportDatabase::addImportPath "/qt-sdk/imports" QQmlImportDatabase::addImportPath "/qt-sdk/bin/QMLViewer.app/Contents/MacOS" QQmlImportDatabase::addToImport 0x106237370 "." -1.-1 File as "" QQmlImportDatabase::addToImport 0x106237370 "Qt" 4.7 Library as "" QQmlImportDatabase::resolveType "Rectangle" = "QDeclarativeRectangle"
Инфраструктура отладки QML
Модуль Qt QML предоставляет сервисы для отладки, инспектирования и профилирования приложений через TCP-порт или локальный сокет.
Примечание: Плагины qmltooling , необходимые для отладки и профилирования QML-приложений на устройствах, автоматически устанавливаются при установке Qt. Они должны быть развернуты на устройствах, чтобы отладка и профилирование работали.
Включение инфраструктуры
При компиляции приложения необходимо явно включить инфраструктуру отладки. Если вы используете qmake, вы можете добавить параметры конфигурации в файл проекта .pro:
- Qt Quick 1:
CONFIG+=declarative_debug - Qt Quick 2:
CONFIG+=qml_debug
Если вы используете другую систему сборки, вы можете передать следующие определения компилятору:
- Qt Quick 1:
QT_DECLARATIVE_DEBUG - Qt Quick 2:
QT_QML_DEBUG
Примечание: Включение инфраструктуры отладки может повлиять на целостность вашего приложения и системы, поэтому вы должны включать ее только в контролируемой среде. При включении инфраструктуры приложение отображает следующее предупреждение:
QML debugging is enabled. Only use this in a safe environment.
Запуск приложений
Для включения отладки — с самого начала или для подключения отладчика позже — запустите приложение с указанными аргументами:
-qmljsdebugger=port:<port_from>[,port_to][,host:<ip address>][,block][,file:<local socket>][,services:<comma-separated list of services to enable>]
Где:
- обязательный
port_fromуказывает порт отладки или начальный порт диапазона портов, если указанport_to - необязательный
ip addressуказывает IP-адрес хоста, на котором работает приложение - необязательный
blockпредотвращает запуск приложения до тех пор, пока клиент отладки не подключится к серверу - необязательный
fileуказывает локальный сокет. - необязательный
servicesуказывает службы для включения; по умолчанию все, которые найдены. Обратите внимание, что службаv4 debugотключает JIT.
После успешного запуска приложения оно отображает следующее сообщение:
QML Debugger: Waiting for connection on port <port_number> или QML Debugger: Connecting to socket at <file>"
Подключение к приложениям
Когда приложение запущено, IDE или инструмент, реализующий двоичный протокол, может подключиться к открытому порту.
Qt предоставляет инструмент командной строки qmlprofiler для захвата данных профилирования в файл. Чтобы запустить этот инструмент, введите следующую команду:
qmlprofiler -p <port> -attach <ip address>
Отладка с помощью Qt Creator
Qt Creator использует инфраструктуру отладки для отладки, инспектирования и профилирования приложений Qt Quick на рабочем столе, а также на удалённых устройствах. Qt Creator предоставляет интегрированные клиенты для отладки JavaScript, инспектирования дерева объектов и профилирования активности движка QML. Более подробная информация в Qt Creator: Отладка проектов Qt Quick.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qtquick-debugging.html