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);
}

출력은 로깅을 수행하는 파일 유형에 따라 qml 또는 js 범주와 함께 C++의 qCDebug, qCWarning 또는 qCCritical 메서드를 사용하여 생성됩니다. 디버깅 기법도 참조하세요.

Assertconsole.assert 표현식이 참인지 테스트합니다. 그렇지 않은 경우 콘솔에 선택적 메시지를 쓰고 스택 추적을 인쇄합니다.

예를 들어

function f() {
  var x = 12
  console.assert(x == 12, "This will pass");
  console.assert(x > 12, "This will fail");
}
Timerconsole.timeconsole.timeEnd 는 호출 사이에 소요된 시간(밀리초)을 기록합니다. 둘 다 측정값을 식별하는 문자열 인수를 받습니다.

예를 들어

function f() {
    console.time("wholeFunction");
    console.time("firstPart");
    // first part
    console.timeEnd("firstPart");
    // second part
    console.timeEnd("wholeFunction");
}
Traceconsole.trace 는 호출된 지점에서 JavaScript 실행의 스택 추적을 인쇄합니다. 이 스택 추적 정보에는 함수 이름, 파일 이름, 줄 번호, 열 번호가 포함됩니다. 스택 추적은 최근 10개의 스택 프레임으로 제한됩니다.
Countconsole.count 는 특정 코드가 현재 실행된 횟수를 메시지와 함께 인쇄합니다.

예를 들어

function f() {
  console.count("f called");
}

위의 코드 샘플은 f() 이 실행될 때마다 f called: 1, f called: 2...을 출력합니다.

Profileconsole.profile 은 QML 및 JavaScript 프로파일러를 켭니다. 중첩 호출은 지원되지 않으며 콘솔에 경고를 출력합니다.
ProfileEndconsole.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();
}
Exceptionconsole.exception 는 호출되는 지점에서 자바스크립트 실행의 스택 추적과 함께 오류 메시지를 출력합니다.

또는 console 함수의 첫 번째 인수로 logging category 을 전달할 수도 있습니다. 자세한 내용은 LoggingCategory 을 참조하세요.

모듈 임포트 디버깅

QML_IMPORT_TRACE 환경 변수를 설정하여 QML의 가져오기 로딩 메커니즘에서 디버그 출력을 활성화합니다.

예를 들어 다음과 같은 간단한 QML 파일의 경우:

import QtQuick

Rectangle { width: 100; height: 100 }

QML Runtime 도구 또는 QML C++ 애플리케이션을 실행하기 전에 QML_IMPORT_TRACE=1 을 설정하면 다음과 유사한 출력이 표시됩니다:

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 포트 또는 로컬 소켓을 통해 애플리케이션을 디버깅, 검사 및 프로파일링하기 위한 서비스를 제공합니다.

참고: 장치에서 QML 애플리케이션을 디버깅하고 프로파일링하는 데 필요한 qmltooling 플러그인은 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>]

Where:

  • 필수 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 프로젝트 디버깅을 참조하세요.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.