すべてのグローバル変数/ローカル変数を印刷しますか?


337

すべてのグローバル変数/ローカル変数を出力するにはどうすればよいですか?それはgdbで可能ですか?

回答:


488

info variables「すべてのグローバル変数名と静的変数名」をリストするには、入力してください。

info locals「現在のスタックフレームのローカル変数」(名前と値)をリストするために入力します(関数の静的変数を含む)。

info args「現在のスタックフレームの引数」(名前と値)をリストするために入力します。


2
@KennyTM、出力の静的変数名は、info variablesそのコンパイル単位内の静的変数である必要がありますよね?
cpuer

3
@cpuer:必ずしもそうではありません。シンボルテーブルに名前を表示するだけです。たとえば、Macのgccでは、静的変数yy.1913コンパイル時に名前が変更されます。
kennytm

1
@KennyTM、関数内の静的変数は、関数外の静的変数(シンボルテーブル内)と同じ方法で格納されていませんか?
cpuer

2
@cpuer:同じ方法で保存されますが、シンボル名は異なります。y関数に静的変数がfooあり、別の静的変数があるとybarます。それらを区別するには、2つyのに別の名前を割り当てる必要があります。
kennytm

1
@KennyTM、さらに、変数が宣言され定義されている場所をそれぞれ取得することは可能ですか?
cpuer

110

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) 

4
select-frameと省略できますsel。代わりにframe/を使用します。fこれもフレームを印刷します)
user202729

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.