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.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() が実行されるたびに、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_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>]

ここで

  • 必須の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 でのデバッグでは、デバッグインフラストラクチャを使用して、 アプリケーションのデバッグ、検査、プロファイリングを行います。 では、JavaScript のデバッグ、オブジェクトツリーの検査、QML エンジンのアクティビティのプロファイリングのための統合クライアントが提供されています。詳しくは、Qt Quick Qt Creator Qt Creator:Debugging Projectsを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.