Imprimir todas las variables globales / variables locales?

Respuestas:

490

Escriba info variablespara enumerar "Todos los nombres de variables globales y estáticas".

Escriba info localspara enumerar "Variables locales del marco de pila actual" (nombres y valores), incluidas las variables estáticas en esa función.

Escriba info argspara enumerar "Argumentos del marco de pila actual" (nombres y valores).

kennytm
fuente
2
@ KennyTM, los nombres de las variables estáticas en la salida de info variablesdeberían ser variables estáticas dentro de esa unidad de compilación, ¿verdad?
cpuer
3
@cpuer: No necesariamente. Solo muestra el nombre en la tabla de símbolos. Por ejemplo, con gcc en Mac, yse cambia y.1913el nombre de una variable estática en la compilación.
kennytm
1
@KennyTM, ¿no se almacenan las variables estáticas dentro de la función de la misma manera que las variables estáticas fuera de la función (en la tabla de símbolos)?
cpuer
2
@cpuer: se almacenan de la misma manera, pero los nombres de los símbolos serán diferentes. Considere que tiene una variable estática yen función fooy otra yen bar. Para distinguirlos, se debe asignar un nombre diferente a los dos y.
kennytm
1
@KennyTM, además, ¿es posible llegar a donde se declara y define una variable respectivamente?
cpuer
110

En caso de que desee ver las variables locales de una función de llamada, use select-frameantesinfo locals

P.ej:

(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) 
Samuel Åslund
fuente
44
( select-framepuede abreviarse como sel. Alternativamente use frame/ f, que también imprime el marco)
user202729
27

Además, como info localsno muestra los argumentos de la función en la que se encuentra, use

(gdb) info args

Por ejemplo:

int main(int argc, char *argv[]) {
    argc = 6*7;    //Break here.
    return 0;
}

argcy argvno se muestra por info locals. El mensaje será "No hay locales".

Referencia: comando info locales .

Evgeni Sergeev
fuente
La única referencia verdadera está aquí: sourceware.org/gdb/current/onlinedocs/gdb/Frame-Info.html
Johan Boulé