2016-09-23 111 views

回答

3

请看下面的例子:

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++) { 

...等

相关问题