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.