QMLアプリケーションのデバッグ

QMLでアプリケーションを開発する際、直面する可能性のある問題をデバッグする 方法はたくさんあります。以下のセクションでは、利用可能なデバッグツールとその使い方について説明します。

コンソールAPI

機能説明
ログデバッグ情報をコンソールに表示するには、console.logconsole.debugconsole.infoconsole.warn 、またはconsole.error を使用します。

例えば

function f(a, b) {
  console.log("a is ", a, "b is ", b);
}

出力はC++のqCDebugqCWarning 、またはqCCritical メソッドを使用して生成され、ロギングを行うファイルのタイプに応じてqml またはjs のカテゴリが設定されます。

デバッグ・テクニックも参照のこと。

アサートconsole.assert 式が真であることをテストします。もし真でなければ、オプションのメッセージをコンソールに書き出し、 スタックトレースを表示します。

例えば

function f() {
  var x = 12
  console.assert(x == 12, "This will pass");
  console.assert(x > 12, "This will fail");
}
タイマーconsole.timeconsole.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() が実行されるたびに、f called: 1f called: 2...と表示します。

プロファイル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実行のスタックトレースとともにエラーメッセージを表示します。

また、これらのconsole 関数の最初の引数としてlogging category を渡すこともできます。詳細はLoggingCategory を参照してください。

モジュールのインポートのデバッグ

QMLのインポート読み込み機構からのデバッグ出力を有効にするには、QML_IMPORT_TRACE 環境変数を設定してください。

例えば、次のような単純な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 を使用する場合、CONFIG+=qml_debug 設定パラメータをプロジェクト.pro ファイルに追加することができます。

他のビルド・システムを使う場合は、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 を使ったデバッグでは、デバッグインフラストラクチャを使用して、デスクトップ上やリモートデバイス上のQMLアプリケーションのデバッグ、検査、プロファイリングを行います。Qt Creator では、JavaScriptのデバッグ、オブジェクトツリーの検査、QMLエンジンのアクティビティのプロファイリングのための統合されたクライアントを提供しています。詳しくは、Qt Creator:DebuggingQt Quick Projectsをご覧ください。

© 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.