如何使用GDB监视两个同名的不同变量

如何使用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 0x4005

我需要使用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
(gdb) c
Continuing.
Hardware watchpoint 3: -location ::foo
全局
foo
已在
bar()中修改

本地
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++) {
旧值=0
新值=1
t.c:11处主()中的0x0000000000400521
11表示(foo=0;foo<5;foo++){
(gdb)c
持续的。
硬件观察点3:-位置::foo
旧值=1
新值=2
t.c:6时的巴数
6   }
(gdb)c
持续的。
硬件观察点2:-位置foo
旧值=1
新值=2
t.c:11处主()中的0x0000000000400521
11表示(foo=0;foo<5;foo++){

…等等。

如果一个是全局变量,另一个是局部变量,那么它们似乎是两个不同的变量。请举例说明您的意思。
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++) {