Alle globalen Variablen/lokalen Variablen drucken?

Lesezeit: 2 Minuten

Benutzeravatar von cpuer
CPU

Wie kann ich alle globalen Variablen/lokalen Variablen drucken? Ist das im gdb möglich?

Benutzeravatar von kennytm
kennytm

Typ info variables um “Alle globalen und statischen Variablennamen” aufzulisten (riesige Liste.

Typ info locals um “Lokale Variablen des aktuellen Stapelrahmens” (Namen und Werte) aufzulisten, einschließlich statischer Variablen in dieser Funktion.

Typ info args um “Argumente des aktuellen Stapelrahmens” (Namen und Werte) aufzulisten.

  • @KennyTM, die statischen Variablennamen in der Ausgabe von info variables sollten statische Variablen innerhalb dieser Kompiliereinheit sein, richtig?

    – CPU

    7. Juni 2011 um 7:09 Uhr

  • @cpuer: Nicht unbedingt. Es zeigt nur den Namen in der Symboltabelle an. Zum Beispiel mit gcc auf dem Mac eine statische Variable y wird umbenannt in y.1913 bei der Zusammenstellung.

    – kennytm

    7. Juni 2011 um 7:14 Uhr

  • @KennyTM, werden statische Variablen innerhalb der Funktion nicht genauso gespeichert wie statische Variablen außerhalb der Funktion (in der Symboltabelle)?

    – CPU

    7. Juni 2011 um 7:20 Uhr

  • @cpuer: Sie werden auf die gleiche Weise gespeichert, aber die Symbolnamen unterscheiden sich. Stellen Sie sich vor, Sie haben eine statische Variable y in Funktion foo und ein anderer y in bar. Zur Unterscheidung muss beiden ein unterschiedlicher Name zugeordnet werden y‘s.

    – kennytm

    7. Juni 2011 um 7:41 Uhr

  • @KennyTM, ist es außerdem möglich, herauszufinden, wo eine Variable deklariert bzw. definiert ist?

    – CPU

    7. Juni 2011 um 7:53 Uhr

Falls Sie die lokalen Variablen einer aufrufenden Funktion sehen möchten, verwenden Sie select-frame Vor info locals

Z.B:

(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 kann abgekürzt werden als sel. Alternativ verwenden frame/fdie auch den Rahmen drucken)

    – Benutzer202729

    19. Mai 2018 um 7:59 Uhr

Außerdem seit info locals zeigt die Argumente der Funktion, in der Sie sich befinden, nicht an, verwenden Sie

(gdb) info args

Zum Beispiel:

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

argc und argv wird nicht angezeigt von info locals. Die Meldung lautet „Keine Einheimischen“.

Bezug: info locals kommando.

1427680cookie-checkAlle globalen Variablen/lokalen Variablen drucken?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy