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