次: Value History, 前: Auto Display, 上: Data
GDBは、 配列、 構造体、 シンボルをどのように表示するかを制御するための方法を提供しています。
これらの設定は、どのプログラミング言語で記述されたプログラムのデバッグにも便利です。
set print addressset print address ononです。
例として、
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 offset 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 addressGDBがシンボリックなアドレスを表示する際には通常、
そのアドレスの前にある最も近い位置のシンボルと、
そのシンボルからのオフセットを表示します。
そのシンボルによってアドレスが一意に決まらない場合
(例えば、
単一のファイル内でのみ有効な名前である場合)
には、
確認の必要があるかもしれません。
1つの方法は、
例えば`info line *0x4537'のように、
info lineコマンドを実行することです。
または、
シンボリックなアドレスを表示するときに、
一緒にソース・ファイルや行番号を表示するようGDBを設定する方法もあります。
set print symbol-filename onset print symbol-filename offshow 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 arrayset print array onset print array offshow print arrayset print elements number-of-elementsset print elementsコマンドで設定された数に達すると、
そこで表示が停止されます。
この上限は、
文字列の表示にも適用されます。
number-of-elementsに0をセットすると、
要素は無制限に表示されます。
show print elementsset print null-stopset 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 prettyset print sevenbit-strings on\nnnという表記法で表示します。
この設定は、英語
(ascii)
環境において、
文字の最上位ビットをマーカや「メタ」ビットとして使用する場合に最適です。
set print sevenbit-strings offshow print sevenbit-stringsset print union onset print union offshow 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 demangleset print demangle onshow print demangleset print asm-demangleset print asm-demangle onshow print asm-demangleset demangle-style styleautognug++)エンコーディング・アルゴリズムに基づいてデコードします。
これが、
デフォルトです。
hpaCC)エンコーディング・アルゴリズムに基づいてデコードします。
lucidlcc)エンコーディング・アルゴリズムに基づいてデコードします。
armcfrontによって生成された実行モジュールをデバッグするのに十分ではありません。
これを可能にするためには、
GDBをさらに拡張する必要があります。
show demangle-styleset print objectset print object onset print object offshow print objectset print static-membersset print static-members onset print static-members offshow print static-membersset print vtblset print vtbl onset print vtbl offshow print vtbl