Spec-Zone.ru › Qt 5.15

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

Spec-Zone.ru

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