変数 gdb-many-windows が nil(デフォルト)の場合、M-x gdb は通常、GUD
インタラクションバッファのみを表示します。ただし、変数 gdb-show-main も nil 以外である場合は、2つのウィンドウで開始されます。一方は GUD
インタラクションバッファを表示し、もう一方はデバッグ対象プログラムの main
関数のソースコードを表示します。
gdb-many-windows が nil
でない場合、M-x gdb は以下のフレームレイアウトを表示します。
+--------------------------------+--------------------------------+ | GUD interaction buffer | Locals/Registers buffer | |--------------------------------+--------------------------------+ | Primary Source buffer | I/O buffer for debugged pgm | |--------------------------------+--------------------------------+ | Stack buffer | Breakpoints/Threads buffer | +--------------------------------+--------------------------------+
上記のウィンドウレイアウトをベースにカスタマイズし、そのレイアウトを gdb-save-window-configuration を使ってファイルに保存できます。その後、gdb-load-window-configuration
を使ってこのレイアウトを再度読み込むことができます。(内部的に、Emacs
ではウィンドウレイアウトではなく「ウィンドウ構成」という用語を使用しています。)gdb-default-window-configuration-file
をカスタマイズすることで、作成したカスタムレイアウトを gdb-many-windows
で使用するデフォルトのレイアウトとして設定できます。絶対ファイル名でない場合、GDB は gdb-window-configuration-directory 以下からファイルを探します。gdb-window-configuration-directory のデフォルト値は user-emacs-directory です(Emacs が初期化ファイルを探す仕組み を参照してください)。
ウィンドウレイアウトを変更した場合は、M-x gdb-restore-windows と入力することでデフォルトのレイアウトに戻せます。多数のウィンドウを配置するレイアウトと、GUDインタラクションバッファとソースファイルのみのシンプルなレイアウトを切り替えるには、M-x gdb-many-windows と入力してください。
凝ったウィンドウ構成を組んでおり、gdb-many-windows
によってそれが乱されるのを避けたい場合は、最初から別のフレームで M-x gdb
を呼び出すのが得策です。そうすれば、元のフレームにおけるウィンドウ配置に影響が出ません。GDB
セッション用に別フレームを用意することは、ウィンドウに割ける画面領域が限られているテキストモード端末で作業する場合に特に便利です。もし同じフレームで
GDB を起動する場合は、gdb-restore-window-configuration-after-quit に nil 以外の値を設定することを検討してください。そうすれば、GDB
が終了した後に元のレイアウトが復元されます。常に復元するには t を、gdb-many-windows が nil
以外の場合にのみ復元するには if-gdb-many-windows を、gdb-show-main が nil
以外の場合にのみ復元するには if-gdb-show-main を使用してください。
また、同一フレーム内または別のフレームに、表示するGDB関連の追加バッファを指定することもできます。M-x gdb-display-buffertype-buffer または M-x gdb-frame-buffertype-buffer と入力して目的のバッファを選択してください。ここで buffertype は、‘breakpoints’ や ‘io’ といった該当するバッファタイプを指します。メニューバーからも同様に操作でき、‘GUD’ メニューの ‘GDB-Windows’ および ‘GDB-Frames’ サブメニューから選択できます。
デフォルトでは、GDBはソースファイルの表示に最大1つのウィンドウを使用します。gdb-max-source-window-countをカスタマイズすることで、より多くのウィンドウを使用させることができます。また、gdb-display-source-buffer-actionをカスタマイズして、GDBのソースファイルの表示方法を制御することも可能です。
デバッグが終了したら、C-x k で GUD インタラクションバッファを破棄してください。これにより、セッションに関連付けられたすべてのバッファも破棄されます。ただし、Emacs 内でソースコードを編集して再コンパイルした後、引き続きデバッグを行いたい場合は、この操作を行う必要はありません。実行を再開すると、GDB は自動的に新しい実行ファイルを検出します。GUD インタラクションバッファを保持しておけば、シェルの履歴と GDB のブレークポイントの両方を維持できるという利点があります。最近編集したソースファイルのブレークポイントが引き続き正しい位置に設定されているかは、確認しておく必要があります。