4

私は簡単なプログラムを持っています:

#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 喘鳴。

gcc-4.7、gcc-4.6でそれを観察しました。gcc-4.4 ではすべて問題ありません。

4

1 に答える 1

7

これは、でコンパイルすると修正されるバグです-fvar-tracking。あなたの質問は、上記のコンパイル フラグを示唆するGCC 4.8.0 のバグ レポートを参照する、この SO questionのより厳密なバージョンです。

于 2013-08-15T19:52:48.807 に答える