2016-07-06 26 views
1

我有一個使用dlopendlclose加載/卸載庫的過程。該庫有一些內存泄漏,我想跟蹤Valgrind。我試過以下內容:如何使用Valgrind跟蹤動態加載的庫?

LD_PRELOAD=libmylibrary.so valgrind --leak-check=full myprogram 

它不起作用。我得到一個未定義的符號錯誤,因爲庫依賴於主程序中的一些符號。有沒有其他方法可以讓程序庫在程序結束時保持加載?

+0

你使用什麼操作系統?如果你不*預加載,你會觀察到什麼? –

回答

0

只需跳過測試程序中的dlclose(),以便共享對象的代碼段將保存在process's內存映射表中。然後,當valgrind發現由這個共享對象引起的任何泄漏時,它可以從進程的內存映射表中找到符號名稱。

如果調用dlclose(),dl庫可能會從進程的內存空間卸載共享對象,那麼valgrind將無法將地址解析爲有意義的符號名稱。

此外,使用LD_PRELOAD =用於加載帶有調試信息的庫。