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

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

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

1个回答

7

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

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

这将显示 x 在第 7 行;
或使用快捷命令 l 来执行 list 命令。
(gdb) l x
7            int x;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接