Imprimindo todas as variáveis ​​globais / variáveis ​​locais?


337

Como posso imprimir todas as variáveis ​​globais / variáveis ​​locais? Isso é possível em gdb?

Respostas:


488

Digite info variablespara listar "Todos os nomes de variáveis ​​globais e estáticas".

Digite info localspara listar "Variáveis ​​locais do quadro de pilha atual" (nomes e valores), incluindo variáveis ​​estáticas nessa função.

Digite info argspara listar "Argumentos do quadro de pilha atual" (nomes e valores).


2
@ KennyTM, os nomes de variáveis ​​estáticas na saída de info variablesdevem ser variáveis ​​estáticas dentro dessa unidade de compilação, certo?
cpuer

3
@ pcuer: Não necessariamente. Ele exibe apenas o nome na tabela de símbolos. Por exemplo, com o gcc no Mac, uma variável estática yé renomeada para y.1913na compilação.
Kennytm

11
@KennyTM, as variáveis ​​estáticas dentro da função não são armazenadas da mesma maneira que as variáveis ​​estáticas fora da função (na tabela de símbolos)?
precisa saber é o seguinte

2
@ pcuer: Eles são armazenados da mesma maneira, mas os nomes dos símbolos serão diferentes. Considere que você tem uma variável estática yem função fooe outra yem bar. Para distingui-los, um nome diferente deve ser atribuído aos dois y.
Kennytm

11
@KennyTM, além disso, é possível chegar onde uma variável é declarada e definida, respectivamente?
cpuer

110

Caso deseje ver as variáveis ​​locais de uma função de chamada usadas select-frameantesinfo locals

Por exemplo:

(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-framepode ser abreviado como sel. Como alternativa, use frame/ f, que também imprime o quadro) #
user202729

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.