如何使用GDB监视两个同名的不同变量
我需要使用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
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++) {