2013-03-13 31 views

回答

6

機堆跟蹤是不支持的「隱形」功能。讓它工作可能有點棘手。郵件列表上有一個older discussion,可能有用。

如果你正在接收數據並且已經有了UI,那麼你已經到了一半了。 :-) DDMS在特定位置查找符號,您應該可以用ANDROID_SYMBOLS環境變量覆蓋符號,並將地址轉換爲addr2line(它也必須能夠找到)的行。

尋找大泄漏最簡單的方法是配置DDMS按庫分類分配。讓應用程序運行一段時間,看看哪個庫似乎正在增長最快。查看歸因於該庫的分配情況,看看是否有很多來自同一個地方。看看堆棧跟蹤,看看從那裏獲得許多長期分配是否合理。不是非常嚴格,但它常常會有訣竅。

要更徹底地檢查堆,您可以在設備上運行valgrind,但這並不容易第一次設置。

+0

我使用了調試符號,現在符號得到解決,並顯示代碼的函數名稱,地址和行號。 現在我正在運行應用程序,並使用了一個功能,例如:打開選項並查看關於應用程序的信息(版本,信用),評估應用程序種類的鏈接以及回到應用程序的信息視圖。現在在這種情況下可以找到泄漏。 – vsmph 2013-03-18 14:04:51

+1

如果您重複該過程10次,並且每次都泄漏對象,則應該看到具有相同堆棧跟蹤的分配的10個副本。如果您能夠「檢查」早期運行並對分配進行區分,它會更有效,但有時候只要查看分配情況,問題就會跳出來。如果它很有用,你可以通過'adb shell dumpheap -n /sdcard/dump.txt'獲取「原始」數據。 – fadden 2013-03-18 16:43:37

+0

非常感謝。它運行良好,我發現真正的大漏洞。 ----------------------------- 對於某些情況下,我無法多次運行場景,例如登錄用戶名。那種情況是無法涵蓋的。對這些案例的任何建議都是值得歡迎 – vsmph 2013-04-04 10:34:53