如何在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
答案 0 :(得分:6)
这很容易。您可以使用list命令查找相应的行。
(gdb) set listsize 1
(gdb) list x
7 int x;
(gdb)
这将显示x在第7行;
或使用快捷命令 l 执行命令列表
(gdb) l x
7 int x;