2013-11-13 1 views

ответ

8

Я предполагаю, что снимок вы имеете в виду кучу кучи.

Из кода вашего приложения вы можете позвонить Debug.dumpHprofData(), чтобы сбросить данные.

Из сценария можно назвать

adb shell am dumpheap <process> <file> 

где <process> является, например, ваш идентификатор или имя процесса, а <file> - имя файла дампа. После этого вы можете отправить adb pull дамп на свой компьютер.

Чтобы проанализировать свалки кучи, вы можете использовать, например. jhat или MAT. Перед этим вам нужно запустить hprof-conv (входит в Android SDK) на дампе, чтобы преобразовать его из формата Dalvik в стандартный формат Java.

Дальнейшее чтение: Memory Analysis for Android Applications

+0

как я использую MAT из командной строки ? Я нашел решение использовать ParseHeapDump.sh, но как его использовать? –

0

DDMS предоставляет пользовательский интерфейс для АБР. Вы можете напрямую использовать команды ADB и обрабатывать выходные данные. Документацию АБР можно найти здесь: http://developer.android.com/tools/help/adb.html

5

@ ответ laalto является не совсем корректным

Из оболочки вы можете сделать следующее, чтобы получить дамп кучи для приложения с помощью ADB.

Примечание: Заменить с идентификатором процесса вашего запущенного приложения. Путь к файлу должен быть файловым путём, в котором ваше приложение имеет для записи на телефон на Android-устройство.

Создание дампа кучи:
adb shell am dumpheap 19000 /sdcard/Documents/android.hprof
Вытащите файл на ваш компьютер:
adb pull /sdcard/Documents/android.hprof
Преобразования в HPROF файл, считываемый с помощью анализатора:
hprof-conv android.hprof mat.hprof

Советов: Получить идентификатор процесса ваша заявка:

adb shell ps | grep com.sample.application | cut -c10-15

Получить идентификатор процесса и дампа кучи:

adb shell am dumpheap `adb shell ps | grep com.sample.application | cut -c10-15` /sdcard/Documents/android.hprof

0

Я написал небольшой скрипт, может быть, вы нашли бы полезным

heap_dump_location='/data/local/tmp/tmp.hprof' 

dump_heap() { 
    adb shell rm $heap_dump_location 
    pid=`adb shell ps | grep 'com.example.packagename' | grep -v 'packagename\.' | cut -c10-15` 
    adb shell am dumpheap $pid $heap_dump_location 
    echo "Heap dump started, we have no idea when it's done, so take a look at logs, and when is done use pull_heap_dump" 
} 

pull_heap_dump() { 
    adb pull $heap_dump_location $1 
} 

https://gist.github.com/logcat/8aeca0ee81af6fb0dc10bb0d58940007