Spec-Zone.ru › Qt

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

Spec-Zone.ru

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