Qtの設定 - デバッグ

提供:MochiuWiki : SUSE, EC, PCB
2020年10月13日 (火) 18:51時点におけるWiki (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

概要

Qt Creatorにおいて、デバッグに関する設定方法を記載する。


CMakeの設定

Qt Creatorで、CMakeを使用するプロジェクトを作成してデバッグを実行するとき、以下の警告文が表示される場合がある。

warning: GDB: Failed to set controlling terminal: ...


下図に示すように、Qt Creatorの左側パネルにある[プロジェクト] - [Build & Run] - [Run]を選択する。
[実行時の選択]画面が表示されるので、[実行]項目の[ターミナルで実行]チェックボックスにチェックを入力する。
これにより、QT Creatorは、GDBで適切に動作するXterm(デフォルト)内でプログラムを実行する。

Qt Configuration 1.jpg



デバッグターミナルを別のソフトウェアに変更する場合は、Qt Creatorのメニューバーから、
[ツール] - [オプション] - [環境] - [システム]タブ - [ターミナル]項目に、デバッグターミナルとして使用するソフトウェアのフルパス名を記述する。
このパラメーターは、外部コマンドまたはソフトウェアを実行するように指示する。

# X terminalをデバッグターミナルに設定する場合
/usr/bin/xterm
--separate
-e

# konsoleをデバッグターミナルに設定する場合
/usr/bin/konsole
--separate
-e
Qt Configuration 2.jpg



また、初期設定では、デバッガが開始されるとQT Creatorもフォアグラウンドに配置されて、開始されたターミナルが背面に表示される。
この動作を変更(デバッグターミナルを前面に配置)するには、Qt Creatorのメニューバーから、
[ツール] - [オプション] - [デバッガ] - [一般]タブ - [Bring Qt Creator to foreground when application interrupts]チェックボックスをオフにする。

Qt Configuration 3.jpg



デバッガの設定

デバッガを設定するには、[ツール] - [オプション]を選択する。
[オプション画面]画面が開くので、画面左の[デバッガ]を選択する。

  • [一般]タブ
    全てのデバッガに共通の設定を行う。

  • [GDB]タブ
    GDBプロセスの設定を行う。

    GDBプロセスを終了するためのタイムアウトを指定するには、GDBタイムアウトフィールドに待機する秒数を設定する。
    大きなライブラリの読み込みやソースファイルの一覧表示に時間が掛かる場合は、値を大きくする必要がある。

    デバッガの起動時にデフォルトの.gdbinitファイルを読み込むには、[Load .gdbinit file on startup]チェックボックスを選択する。
    インストールされているまたはアプリケーションが使用するライブラリにリンクされている標準のGDBプリティプリンタを使用するには、
    [Load system GDB pretty printers]チェックボックスを選択する。

    GDBがリモートターゲットに正常にアタッチされた後にGDBコマンドを実行するには、[Additional Attach Commands]フィールドに入力する。
    ここでは、モニタのリセット・ロード等、ターゲットをさらにセットアップするためのコマンドを追加することができる。

  • [GDB拡張]タブ
    この設定では、GDBの高度な機能や実験的な機能を使用することができる。
    しかし、これらの機能を有効にすると、デバッグ作業に悪影響を及ぼす可能性があるので、注意して使用すること。

    非同期モードを制御する場合は、それぞれのチェックボックスを選択する。
    GDB起動時に/usr/src/debug等のデバッグ情報の場所に共通のパスを追加するには、デバッグ情報の共通の場所を使用するチェックボックスを選択する。
    qWarning、qFatal、abortが呼び出された時に停止するには、それぞれのチェックボックスを選択する。

    逆引きを有効にするには、逆引きを有効にするチェックボックスを選択する。
    この機能は非常に遅く、システムコールを逆行する際に予測不可能な動作を示し、デバッグセッションを破壊する可能性が高い。

    フォーク後に全ての子プロセスをデバッグし続けるには、[すべての子プロセスをデバッグする]チェックボックスを選択する。