Отладка приложений 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", в зависимости от типа файла, производящего логирование. См. также Техники отладки.
Утверждения (Assert)
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");
} Отслеживание (Trace)
console.trace выводит стек вызовов выполнения JavaScript в точке, где он был вызван. Информация стека вызовов содержит имя функции, имя файла, номер строки и номер столбца. Стек вызовов ограничен последними 10 кадрами стека.
Подсчет (Count)
console.count выводит текущее количество раз, когда определенный фрагмент кода был выполнен, вместе с сообщением. То есть,
function f() {
console.count("f called");
} будет выводить f called: 1, f called: 2 ... каждый раз, когда f() выполняется.
Профилирование (Profile)
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();
} Исключение (Exception)
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/archives/qt-5.11/qtquick-debugging.html