为什么gdb显示错误的变量值?

Nip*_*ips 4 c gdb

我有简单的程序:

#include <stdio.h>

void func(int i) {
    i = 1;
    printf("%d\n", i);
}

int main(int argc, char *argv[]){
    func(0);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在:

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)
Run Code Online (Sandbox Code Playgroud)

程序工作正常,显示"1",但为什么gdb显示"0"值?

Debian喘息着.

我观察到gcc-4.7,gcc-4.6.在gcc-4.4上一切都好.

Dav*_*can 6

如果您使用编译,这是一个修复的错误-fvar-tracking.您的问题是此SO问题的更严格版本,它引用了有关GCC 4.8.0错误报告,建议使用上述编译标记.