2011-10-31 32 views
0

我使用valgrind來調試我的應用程序。我有兩臺機器,我希望無錯地運行代碼。 一個是運行valgrind 3.7.0的ubuntu 11.10,另一個是帶有valgrind 3.6.0和valgrind 3.8.0的Mac OS X 10.7.2。Valgrind錯誤在操作系統中有所不同

我運行下面的命令Valgrind的:

valgrind --track-origins=yes ./my_program 

在Linux機器上我沒有得到任何錯誤報告。在當誤差在升壓LIB報道了Mac的valgrind抱怨

==35723== Conditional jump or move depends on uninitialised value(s) 
==35723== at 0x10004DCAF: boost::spirit ... 

我不認爲這有可能是Boost庫的錯誤(增強版是在兩臺機器上1.46.1相同)。

不同錯誤報告的原因是什麼?

+0

目前的Boost版本是1.47,你怎麼能有3.6.1? –

+0

你爲什麼在意他們會如何變得不同?相反,解決一個版本指出的問題,然後兩者都會通過。 –

+0

3.6.1是Valgrind的最新版本,@ tune2fs請修復您的問題。 – ks1322

回答

3

Valgrind不是一個靜態分析工具,而是一個運行時分析工具,即valgrind在虛擬機上運行程序。在許多應用程序中有很多代碼不是由每臺機器觸發或編譯的,因此解釋了這些差異。

1

你在兩臺電腦上使用不同的編譯器嗎?也許不同的編譯器或不同的編譯器版本在訪問未初始化的變量時會產生具有不同行爲的代碼。

+0

它們是兩臺機器上兩個不同版本的gcc,我嘗試使用相同版本進行編譯。 – tune2fs

+0

它不是編譯器。 – tune2fs

1

我有過的形式,其中

if (A && B) { 
    do_stuff 
} 

B如果A是真的只是初始化語句。  當我沒有使用優化時,程序(如預期的)首先檢查A,然後,如果它是真的,則檢查B。  優化時,編譯器發現首先檢查B是有利的; ,因爲AB都沒有任何副作用或依賴於易失性存儲器,這是等效的。  這後一種行爲導致valgrind給我你看到的警告類型,即使代碼沒有任何錯誤。  我的猜測是這裏有類似的事情發生。

相關問題