Spec-Zone.ru › Qt 6.0

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

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-6.0/qtquick-debugging.html

Spec-Zone.ru

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