Qt Quick アプリケーションのデバッグ
QML と C/C++ の両方のコードを含むQt Quick アプリケーションのデバッグは、QML デバッガとお使いのオペレーティングシステム用のデバッガを使って行うことができます。通常、Linux や macOS では GDB、Windows では Visual Studio Windows デバッガを使用します。
QMLデバッガを使うと、以下のことができます:
- This変数を含む変数の表示
- 変数の値の操作
- ウォッチ式の追加
- 条件付きブレークポイントの追加
- 式評価の追加
注意: デバッグには TCP ポートでソケットを開く必要があります。インターネット上の誰もがデバッグ中のアプリケーションに接続し、JavaScript 関数を実行する可能性があります。そのため、ポートがファイアウォールによって適切に保護されていることを確認する必要があります。
アプリケーションの起動とデバッグ
アプリケーションの QML コードだけをデバッグするには、まずアプリケーションを起動し、 そのアプリケーションに QML デバッガをアタッチします。
Qt Quick アプリケーションを起動し、デバッグするには:
- プロジェクトの
launch.jsonファイルを作成します。詳細については、「Qt アプリケーションのデバッグ」を参照してください。 - QML debugger を選択します。
- Qt: QML: Launch デバッグ設定を選択します。
起動デバッグ設定は、launch.json ファイルに以下の行を追加します:
"configurations": [
{
"name": "Qt: QML: Launch",
"type": "qml",
"request": "launch",
"program": "${command:cmake.launchTargetPath}"
},
{
"name": "Qt: QML: Attach by port",
"type": "qml",
"request": "attach",
"host": "localhost",
"port": "^\"Custom port or \\${command:qt-qml.debugPort} for compound usage\""
}
]実行中のアプリケーションにアタッチする
アプリケーションの QML コードだけをデバッグするには、Qt Extension for VS Code でアプリケーションを起動してから QML デバッガをアタッチするよりも、固定ポート番号を使用して実行中のアプリケーショ ンにデバッガをアタッチする方が高速です。
QML コードだけをデバッグするには
- プロジェクトのlaunch.jsonファイルを作成します。詳細は、「Qt アプリケーションのデバッグ」を参照してください。
- Add Configuration を選択し、Qt: QML: Attach by port デバッグ設定を選択します。
- Terminal で、以下の引数を指定してアプリケーションを起動します:
<your_executable_path> -qmljsdebugger=host:<IP_address>,port:<port_number>,block,services:DebugMessages,QmlDebugger,V8Debugger,QmlInspector
ここで、IP_addressはアプリケーションを実行しているホストの IP アドレス、port_numberはデバッグ・ポート、block はデバッグ・クライアントがサーバーに接続するまでアプリケーションを実行しないようにします。これにより、最初からデバッグが可能になります。
- ポート番号は、launch.jsonファイルの
portオプションの値として設定します:"configurations": [ { "name": "Qt: QML: Attach by port", "type": "qml", "request": "attach", "host": "localhost", "port": "<port_number>" },
ビルド・フォルダーの設定
ビルドフォルダがワークスペースフォルダの外にある場合、Qt Extension for VS Code は、仮想 QML ファイルと精神 QML ファイルにマッチする QRC ファイルがどこにあるかを知る必要があります。ビルドフォルダを設定するには、Qt: QML: Launch またはQt: QML: Attach by port のデバッグ設定に、buildDirs の値として追加します。
例えば
"configurations": [
{
"name": "Qt: QML: Launch",
"type": "qml",
"request": "launch",
"program": "${command:cmake.launchTargetPath}",
"buildDirs": [
"<my_build_folder_outside_workspace>",
"<my_build_folder_outside_workspace_2>",
]
}
]デフォルトの引数を上書きする
デフォルトのデバッガー引数をオーバーライドするには、引数をQt: QML: Launch またはQt: QML: Attach by port デバッグ構成にdebuggerArgs の値として追加します。
例
"configurations": [
{
"name": "Qt: QML: Launch",
"type": "qml",
"request": "launch",
"program": "${command:cmake.launchTargetPath}",
"debuggerArgs": "-qmljsdebugger=<arguments>",
}
]実行ファイルに引数を渡す
実行ファイルに引数を渡すには、引数をQt: QML: Launch またはQt: QML: Attach by port デバッグ構成にargs の値として追加します。
例
"configurations": [
{
"name": "Qt: QML: Launch",
"type": "qml",
"request": "launch",
"program": "${command:cmake.launchTargetPath}",
"args": [
"<argument>",
"<argument> <argument>",
]
}
]C/C++ と QML の混在コードをデバッグする
まずアプリケーションを起動し、Qt: Acquire Port プレランチタスクが取得するポート番号を使用して、QML と C/C++ の両方のデバッガをアタッチするデバッグ設定を作成できます。
C/C++ と QML の両方のコードを含むQt Quick アプリケーションをデバッグするには:
- launch.jsonファイルを開いてください。詳細は、「Qt アプリケーションのデバッグ」を参照してください。
- Add Configuration を選択し、デバッガーに合ったQt: Debug with cppdbg and QML debugger またはQt: Debug with cppvsdbg and QML debugger (Windows) デバッグ設定を選択します。
- C++/QML デバッグ用の複合起動タスクと起動前タスクをlaunch.jsonファイルに追加します:.
"compounds": [ { "name": "C++/QML", "configurations": ["Qt: Debug with cppdbg and QML debugger", "Qt: QML: Attach by port"], "preLaunchTask": "Qt: Acquire Port", } ]"compounds": [ { "name": "C++/QML", "configurations": ["Qt: Debug with cppvsdbg and QML debugger (Windows)", "Qt: QML: Attach by port"], "preLaunchTask": "Qt: Acquire Port", } ]
Qt アプリケーションのデバッグ、 Qt for Python アプリケーションのデバッグ、VS Code の デバッグも参照してください :デバッグ」も参照してください。
© 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.