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 ランタイムツールや 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

If you use another build system, you can pass the following defines to the compiler:

  • Qt Quick 1:QT_DECLARATIVE_DEBUG
  • Qt Quick 1: 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 Creator はデバッグインフラストラクチャを使用して、デスクトップおよびリモートデバイス上の Qt Quick アプリケーションをデバッグ、検査、プロファイル化します。Qt Creator は、JavaScript のデバッグ、オブジェクトツリーの検査、QML エンジンのアクティビティのプロファイリングのための統合されたクライアントを提供します。詳細はQt Creator を参照してください:Qt Quick Projects のデバッグ」を参照してください。

©2024 The Qt Company Ltd. ここに含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 ここで提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。