gdb estaticas - ¿Imprimiendo todas las variables globales / variables locales?




javascript valor (4)

Escriba las info variables para listar "Todos los nombres de variables globales y estáticos".

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

Escriba info args para listar "Argumentos del marco de pila actual" (nombres y valores).

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


Además, dado que los info locals no muestran 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;
}

argc y argv no serán mostrados por los info locals . El mensaje será "No locales".

Referencia: información del comando locals .


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

La forma estándar de capturar null e undefined simultáneamente es esta:

if (variable == null) {
     // do something 
}

--que es 100% equivalente a lo más explícito pero menos conciso:

if (variable === undefined || variable === null) {
     // do something 
}

Cuando se escribe JS profesional, se da por sentado que se entiende la igualdad de tipos y el comportamiento de == vs === . Por lo tanto usamos == y solo comparamos con null .

Editar de nuevo

Los comentarios que sugieren el uso de typeof son simplemente incorrectos. Sí, mi solución anterior causará un error de referencia si la variable no existe. Ésto es una cosa buena. Este ReferenceError es deseable: lo ayudará a encontrar sus errores y corregirlos antes de enviar su código, al igual que los errores del compilador en otros idiomas.

No debe tener ninguna referencia a variables no declaradas en su código.





c variables gdb global-variables