原文:http://blog.csdn.net/a345017062/article/details/6083035 編譯完Android源碼后,會得到兩個bionic動態(tài)C庫,libc.so和libc_debug.so,為了能夠檢測內(nèi)存泄漏,我們應該首先在Android的rootfs中用libc_debug.so替換libc.so。在libc_debug.so庫中,Android隱藏了兩個可以用來檢測內(nèi)存泄漏的API: void get_malloc_leak_info(uint8_t** info, size_t* overallSize, size_t* infoSize, size_t* totalMemory, size_t* backtraceSize); 其中,info是我們分配的一塊內(nèi)存。overallSize是info的大小。infoSize是一個single entry的大小。totalMemory是我們跟蹤的所有內(nèi)存分配的總和,不包括heap。backtraceSize是back trace中的entry的最大數(shù)量。 我們可以在程序的開始和結(jié)束分別調(diào)用get_malloc_leak_info,然后比較差異,如果有什么不同,說明可能有內(nèi)存泄漏。 因為C++的new/delete也是基于C的malloc/free的,所以這個方法也可以檢測出C++的內(nèi)存泄漏。 如果你想知道bionic是如何實現(xiàn)這個功能的,可以參考bionic/libc/bionic/memory_leak.c。 如果想知道怎么樣使用這個功能,可以參考frameworks/base/media/libmediaplayerservice/MediaPlayerService.cpp。 你也可以像下面這樣獲取mediaplayer的內(nèi)存使用信息: #dumpsys media.player –m |
|