2012-05-15 3 views
6

Wie kann ich die Zeilennummer der Variablendeklaration einer bestimmten Variablen für die aktuelle Funktion in gdb identifizieren?GDB: Wie identifiziert man die Zeilennummer der Variablendeklaration einer bestimmten Variablen für die aktuelle Funktion in gdb

Hier ist ein Beispielcode:

1  #include<stdio.h> 
2 
3  void func(int*); 
4 
5  void main() 
6  { 
7  int x; 
8  char c[5]; 
9  int* p; 
10  char *g; 
11  char *ptr; 
12 
13  p = &x; 
14  g = &c[3]; 
15  func(&x); 
16  ptr = &c[1]; 
17  c[1]='f'; 
18  x=12; 
19 
20  } 
21 
22  void func(int *l){ 
23  int x; 
24  unsigned int ggg; 
25  ggg =100; 
26 
27  x = 3; 
28  *l = x; 
29  } 
30 

Wanted output: 
for main() 
    variable x, line 7 
    variable c, line 8 
    variable p, line 9 
    variable g, line 10 
    variable ptr, line 11 

for func() 
    variable x, line 23 
    variable ggg, line 24 

Ich bin zur Zeit in der Funktion main() Unter der Annahme. Ich kann die lokalen Variablen mit "info locals" dann geparst seine Variablennamen.

Und mithilfe der Liste Befehl konnte ich den aktuellen Bereich der Variablen, aber nicht ganze Funktion Körper bekommen. Unten ist das Ergebnis des Befehls list und die Deklarationsvariable 'x' scheint zu fehlen. Ich habe auch versucht, die Listengröße auf 20 zu setzen, und bekam die Zeilen von 8 bis 27, aber immer noch nicht hilfreich.

(gdb) l 
8  char c[5]; 
9  int* p; 
10  char *g; 
11  char *ptr; 
12 
13  p = &x; 
14  g = &c[3]; 
15  func(&x); 
16  ptr = &c[1]; 
17  c[1]='f'; 

Wenn ich alle Zeilen Code in den Quellcode zu überprüfen, könnte ich gleiche Variablendeklarationen aus verschiedenen Funktionen begegnen ... helfen

Antwort

6

Das ist einfach. Sie können den Befehl list verwenden, um die entsprechende Zeile zu finden.

(gdb) set listsize 1 
(gdb) list x 
7   int x; 
(gdb) 

Dies wird zeigen, dass x in Zeile 7 ist;

Oder verwenden Abkürzung Befehl l für Befehl Liste

(gdb) l x 
7   int x; 
+1

Yey! klappt wunderbar! Danke: 3 – Chinwei