QMLアプリケーションのデバッグ
QML を使用してアプリケーションを開発する際、発生しうる問題をデバッグする方法は数多くあります。以下のセクションでは、利用可能なデバッグツールとその使用方法について説明します。
コンソール API
| 機能 | 説明 |
|---|---|
| ログ | console.log 、console.debug 、console.info 、console.warn 、またはconsole.error を使用して、デバッグ情報をコンソールに出力します。例: 出力は、C++ のqCDebug 、qCWarning 、またはqCCritical メソッドを使用して生成され、ログを記録するファイルの種類に応じて、カテゴリとして 「デバッグ手法」も参照してください。 |
| Assert | console.assert は、式が真であるかどうかをテストします。真でない場合、オプションでコンソールにメッセージを出力し、スタックトレースを表示します。例: |
| Timer | console.time およびconsole.timeEnd は、呼び出し間の経過時間(ミリ秒単位)をログに記録します。どちらも、測定を識別する文字列引数を受け取ります。例: |
| Trace | console.trace は、呼び出された時点での JavaScript 実行のスタックトレースを出力します。このスタックトレース情報には、関数名、ファイル名、行番号、および列番号が含まれます。スタックトレースは、直近の 10 個のスタックフレームに限定されます。 |
| Count | console.count は、特定のコードが現在実行された回数を、メッセージとともに表示します。例: 上記のコードサンプルは、 |
| Profile | console.profile は、QML ProfilerおよびJavaScriptのプロファイラを有効にします。ネストされた呼び出しはサポートされておらず、コンソールに警告が出力されます。 |
| ProfileEnd | console.profileEnd は、QML Profiler および JavaScript プロファイラを無効にします。console.profile を事前に呼び出さずにこの関数を呼び出すと、コンソールに警告が出力されます。プロファイリングデータを受信して保存するには、この呼び出しの前にプロファイリングクライアントをアタッチしておく必要があります。例: |
| Exception | console.exception はエラーメッセージを出力します。console.error と同様に動作しますが、少なくとも1つの引数が必要であり、さらに呼び出された時点でのJavaScript実行のスタックトレースも出力します。 |
あるいは、logging category をこれらのconsole 関数のいずれかの最初の引数として渡すこともできます。詳細については、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のインストール時に自動的にインストールされます。デバッグおよびプロファイリングを機能させるには、これらのプラグインをデバイスに展開する必要があります。
インフラストラクチャの有効化
アプリケーションをコンパイルする際には、デバッグインフラストラクチャを明示的に有効にする必要があります。
CMakeを使用している場合、コマンドラインでcmake に引数として-DCMAKE_CXX_FLAGS_INIT=-DQT_QML_DEBUG を指定することで、特定のビルドのみデバッグインフラストラクチャを有効にできます。また、CMakeLists.txtファイルに以下のコードスニペットを追加することで、恒久的に有効にすることもできます:
qt_add_executable(MyApp
...
)
target_compile_definitions(MyApp PRIVATE QT_QML_DEBUG)qmake を使用する場合は、プロジェクトの `.pro ` ファイルに `CONFIG+=qml_debug ` 設定パラメータを追加するか、コマンドラインで引数として指定することができます。
他のビルドシステムを使用する場合は、そのビルドシステムの仕組みを通じて、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 Creator
Qt Creator は、デバッグインフラストラクチャを使用して、デスクトップ上およびリモートデバイス上の QML アプリケーションのデバッグ、検査、およびプロファイリングを行います。Qt Creator には、JavaScript のデバッグ、オブジェクトツリーの検査、および QML エンジンのアクティビティのプロファイリングを行うための統合クライアントが提供されています。詳細については、Qt Creator:Qt Quick プロジェクトのデバッグを参照してください。
デバッグにはQt Extension for Visual Studio Code
Qt Extension for Visual Studio Code は、JavaScriptのデバッグおよびQMLエンジンの動作のプロファイリングを行うための統合クライアントを提供します。詳細については、Qt Extension for Visual Studio Code:Qt Quick アプリケーションのデバッグを参照してください。
© 2026 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.