Отладка приложений 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 2.3
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-5.15/qtquick-debugging.html