7

如何识别 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

假设我目前在 main() 函数中。我可以使用“”获取局部变量,info locals然后解析其变量名。

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

并且使用 list 命令我能够获得变量的当前范围,但不是整个函数体。下面是 list 命令的结果,声明变量 ' 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';

如果我检查源代码中的所有代码行,我可能会遇到来自不同函数的相同变量声明...帮助

4

1 回答 1

7

这很简单。您可以使用 list 命令查找相应的行。

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

这将表明 x 在第 7 行;

或者使用快捷命令l作为命令列表

(gdb) l x
7            int x;
于 2012-05-17T19:42:10.383 回答