回答:
info variables「すべてのグローバル変数名と静的変数名」をリストするには、入力してください。
info locals「現在のスタックフレームのローカル変数」(名前と値)をリストするために入力します(関数の静的変数を含む)。
info args「現在のスタックフレームの引数」(名前と値)をリストするために入力します。
yはy.1913コンパイル時に名前が変更されます。
y関数に静的変数がfooあり、別の静的変数があるとyしbarます。それらを区別するには、2つyのに別の名前を割り当てる必要があります。
select-frame前に呼び出し関数のローカル変数を使用したい場合info locals
例えば:
(gdb) bt
#0 0xfec3c0b5 in _lwp_kill () from /lib/libc.so.1
#1 0xfec36f39 in thr_kill () from /lib/libc.so.1
#2 0xfebe3603 in raise () from /lib/libc.so.1
#3 0xfebc2961 in abort () from /lib/libc.so.1
#4 0xfebc2bef in _assert_c99 () from /lib/libc.so.1
#5 0x08053260 in main (argc=1, argv=0x8047958) at ber.c:480
(gdb) info locals
No symbol table info available.
(gdb) select-frame 5
(gdb) info locals
i = 28
(gdb)
select-frameと省略できますsel。代わりにframe/を使用します。fこれもフレームを印刷します)
さらに、現在info localsの関数の引数は表示されないため、
(gdb) info args
例えば:
int main(int argc, char *argv[]) {
argc = 6*7; //Break here.
return 0;
}
argcとargvは表示されませんinfo locals。メッセージは「地元住民なし」になります。
参照:info localsコマンド。
info variablesそのコンパイル単位内の静的変数である必要がありますよね?