Czy drukujesz wszystkie zmienne globalne / zmienne lokalne?


Odpowiedzi:


490

Wpisz, info variablesaby wyświetlić listę „Wszystkie globalne i statyczne nazwy zmiennych”.

Wpisz info localsna listę „Zmienne lokalne bieżącej ramki stosu” (nazwy i wartości), w tym zmienne statyczne w tej funkcji.

Wpisz info argsna listę „Argumenty bieżącej ramki stosu” (nazwy i wartości).


2
@ KennyTM, nazwy zmiennych statycznych na wyjściu info variablespowinny być zmiennymi statycznymi w obrębie tej jednostki kompilacji, prawda?
cuuer

3
@cpuer: Niekoniecznie. Wyświetla tylko nazwę w tabeli symboli. Na przykład w przypadku gcc na Macu zmienna statyczna yjest zmieniana y.1913na kompilację.
kennytm

1
@KennyTM, czy zmienne statyczne wewnątrz funkcji nie są przechowywane w taki sam sposób, jak zmienne statyczne poza funkcją (w tablicy symboli)?
cuuer

2
@cpuer: Są one przechowywane w ten sam sposób, ale nazwy symboli będą różne. Weź pod uwagę, że masz zmienną statyczną yw funkcji, fooa drugą yw bar. Aby je rozróżnić, należy im przypisać inną nazwę y.
kennytm

1
@KennyTM, co więcej, czy można się dowiedzieć, gdzie zmienna jest odpowiednio zadeklarowana i zdefiniowana?
cpuer

110

Jeśli chcesz zobaczyć lokalne zmienne funkcji wywołującej, użyj jej select-framewcześniejinfo locals

Na przykład:

(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-framemoże być skrócone jako sel. Alternatywnie użyj frame/ f, które również wydrukują ramkę)
user202729

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.