Spec-Zone.ru › Qt 5.14

Отладка приложений 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++, с категорией 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-порт или локальный сокет.

Примечание: Плагины 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.14/qtquick-debugging.html

Spec-Zone.ru

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