web-dev-qa-db-fra.com

Imprimer toutes les variables globales / variables locales?

Comment puis-je imprimer toutes les variables globales/locales? Est-ce possible dans gdb?

299
cpuer

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

Tapez info locals pour répertorier les "Variables locales du cadre de pile actuel" (noms et valeurs), y compris les variables statiques de cette fonction.

Tapez info args pour répertorier les "arguments du cadre de pile actuel" (noms et valeurs).

445
kennytm

Si vous voulez voir les variables locales d'une fonction appelante, utilisez select-frame avant info 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) 
96
Samuel Åslund

De plus, puisque info locals n’affiche pas les arguments de la fonction dans laquelle vous vous trouvez, utilisez

(gdb) info args

Par exemple:

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

argc et argv ne seront pas affichés par info locals. Le message sera "Pas de locaux."

Référence: commande info locals .

24
Evgeni Sergeev