このページでは

デバッガのトラブルシューティング

このセクションでは、デバッグ中に発生しうる典型的な問題と、その解決策について説明します。

デバッガを起動できない

一部のウイルス対策アプリケーションでは、デバッガによるデータの取得が許可されていません。たとえば、Windows では、開発用 PC に Avira Antivirus がインストールされている場合、次のメッセージが表示され、デバッガの起動に失敗することがあります。デバッグ対象のプロセスは、オペレーティングシステムからシグナルを受信したため停止しました。シグナル名:? シグナルの意味:不明なシグナル。

Wacomタブレットなどの一部のデバイスでは、実行中のプロセスによってデバッガーの起動が妨げられる場合があります。実行中のプロセスをすべて停止してから、デバッガーを再起動してください。

デバッガーがブレークポイントに到達しない

デバッグ情報を含まないリリースビルドを作成した可能性があります。GNU Compiler Collection (GCC) のデバッグビルドでは、コンパイラのコマンドラインに `-g ` オプションが指定されています。コンパイル出力にこのオプションが含まれているか確認してください。含まれていない場合は、Projects モードでビルド設定を調整してください。

デバッガが動作しない

デバッガが正常に動作しない場合は、以下を試してください:

  1. 「実行」ボタン 」(Run )を選択し、ビルドおよび実行キットセレクターが実行可能なターゲットを選択しており、アプリケーションを実行できることを確認してください。
  2. デバッガが正しく設定されていることを確認してください。
  3. Debug 」モードで、[View ] > [Views ] > [Debugger Log ] の順に選択し、「Debugger Log」ビューを開いてください。右側のペインの内容を確認し、何が問題だったのかを探してください。Qt Creator メーリングリスト(qt-creator@qt-project.org)へのデバッガー関連の質問や、IRC(Libera.Chatの#qt-creatorチャンネル)で質問をする際は、必ずそのペインの内容を添付するか、コード貼り付けサービスに貼り付けてから投稿してください。

    注:エラー 135 は通常、依存する DLL が見つからないことを意味します。

ポインタ変数のメンバーが直接表示されない

Locals およびExpressions ビューを使用してポインタ変数を検査し、変数ツリー項目を展開すると、別のツリー項目レベルが表示されます。ポインタ変数のメンバーを直接表示するには、Locals およびExpressions ビューのコンテキストメニューから [Dereference Pointers Automatically ] を選択してください。

変数がまったく表示されない場合は、デバッグ用のビルド構成が選択されていることを確認してください。

構造体のメンバは、構造体のレイアウト順には並べ替えられていません

デフォルトでは、構造体のメンバはアルファベット順に表示されます。メモリ内の実際のレイアウトを確認するには、Locals およびExpressions ビューのコンテキストメニューで「Sort Members of Classes and Structs Alphabetically 」のチェックを解除してください。

組み込みデバッガの起動時および実行時の動作が遅い

デバッグ情報の読み込みに関連する処理の遅延は避けがたいものです。以下のセクションでは、考えられる解決策について説明します。

GDB シンボルインデックスのキャッシュ

GDBをバックエンドとして使用する場合、そのシンボルインデックスのコピーをディスク上のキャッシュに自動的に保存し、将来同じバイナリを読み込む際にそこから取得することができます。「Preferences 」 > 「Debugger 」 > 「GDB 」 > 「Use automatic symbol cache 」に移動してください。

「デバッガ」環境設定の「GDB」タブ

ブレークポイントの数を最小限に抑える

デバッグの遅延の一部は、デバッガ内部でのブレークポイントの管理(状況によっては、各ステップごとにすべてのブレークポイントを挿入し、再度削除する必要がある)や、各ステップ後の式の評価に起因しています。ブレークポイントと監視式の数を最小限に抑えることをお勧めします。

ビルドのクリーンアップ

古い.pdb ファイルがデバッグの速度低下を引き起こしている場合は、クリーンビルドを試してみてください。

増分リンクの無効化

増分リンクはデバッグに影響を与える可能性があります。「Debugger Log」ビューに「モジュールのチェックサムを確認できません」というメッセージが表示される場合は、増分リンクを無効にしてください。

ビルドシステムとしてCMakeを使用する場合は、プロジェクトのCMakeLists.txt ファイルに次の行を追加してください。

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /INCREMENTAL:NO" )

qmakeをビルドシステムとして使用している場合は、プロジェクトの.pro ファイルに次の行を追加してください:

QMAKE_LFLAGS_DEBUG += /INCREMENTAL:NO

Linux でデバッガが実行中のプロセスにアタッチできない

GDBは、実行中のプロセスにアタッチするためにptrace を使用します。一部のLinuxディストリビューションではこれが許可されていないため、既存のプロセスに直接アタッチしようとする試みや、Qt CreatorRun in terminal オプションを使用しようとする試みがすべて阻止されます。

その理由については、KernelHardeningに説明されています。

しかし、この機能は簡単に無効化できるため、このセキュリティ対策の有用性には疑問が残ります。root権限があれば、/proc/sys/kernel/yama/ptrace_scope0 を書き込むことで一時的に、あるいは/etc/sysctl.d/10-ptrace.conf の値を変更することで恒久的にこの機能を無効化できます。特権権限がなくても、prctl(0x59616d61, getppid(), 0, 0, 0); を呼び出すライブラリをプリロードすることで、この機能を無効化できます。Qt Creator にはそのようなライブラリが同梱されています。LD_PRELOAD 環境変数に$QTCREATORDIR/lib/qtcreator/libptracepreload.so を追加してください。

「方法:デバッグ」、「デバッグ、「デバッガも参照してください

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.