我有简单的程序:
#include <stdio.h>
void func(int i) {
i = 1;
printf("%d\n", i);
}
int main(int argc, char *argv[]){
func(0);
return 0;
}
现在:
gcc test.c -g -o test
gdb test
(gdb) b main
Breakpoint 1 at 0x400543: file test.c, line 9.
(gdb) run
Starting program: /tmp/test
Breakpoint 1, main (argc=1, argv=0x7fffffffe458) at test.c:9
9 func(0);
(gdb) s
func (i=0) at test.c:4
4 i =1;
(gdb) p i
$1 = 0
(gdb) n
5 printf("%d\n", i);
(gdb) p i
$2 = 0
(gdb)
程序工作正常,显示“1”,但为什么gdb显示“0”值?
Debian wheezy。
我观察到gcc-4.7,gcc-4.6。 在gcc-4.4上一切都还可以。
答案 0 :(得分:6)
如果使用-fvar-tracking
进行编译,则会修复此错误。您的问题是this SO question的更严格版本,它引用了bug report on GCC 4.8.0建议上述编译标记。