1
我需要使用GDB来监视具有相同名称的两个不同变量,其中一个是全局变量,而另一个是局部变量。任何解决方案如何使用GDB监视两个具有相同名称的变量
我需要使用GDB来监视具有相同名称的两个不同变量,其中一个是全局变量,而另一个是局部变量。任何解决方案如何使用GDB监视两个具有相同名称的变量
请看下面的例子:
int foo;
void bar()
{
foo++;
}
int main()
{
int foo;
for (foo = 0; foo < 5; foo++) {
bar();
}
return 0;
}
gcc -g t.c
gdb -q ./a.out
(gdb) start
Temporary breakpoint 1 at 0x40050a: file t.c, line 11.
Starting program: /tmp/a.out
Temporary breakpoint 1, main() at t.c:11
11 for (foo = 0; foo < 5; foo++) {
(gdb) p &foo
$1 = (int *) 0x7fffffffdccc
(gdb) watch -l foo
Hardware watchpoint 2: -location foo
注:以上手表设置本地foo
。
(gdb) p &::foo
$2 = (int *) 0x60103c <foo>
(gdb) watch -l ::foo
Hardware watchpoint 3: -location ::foo
注意:上面的手表设置为全局foo
。
(gdb) c
Continuing.
Hardware watchpoint 3: -location ::foo
全球foo
已经modufied内bar()
。
Old value = 0
New value = 1
bar() at t.c:6
6 }
(gdb) c
Continuing.
Hardware watchpoint 2: -location foo
本地foo
已被修改里面main
:
Old value = 0
New value = 1
0x0000000000400521 in main() at t.c:11
11 for (foo = 0; foo < 5; foo++) {
(gdb) c
Continuing.
Hardware watchpoint 3: -location ::foo
Old value = 1
New value = 2
bar() at t.c:6
6 }
(gdb) c
Continuing.
Hardware watchpoint 2: -location foo
Old value = 1
New value = 2
0x0000000000400521 in main() at t.c:11
11 for (foo = 0; foo < 5; foo++) {
...等
如果一个是全球性的,一个是本地的,好像它们是两个不同的变量。请举例说明你的意思。 – kfsone