デバッグ
デバッガは以下の用途に使用できます:
- 実行可能なバイナリファイルをデバッグする - GNU Symbolic Debugger (GDB)、Microsoft Console Debugger (CDB)、低レベル仮想マシン(LLVM)プロジェクトのデバッガであるLLDB。
- QML および Java コードとQt Quick アプリケーションのデバッグ - QML/JavaScript デバッガ。
- Python ソースコードのデバッグ - PDB。
デバッガの設定
Qt Creator は、システム上にあるデバッガから各キットに適したデバッガを自動的に選択します。別のキットを選択することもできます。各キットに使用するデバッガとコンパイラを指定するには、Preferences >Kits にアクセスしてください。

デバッガをセットアップする必要があるのは、デバッガがないために自動セットアップに失敗した場合(たとえば、CDB デバッガを Windows に自分でインストールする必要がある)、またはQt Creator がインストールされたバージョンをサポートしていない場合だけです。たとえば、システムにGDBがインストールされていないか、インストールされているバージョンが古く、代わりにローカルにインストールされた代替バージョンを使用したい場合などです。
自動検出されたキットのデバッガを変更するには、Preferences >Kits >Clone にアクセスしてキットのコピーを作成し、クローン化されたキットのパラメータを変更します。クローン化したキットをプロジェクトで有効にしてください。
その他のデバッガを表示する
使用するデバッガが自動的に検出されない場合は、Preferences >Kits >Debuggers >Add に進んで追加します。

自動的に検出されたデバッガーのリストを更新するには、Re-detect を選択します。
Windows 用のデバッグ・ツールを使用するには、それらをインストールする必要があります。オプションとして、ローカルにない Microsoft モジュールのシンボル情報が必要な場合は、Microsoft Symbol Server をセットアップできます。
詳細については、「サポートされているデバッガと CDB パス」を参照してください。
デバッガーの起動
デバッガーは、デバッグ対象のプロセスをどこでどのように開始および実行するかによって、さまざまな動作モードで実行されます。一部のモードは特定のオペレーティングシステムまたはプラットフォームでのみ利用可能です:
- Qt Widgets ベースのアプリケーションなど、Qt Creator 内 部で開発されたアプリケーションをデバッグするために内部で起動します。これは、デスクトップ Qt バージョンを使用しているすべてのプロジェクトや、プレーン C++ プロジェクトを含む、ほとんどのプロジェクトのデフォルトの開始モードです。
- Start external(外部で起動)ローカルまたはリモート・マシン上で、Qt Creator プロジェクトの適切なセットアップを行わずにプロセスを起動し、デバッグします。
- ローカルまたはリモートマシン上で、Qt Creator の外部ですでに開始され、実行されているプロセスをデバッグするためにアタッチします。
- Unix上でクラッシュしたプロセスをデバッグするためのCore。
- Windows 上でクラッシュしたプロセスをデバッグするためのポストモーテム。
一般的に、F5と Start Debugging of Startup Project ボタンは、コンテキストに合ったオペレーティング・モードを開始します。つまり、デスクトップWindowsをターゲットとするMinGWツールチェインを使用するC++アプリケーションの場合、GDBエンジンは内部モードで起動します。C++プラグインを使用するQMLアプリケーションの場合は、QML/C++混在エンジンが起動し、C++部分はGDBとGDBサーバーのリモートデバッグで処理されます。
プロジェクトの実行設定で実行設定パラメータ(Run in Terminal など)を変更するか、Debug >Start Debugging メニューからオプションを選択して他の動作モードを選択します。
GDB 実行モード
GDB デバッガーは、サポートするプラットフォームや環境の多様性に対応するため、さまざまな モードで動作します:
- プレーンモードは、コンソール入力を必要としないローカル起動プロセスをデバッグします。
- ターミナルモードは、コンソールを必要とするローカルに起動されたプロセスをデバッグします。
- アタッチモードは、Qt Creator の外部で起動されたローカルプロセスをデバッグします。
- Core モードは、クラッシュから生成されたコアファイルをデバッグします。
- リモート・モードは、Linux上で動作するGDBサーバーと対話します。
アプリケーションの停止
実行中のアプリケーションが終了する前に中断することができます。ブレークポイントを設定してアプリケーションを停止し、変数を調べたり変更したり、新しいブレークポイントを設定したり古いブレークポイントを削除したりして、アプリケーションの実行を続行します。
デバッガの制御下でアプリケーションの実行が開始されると、アプリケーションは通常と同じように動作し、実行されます。
実行中の C++ アプリケーションを中断するには、Debug >Interrupt に進みます。デバッガは、ブレークポイントに達すると自動的にアプリケーションを中断します。
アプリケーションが停止すると、Qt Creator :
- アプリケーションの現在位置のコール・スタックを表すデータを取得します。
- ローカル変数の内容を取得します。
- 式を調べます。
- C++ ベースのアプリケーションをデバッグしている場合、[レジスタ]、[モジュール]、および [逆アセンブラ] ビューを更新します。
変数を調べたり変更したり、ブレークポイントを設定したり削除したりしてから、アプリケーションの実行を続行できます。
データの検査
アプリケーションが停止すると、デバッガで特定のデータを調べることができます。データが利用できるかどうかは、アプリケーションをコンパイルする際のコンパイラの設定と、アプリケーションが停止する正確な場所に依存します。
予期しないイベントは例外と呼ばれ、デバッガは例外が発生したときにアプリケーションを停止させることができます。例外が発生したコードの場所に行くことは、問題を調査し、修正する方法を見つけるのに役立ちます。
例えば、テキストを表示する変数があるのに、アプリケーションがそれを正しく表示しない場合、 データが正しくないか、表示テキストを設定するコードが何か間違っている可能性があります。コードのステップを踏んで変数への変更を調べれば、どこでエラーが発生しているかを見つけることができます。
次のビデオは、変数の値を調べる方法を示しています:
リモートデバッグ
Qt Creator を使えば、リモート・デバッグが簡単になります。リモート・マシンにGDBserverのようなデバッグ・サーバーがすでにインストールされていて、アプリケーションのリモート実行がすでに設定され、Run (またはCtrl+R)ボタンを選択することで動作する一般的なケースでは、Debug (またはF5)ボタンを選択することでデバッグを開始することができます。
この場合、Qt Creator は、リモート・マシン上のデバッグ・サーバーとアプリケーション、および開発ホスト上の実際のデバッガを、正しい順序で自動的に起動して接続します。
このようにリモートデバッグのセットアップと実行を完全に自動化できない例外的なケースのために、Qt Creator は半自動ソリューションを提供しています。「GDB でリモートデバッグ」および「CDB でリモートデバッグ」を参照してください。
デバッグヘルパーの使用
QObjects や連想コンテナなどの複雑な構造をわかりやすく簡潔に表示するために、Qt Creator ではデバッグヘルパーと呼ばれる Python スクリプトを使用しています。
Qt Creator デバッグ・ヘルパーは、最も一般的な Qt クラス、標準 C++ コンテナ、およびスマート・ポインタの 200 以上が同梱されており、C++ アプリケーション開発者の通常のニーズをすぐに満たすことができます。
デバッグヘルパーはカスタマイズして追加することができます。
QMLとQt Quick
Qt Quick アプリケーションをデバッグするとき、JavaScript 関数をデバッグしながらアプリケーションの状態を検査できます。ブレークポイントを設定し、スタックトレースを表示し、ローカルや式を調べることができます。アプリケーションの実行中は、QML オブジェクトやユーザーインターフェ イスを検査したり、JavaScript の式を実行したりすることができます。
詳しくは、 Qt Quick プロジェクトのデバッグ、およびTutorial:Qt Quick debugging を参照してください。
チュートリアルも参照してください :C++のデバッグ、How to:デバッグ、デバッガ、およびキットの管理も参照してください。
Copyright © The Qt Company Ltd. and other contributors. 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.