プログラムを停止するたびに、変数がどのように変化するか見たいときは、ポイントを変数名に移動して、ツールバーのウォッチアイコンをクリック(gud-watch
)するか、C-x
C-a C-wとタイプします。プレフィクス引数を指定した場合、変数名をミニバッファーで入力することができます。
各ウォッチ式は、speedbarに表示されます(スピードバーフレームを参照してください)。配列や、構造体、共有体のような複雑なデータ型はツリー形式で表示されます。ツリーの子ノード、および単純なデータ型では、式の名前とその値が表示され、speedbarフレームが選択されたときは型がツールチップで表示されます。それより高いレベルでは名前、型、ポインターのアドレス値、そうでない場合は名前と型だけが表示されます。ルート式では、それらがどこで定義されているかを識別するために、ツールチップでフレームアドレスも表示されます
複雑なデータ型を展開または折り畳むには、式の左のタグをmouse-2をクリックするかSPCを押します。式の子にあたるデータの数が、変数gdb-max-children
の値を超える場合、Emacsは式を展開する前に確認を求めます。
複雑なウォッチ式を削除するには、speedbarのルート式にポイントを移動して、D
(gdb-var-delete
)とタイプしてください。
単純なデータ型の変数、または複雑なデータ型の単純な要素を編集するには、speedbarのその箇所にポイントを移動して、RET
(gdb-edit-value
)とタイプするか、値をmouse-2でクリックして、それを編集します。どちらの方法も、ミニバッファーを使って新しい値を読み取ります。
変数gdb-show-changed-values
を非nil
値(デフォルト)にセットした場合、Emacsは最近変化した値をfont-lock-warning-face
でハイライトし、スコープから外れた変数は目立たないshadow
フェイスで表示します。変数がスコープから外れた場合、値を変更することはできません。
変数gdb-delete-out-of-scope
が非nil
(デフォルト)の場合、Emacsはスコープから外れたときウォッチ式を自動的に削除します。この変数をnil
にしておけば、プログラムが同じ関数に複数回再入したとき、新たにウォッチ式を作成しなくてよいので便利かもしれません。
変数gdb-use-colon-colon-notation
が非nil
の場合、Emacsは‘function::variable’というフォーマットを使います。これにより同じ変数名を共有するウォッチ式を表示することができます。デフォルト値はnil
です。
ウォッチ式の表示が更新されるたびに、自動的にspeedbarを前に表示するには、gdb-speedbar-auto-raise
を非nil
にセットします。これはEmacsフレームを全画面表示にしてデバッグしているとき便利です。