Next: Value History, Previous: Auto Display, Up: Data
GDBは、 配列、 構造体、 シンボルをどのように表示するかを制御するための方法を提供しています。
これらの設定は、どのプログラミング言語で記述されたプログラムのデバッグにも便利です。
set print address
set print address on
on
です。
例として、
set print address on
のときのスタック・フレームの表示結果を示します。
(gdb) f #0 set_quotes (lq=0x34c78 "<<", rq=0x34c88 ">>") at input.c:530 530 if (lquote != def_lquote)
set print address off
set print address off
のときに前の例と同一のスタック・フレームを表示すると、
以下のようになります。
(gdb) set print addr off (gdb) f #0 set_quotes (lq="<<", rq=">>") at input.c:530 530 if (lquote != def_lquote)
‘set print address off’を使用することで、
GDBのインターフェイスからマシンに依存する表示を取り除くことができます。
例えば、
print address off
を指定してあれば、
ポインタ引数の有無にかかわらず、
すべてのマシン上において同一のバックトレース情報を得るはずです。
show print address
GDBがシンボリックなアドレスを表示する際には通常、
そのアドレスの前にある最も近い位置のシンボルと、
そのシンボルからのオフセットを表示します。
そのシンボルによってアドレスが一意に決まらない場合
(例えば、
単一のファイル内でのみ有効な名前である場合)
には、
確認の必要があるかもしれません。
1つの方法は、
例えば‘info line *0x4537’のように、
info line
コマンドを実行することです。
または、
シンボリックなアドレスを表示するときに、
一緒にソース・ファイルや行番号を表示するようGDBを設定する方法もあります。
set print symbol-filename on
set print symbol-filename off
show print symbol-filename
シンボルのソース・ファイル名と行番号を表示するのが役に立つもう1つの状況として、 コードを逆アセンブルする場合があります。 GDBが、 個々の命令に対応する行番号とソース・ファイルを表示してくれます。
また、 アドレスをシンボリック形式で表示させるのは、 そのアドレスと、 そのアドレスより前にあるシンボルのうち、 そのアドレスに最も近い位置にあるものとの間が適度に接近している場合に限定させたい こともあるもでしょう。
set print max-symbolic-offset
max-offsetshow print max-symbolic-offset
あるポインタがどこを指しているか定かではない場合には、
‘set print symbol-filename on’を試みてください。
こうすれば、
‘p/a pointer’を使用して、
そのポインタが指している変数の名前とソース・ファイル上の位置が分かります。
これは、
アドレスをシンボリック形式で解釈します。
例えば以下の例では、
ある変数ptt
がファイルhi2.c内で定義された別の変数t
を指していることを、
GDBが教えてくれています。
(gdb) set print symbol-filename on (gdb) p/a ptt $4 = 0xe008 <t in hi2.c>
注意:
ローカル変数を指すポインタについては、
たとえ適切なset print
オプションが有効になっていても、
‘p/a’はそのポインタによって参照される変数のシンボル名やファイル名を表示しません。
異なる種類のオブジェクトについては、 他の設定によって表示方法が制御されます。
set print array
set print array on
set print array off
show print array
set print elements
number-of-elementsset print elements
コマンドで設定された数に達すると、
そこで表示が停止されます。
この上限は、
文字列の表示にも適用されます。
number-of-elementsに0をセットすると、
要素は無制限に表示されます。
show print elements
set print null-stop
set print pretty on
$1 = { next = 0x0, flags = { sweet = 1, sour = 1 }, meat = 0x54 "Pork" }
set print pretty off
$1 = {next = 0x0, flags = {sweet = 1, sour = 1}, \ meat = 0x54 "Pork"}
これがデフォルトの形式です。
show print pretty
set print sevenbit-strings on
\
nnnという表記法で表示します。
この設定は、英語
(ascii)
環境において、
文字の最上位ビットをマーカや「メタ」ビットとして使用する場合に最適です。
set print sevenbit-strings off
show print sevenbit-strings
set print union on
set print union off
show print union
例えば、 以下のように宣言されている場合、
typedef enum {Tree, Bug} Species; typedef enum {Big_tree, Acorn, Seedling} Tree_forms; typedef enum {Caterpillar, Cocoon, Butterfly} Bug_forms; struct thing { Species it; union { Tree_forms tree; Bug_forms bug; } form; }; struct thing foo = {Tree, {Acorn}};
set print union on
が有効な場合、
‘p foo’は以下のような表示を行います。
$1 = {it = Tree, form = {tree = Acorn, bug = Cocoon}}
また、
set print union off
が有効な場合、
‘p foo’は以下のような表示を行います。
$1 = {it = Tree, form = {...}}
以下の設定は、 C++プログラムをデバッグしているときに関係があります。
set print demangle
set print demangle on
show print demangle
set print asm-demangle
set print asm-demangle on
show print asm-demangle
set demangle-style
styleauto
gnu
g++
)エンコーディング・アルゴリズムに基づいてデコードします。
これが、
デフォルトです。
hp
aCC
)エンコーディング・アルゴリズムに基づいてデコードします。
lucid
lcc
)エンコーディング・アルゴリズムに基づいてデコードします。
arm
cfront
によって生成された実行モジュールをデバッグするのに十分ではありません。
これを可能にするためには、
GDBをさらに拡張する必要があります。
show demangle-style
set print object
set print object on
set print object off
show print object
set print static-members
set print static-members on
set print static-members off
show print static-members
set print vtbl
set print vtbl on
set print vtbl off
show print vtbl