2012-05-15 19 views
6

में वर्तमान फ़ंक्शन के लिए किसी विशिष्ट चर के चरणीय घोषणा की रेखा संख्या की पहचान कैसे करें I gdb में वर्तमान फ़ंक्शन के लिए किसी विशिष्ट चर के चरणीय घोषणा की रेखा संख्या की पहचान कैसे कर सकता हूं ?? मान लिया जाये कि मैं मुख्य() फ़ंक्शन में वर्तमान में कर रहा हूँजीडीबी: जीडीबी

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 

:

यहाँ एक नमूना कोड है। मैं "info locals" का उपयोग कर स्थानीय चर प्राप्त कर सकता हूं, फिर इसके चर नामों को पार्स कर सकता हूं।

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

और सूची कमांड का उपयोग करके मैं चर के वर्तमान दायरे को प्राप्त करने में सक्षम था लेकिन पूरे फ़ंक्शन बॉडी नहीं। नीचे सूची कमांड का परिणाम है, और घोषणा चर 'x' गायब प्रतीत होता है। मैंने सूची आकार को 20 तक सेट करने का भी प्रयास किया, और लाइनों को 8 से 27 तक शुरू किया, लेकिन अभी भी सहायक नहीं है।

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

अगर मैं स्रोत कोड में कोड की सभी पंक्तियों की जाँच, मैं विभिन्न कार्यों से एक ही चर घोषणाओं का सामना कर सकते ... मदद

उत्तर

6

यह आसान है। आप इसी पंक्ति को खोजने के लिए सूची कमांड का उपयोग कर सकते हैं।

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

यह दिखाएगा कि एक्स लाइन 7 पर है;

या आदेश सूची

(gdb) l x 
7   int x; 
+1

Yey के लिए शॉर्टकट कमांड एल का उपयोग करें! एक जादू की तरह काम करता है! धन्यवाद: 3 – Chinwei