¿Imprimiendo todas las variables globales/variables locales?

2 minutos de lectura

avatar de usuario
CPU

¿Cómo puedo imprimir todas las variables globales/variables locales? ¿Es eso posible en gdb?

avatar de usuario
kennytm

Escribe info variables para enumerar “Todos los nombres de variables globales y estáticas” (lista enorme.

Escribe info locals para enumerar “Variables locales del marco de pila actual” (nombres y valores), incluidas las variables estáticas en esa función.

Escribe info args para enumerar “Argumentos del marco de pila actual” (nombres y valores).

  • @KennyTM, los nombres de variables estáticas en la salida de info variables deberían ser variables estáticas dentro de esa unidad de compilación, ¿verdad?

    – computadora

    7 de junio de 2011 a las 7:09

  • @cpuer: No necesariamente. Solo muestra el nombre en la tabla de símbolos. Por ejemplo, con gcc en Mac una variable estática y se renombra a y.1913 en compilación.

    – kennytm

    7 de junio de 2011 a las 7:14

  • @KennyTM, ¿las variables estáticas dentro de la función no se almacenan de la misma manera que las variables estáticas fuera de la función (en la tabla de símbolos)?

    – computadora

    7 de junio de 2011 a las 7:20

  • @cpuer: se almacenan de la misma manera, pero los nombres de los símbolos serán diferentes. Considere que tiene una variable estática y en función foo y otro y en bar. Para distinguirlos, se debe asignar un nombre diferente a los dos y‘s.

    – kennytm

    7 de junio de 2011 a las 7:41

  • @KennyTM, además, ¿es posible llegar a donde se declara y define una variable respectivamente?

    – computadora

    7 de junio de 2011 a las 7:53

En caso de que desee ver las variables locales de una función de llamada, use select-frame antes de info 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) 

  • (select-frame se puede abreviar como sel. Alternativamente, use frame/fque también imprimen el marco)

    – usuario202729

    19 de mayo de 2018 a las 7:59

Además, desde info locals no muestra los argumentos de la función en la que se encuentra, utilice

(gdb) info args

Por ejemplo:

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

argc y argv no será mostrado por info locals. El mensaje será “No locales”.

Referencia: Comando de información local.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad