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); } 出力はC++のqCDebug 、qCWarning 、またはqCCritical メソッドを使用して生成され、ロギングを行うファイルのタイプに応じて |
アサート | 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"); } 上記のコード・サンプルは、 |
プロファイル | 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.