Отладка приложений 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++, с категорией "qml" или "js", в зависимости от типа файла, выполняющего логирование. См. также Методы отладки.
Ассерты
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");
} будет выводить f called: 1, f called: 2 ... всякий раз, когда f() выполняется.
Профилирование
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-порт.
Включение инфраструктуры
Вы должны явно включить инфраструктуру отладки при компиляции приложения. Если вы используете 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]
Где port_from (обязательно) указывает порт отладки или начальный порт диапазона портов при указании port_to, ip address (необязательно) указывает IP-адрес хоста, на котором работает приложение, и block (необязательно) предотвращает запуск приложения до подключения клиента отладки к серверу. Это позволяет начать отладку с самого начала.
После успешного запуска приложения оно отображает следующее сообщение:
QML Debugger: Waiting for connection on port <port_number>
Подключение к приложениям
Когда приложение работает, IDE или инструмент, реализующий двоичный протокол, может подключиться к открытому порту.
Qt предоставляет инструмент командной строки qmlprofiler для захвата данных профилирования в файл. Чтобы запустить инструмент, введите следующую команду:
qmlprofiler -p <port> -attach <ip address>
Отладка с помощью Qt Creator
Qt Creator использует инфраструктуру отладки для отладки, инспектирования и профилирования приложений Qt Quick на настольных компьютерах и на удаленных устройствах. Qt Creator предоставляет интегрированные клиенты для отладки JS, инспектирования дерева объектов и профилирования активности движка 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.9/qtquick-debugging.html