Предоставляет ли Android DDMS API? Мне нужно автоматизировать механизм моментального снимка для родной кучи. Или есть какой-либо инструмент для пост-обработки для анализа мгновенных снимков кучи DDMS.Как автоматизировать механизм моментального снимка DDMS?
ответ
Я предполагаю, что снимок вы имеете в виду кучу кучи.
Из кода вашего приложения вы можете позвонить 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
DDMS предоставляет пользовательский интерфейс для АБР. Вы можете напрямую использовать команды ADB и обрабатывать выходные данные. Документацию АБР можно найти здесь: http://developer.android.com/tools/help/adb.html
@ ответ 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
Я написал небольшой скрипт, может быть, вы нашли бы полезным
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
как я использую MAT из командной строки ? Я нашел решение использовать ParseHeapDump.sh, но как его использовать? –