Spec-Zone.ru › Qt 5.11

Отладка приложений 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API