2016-01-08 33 views
1

我與嵌入式Linux開發工作,我們目前遇到一些麻煩一些內存頁分配錯誤,這讓我相信我們有一處泄漏。目前,我正在嘗試交叉編譯valgrind以在我們的系統上使用,但由於valgrind將耗盡大量內存(我們有嚴重的內存限制),因此我對此解決方案失去了信心。狩獵嵌入式系統內存泄漏的valgrind沒有(或使用最少的valgrind型應用程序)

這使我想知道:是否有狩獵內存泄漏沒有的valgrind或以最小的內存使用的valgrind型應用程序的方法嗎?爲malloc()和free()創建包裝是沒有問題的。

而且,導致該分配故障的測試是將文件複製n次,檢查其的md5sum,如果任何人是好奇的一個簡單的壓力測試。

我使用Linaro的工具鏈交叉編譯,glibc的2.15,以及系統設置沒有交換分區。該系統具有大約64MB的RAM,使valgrind或任何其他內存密集型應用程序難以使用。

問候, 吉列爾梅

+3

爲什麼將'malloc()'和'free()'換行/替換掉?你*知道Valgrind會這麼做,你知道嗎? –

+1

如果內存不足,您可能會遭受[內存碎片](http://stackoverflow.com/questions/3770457/what-is-memory-fragmentation),而不是泄漏。 –

+0

如果你不喜歡valgrind,還有AddressSanitizer,但是操作原理是一樣的。 – kfx

回答

3

由於您使用的glibc,你應該有它的內置內存跟蹤支持,提供給您。您的程序可通過在啓動時或啓動時調用mtrace(3)來啓用此功能。 mtrace()通過環境變量MALLOC_TRACE在運行時控制下將鉤子函數安裝到內存分配器中以記錄分配和釋放。

你可能也想知道mtrace(1),一個Perl腳本解釋由命令mtrace工廠生產日誌文件。

這個工具只跟蹤分配和釋放,這比Valgrind少得多。不過,當你正在尋找內存泄漏時,這些是你感興趣的主要內容。