GDB:如何识别gdb中当前函数的特定变量的变量声明的行号

时间:2012-05-15 09:03:35

标签: c gdb

如何在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';

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

1 个答案:

答案 0 :(得分:6)

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

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

这将显示x在第7行;

或使用快捷命令 l 执行命令列表

(gdb) l x
7            int x;