Обнаружение утечек памяти в коде Android JNI - PullRequest
6 голосов
/ 22 сентября 2010

Как обнаружить утечки памяти в коде Android JNI?Я использую Froyo

Ответы [ 3 ]

13 голосов
/ 23 сентября 2010

2017 обновление: доступно valgrind для Android. Встроенная функция отладки malloc была значительно расширена в Android N и весьма полезна для поиска утечек памяти. Вам может понадобиться _exit() приложение, чтобы вызвать дамп.

Описанная ниже функция DDMS в настоящее время получает краткое упоминание в официальных документах.


Существует экспериментальная неподдерживаемая функция, которой вы можете воспользоваться.

В файле конфигурации DDMS (например, ~/.android/ddms.cfg в Linux) добавьте «native = true». Это активирует вкладку Native Heap.

Затем включите отслеживание выделения собственной кучи на устройстве и перезапустите каркас приложения:

% adb shell setprop libc.debug.malloc 1 
% adb shell stop 
% adb shell start 

(Обратите внимание, что для этого требуется root. Обратите внимание также, что это относится только к последним версиям; в более старых выпусках вам также необходимо вручную заменить libc.so на libc_debug.so в / system / lib на устройстве.)

Вы можете определить, правильно ли настроено устройство, просмотрев вывод logcat при выполнении простой команды ("adb shell ls"). Если вы видите:

I/libc    ( 4847): ls using MALLOC_DEBUG = 1 (leak checker)

тогда вы знаете, что включили его.

Теперь вы можете использовать функции вкладки "Собственная куча" для получения снимков использования памяти кучи.

DDMS автоматически извлечет символы из общих библиотек .../symbols/system/lib в вашем исходном дереве Android. Конечно, для этого требуется, чтобы у вас было полное дерево исходников Android, а на вашем устройстве выполнялся код, созданный из него. В противном случае трассировки стека не могут быть декодированы в имена символов, что снижает полезность функции.

0 голосов
/ 06 мая 2016

Я также использовал в JB, JB +, KITKAT и lollipop.Это очень хороший инструмент в Android, чтобы найти утечки.

0 голосов
/ 19 декабря 2013

Вам нужно сделать снимок до и после теста. Затем нажмите кнопку +/- тогда он покажет место сохраненной памяти.

...