2012-05-15 10 views
6

Gdb'de geçerli işlev için belirli bir değişkenin değişken bildiriminin satır sayısını nasıl belirleyebilirim? Ben ana() işlevi şu anda olduğum varsayarsakGDB: gdb'de geçerli işlev için belirli bir değişkenin değişken bildiriminin satır sayısı nasıl belirlenir

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 

:

Aşağıda örnek bir kod. Yerel değişkenleri "info locals" kullanarak alıp değişken adlarını çözümledim.

(gdb) info locals 
x = 4200592 
c = "\000ε\[email protected]" 
p = 0x7ffd4000 
g = 0x40 <Address 0x40 out of bounds> 
ptr = 0x13cf304 <Address 0x13cf304 out of bounds> 

Ve liste komutunu kullanarak, tüm işlev gövdesini değil, değişkenin geçerli kapsamını elde edebildim. Aşağıda, liste komutunun sonucu ve 'x' bildirimi değişkeni eksik görünüyor. Ayrıca, liste boyutunu 20'ye ayarlamayı denedim ve 8'den 27'ye başlayan satırları aldım, ancak yine de yardımcı olmadım. Ben kaynak kodunda tüm kod satırlarını işaretlerseniz

(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'; 

i ... farklı işlevler aynı değişken bildirimleri karşılaşmak Bu kolaydır

cevap

6

yardımcı olabilir. İlgili satırı bulmak için liste komutunu kullanabilirsiniz.

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

Bu, x satır 7'de olduğunu gösterir;

Veya komut listeye

(gdb) l x 
7   int x; 
+1

Yey için kısayol komutunu l kullanın! ÇALIŞIYOR bir cazibe gibi! Teşekkür ederim: 3 – Chinwei

İlgili konular