2013-07-04 22 views
1

我有一個C++可執行文件,當我用下面的命令C++二進制是完全執行,同時用Valgrind的運行,但沒有運行單獨此二進制

valgrind -v --leak-check=full --show-reachable=yes --track-origins=yes mybinary -mode init > 5.log 2>&1 

它退出,0,並且所有的輸出運行此二進制時生成的文件。

但是當我運行這個二進制像

mybinary -mode init > 5.log 2>&1 

它的核心在許多地方傾倒(一個接一個的地方)。

爲什麼當我用valgrind跑步時,行爲會改變? valgrind是否設置了任何內部環境變量?

+1

valgrind日誌說什麼? – billz

+3

只有很少的信息,我們可以猜測。我的意思是,你的程序顯示未定義的行爲,並且它在'valgrind'下運行時似乎工作的事實僅僅是偶然。 – syam

+0

在許多地方轉儲內核表明它是多線程的或者使用fork,這意味着在運行valgrind時它的時序會有所不同(它也可能在某些方面同步事物,因爲我確信它有一些鎖以防止它綁定本身變成結)。尋找競爭條件,並分析你的核心轉儲,試圖看看它的去向。 –

回答

1

由於非常Valgrind的手冊says

Valgrind的串行化執行,使得只有一個(內核)線程同時運行。在Valgrind上運行時,你的程序將看到非常不同的調度,而不是正常運行時的調度。這是因爲Valgrind正在序列化線程,並且代碼運行速度比正常情況慢得多。

此外,您正在運行默認的Valgrind工具memcheck。您可以嘗試使用任何專注於線程的工具,例如helgrind或DRD,以獲取有關併發問題的特定信息。

相關問題