Imprimer toutes les variables globales / variables locales?


Réponses:


490

Tapez info variablespour répertorier "Tous les noms de variables globales et statiques".

Tapez info localspour répertorier les «variables locales du cadre de pile actuel» (noms et valeurs), y compris les variables statiques dans cette fonction.

Tapez info argspour lister "Arguments du cadre de pile actuel" (noms et valeurs).


2
@ KennyTM, les noms des variables statiques en sortie de info variablesdevraient être des variables statiques dans cette unité de compilation, non?
cpuer

3
@cpuer: Pas nécessairement. Il affiche uniquement le nom dans la table des symboles. Par exemple, avec gcc sur Mac, une variable statique yest renommée y.1913lors de la compilation.
kennytm

1
@KennyTM, les variables statiques à l'intérieur de la fonction ne sont-elles pas stockées de la même manière que les variables statiques à l'extérieur de la fonction (dans la table des symboles)?
cpuer

2
@cpuer: Ils sont stockés de la même manière mais les noms des symboles seront différents. Considérez que vous avez une variable statique yen fonction fooet une autre yen bar. Pour les distinguer, un nom différent doit être attribué aux deux y.
kennytm

1
@KennyTM, encore plus, est-il possible d'obtenir où une variable est déclarée et définie respectivement?
cpuer

110

Au cas où vous voudriez voir les variables locales d'une fonction appelante utiliser select-frameavantinfo locals

Par exemple:

(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-framepeut être abrégé en sel. Vous pouvez également utiliser frame/ f, qui imprime également le cadre)
user202729

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.