2012-11-28 67 views
4

首先,我知道存在另一個與virtually the same title有關的問題,但這個問題的答案在這裏沒有用。 Another question靠得很近,但解決方案不是我可以在這裏用戶。防止Valgrind檢查共享庫

我的應用程序使用共享庫,Valgrind 真的不喜歡。它產生:

Program Exception - illegal instruction 
Image    PC    Routine   Line  Source    
libirc.so   000000000405ED3C Unknown    Unknown Unknown 
libhdf5.so.7  00000000061338E2 Unknown    Unknown Unknown 
libhdf5.so.7  00000000061A73CE Unknown    Unknown Unknown 
libhdf5.so.7  00000000061A9D6F Unknown    Unknown Unknown 
libhdf5_fortran.s 0000000006B23233 Unknown    Unknown Unknown 
libhdf5_fortran.s 0000000006B19FF9 Unknown    Unknown Unknown 
les3d.x   00000000006D815C Unknown    Unknown Unknown 

和死亡甚至進入我的應用程序(當然,它進入我的應用程序,但我們要做的第一件事是調用一個子程序來初始化共享庫,這是它死)了。在沒有Valgrind的情況下運行不會導致非法指令,但我確實得到了奇怪的段錯誤,因此需要一個內存檢查器。所以這是完全無法使用的,這就是爲什麼錯誤抑制不起作用。

實際上是否可以防止Valgrind在應用程序調用的共享庫上運行?不壓制輸出,但實際上並不下降。如果沒有,是否有可以防止的內存檢查器?

回答

3

首先您應該首先報告此問題 - 有關如何在valgrind web site上執行此操作的信息。

你所看到的表明valgrind的JIT正在生成一條在你的機器上無效的指令,這真的不應該發生。

要回答你的直接問題,沒有辦法做你想做的事情,因爲它沒有任何意義 - 除非valgrind能夠看到你的程序所做的所有讀寫操作,它不能跟蹤內存狀態正常,並且無法檢測到正在監視的程序部分中的錯誤。你會得到誤報和誤報。

+0

好點,當幫助解決問題的工具導致他人時,總是令人沮喪。或者在使用調試編譯器標誌運行時無法重現發佈標誌發生的問題:( – tpg2114