2012-07-18 109 views
1

我的工作通過我的方式學習C堅硬方式,我開始section on valgrindValgrind的輸出與預期(

的例子輸出的摘錄不同寫着:

==3082== Use of uninitialised value of size 8 
==3082== at 0x4E730EB: _itoa_word (_itoa.c:195) 
==3082== by 0x4E743D8: vfprintf (vfprintf.c:1613) 
==3082== by 0x4E7E6F9: printf (printf.c:35) 
==3082== by 0x40052B: main (ex4.c:11) 

雖然我輸出看起來是這樣的:

==2362== Use of uninitialised value of size 4 
==2362== at 0x40885CB: _itoa_word (in /lib/libc-2.16.so) 
==2362== by 0x408C13E: vfprintf (in /lib/libc-2.16.so) 
==2362== by 0x4092AE: printf (in /lib/libc-2.16.so) 
==2362== by 0x4061604: (below main) (in /lib/libc-2.16.so) 

如何讓我的Valgrind的輸出匹配,我並不十分擔心2-4行,但我寧願最後一行實際上對應(一nd我猜這可能是無論如何)。


我建我的EX4是這樣的:

$ make ex4 
cc -Wall -g ex4.c -o ex4 
** Some warnings here ** 

然後執行Valgrind的,像這樣:

$ valgrind ./ex4 

我正在從源代碼建立在Arch Linux的Valgrind的3.7.0, GCC 4.7.1,因爲我有GLIBC 1.6我修改了我的配置文件並添加了以下代碼:

 2.16) 
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: 2.16 family" >&5 
$as_echo "2.16 family" >&6; } 

$as_echo "#define GLIBC_2_16 1" >>confdefs.h 

DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}" 
DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}" 
DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}" 
;; 

恰好在;;之下,與之前的2.14)一致。

回答

1

我懷疑你沒有安裝標準庫的調試/符號。

由於庫版本不同,輸出總是略有不同,但您應該可以通過調試軟件包獲得一些行數。

您可能需要-O0以避免main()被忽略。