Работа в DDMS Eclipse

=bor=
Сообщения: 267
Зарегистрирован: 21 мар 2013, 12:26

Re: Работа в DDMS Eclipse

Сообщение =bor= » 05 май 2013, 20:55

Перевода не дождался, сам перевёл. :)

Использование DDMS
Запуск DDMS
Как DDMS взаимодействует с помощью отладчика
Использование DDMS
Просмотр использования кучи для процесса
Отслеживание выделения памяти объектов
Работа с файловой системой эмулятора или устройства
Изучение информации потока
Начинаем метод профилирования
Используем инструмент Network Traffic
Использование LogCat
Имитация телефонных операций и геолокации

Android поставляется с инструментом отладки, называемым Dalvik Debug Monitor Server (DDMS), который обеспечивает порт-форвардинг, захват экрана на устройстве, информацию о тредах и кучах на устройстве, LogCat, информацию о процессах и состоянии радио, входящий вызов и SMS-имитацию, имитацию данных о местоположении, и многое другое. На этой странице приводится скромное обсуждение особенностей DDMS, это не исчерпывающий обзор всех функций и возможностей.

Запуск DDMS
________________________________________
DDMS интегрирован в Eclipse, а также поставляется в tools-директории SDK. DDMS работает как с эмулятором, так и с подключенным устройством. Если оба подключены и работают одновременно, DDMS по умолчанию работает эмулятором.
• Из Eclipse: нажмите Window> Open Perspective> Other ... > DDMS.
• Из командной строки: Введите ddms (или ./ddms на Mac/Linux) из tools / каталога.

Как DDMS взаимодействует с помощью отладчика
________________________________________
На платформе Android каждое приложение выполняется в собственном процессе, каждый из которых работает в своей собственной виртуальной машине (VM). Каждая виртуальная машина предоставляет уникальный порт, к которому отладчик может подключиться.
Когда стартует DDMS, он подключается к adb. Когда устройство подключено, создается служба мониторинга VM между adb и DDMS, которая уведомляет DDMS когда VM на устройстве запускается или останавливается. После того, как виртуальная машина запущена, DDMS получает идентификатор процесса виртуальной машины (PID), через adb, и открывает соединение с отладчиком виртуальной машины, через adb демона (adbd) на устройстве. DDMS теперь может общаться с VM с помощью собственного проводного протокола.
DDMS назначает порт отладки каждой виртуальной машине на устройстве. Как правило, DDMS назначает порт 8600 первой VM, следующий 8601, и так далее. Когда отладчик подключается к одному из этих портов, весь трафик передается в отладчик из связанных VM. Вы можете подключать только один отладчик к одному порту, но DDMS может работать с несколькими присоединёнными отладчиками.
По умолчанию DDMS также прослушивает другой порт отладки, DDMS "базовый порт" (8700, по умолчанию). Базовый порт является портом форвардинга, который может принимать VM трафик с любого порта отладки и направлять его в отладчик на порту 8700. Это позволяет присоединить один отладчик к порту 8700 и отлаживать все виртуальные машины на устройстве. Трафик, который направляется, определяется текущим выбранным процессом с точки зрения DDMS.
На следующем рисунке показан типичный экран DDMS в Eclipse. Если вы стартуете DDMS из командной строки, экран немного отличается, но большая часть функциональности идентична. Обратите внимание, что выделенный процесс, com.android.email , который выполняется в эмуляторе, имеет порт отладки 8700, назначенный ему, а также 8606. Это означает, что в настоящее время DDMS перенаправляет порт 8606 на статический порт отладки 8700.

Изображение
Рисунок 1. Скриншот DDMS

Если вы не используете Eclipse и ADT, читайте Configuring your IDE to attach to the debugging port для получения дополнительной информации о прикреплении отладчика.

Совет: Вы можете установить ряд предпочтений DDMS в File > Preferences. Предпочтения сохраняются в $HOME/.android/ddms.cfg.

Известные проблемы с отладкой Dalvik
Отладка приложения в Dalvik VM должна работать так же, как и в других виртуальных машинах. Однако, когда происходит выход из пошагового синхронизированного кода, курсор "текущей строки" может перескочить на последнюю строку в методе на один шаг.

Использование DDMS
________________________________________
В следующих разделах описано, как использовать DDMS и различные вкладки и панели, которые являются частью DDMS GUI. Версия Eclipse и версия для командной строки имеют незначительные различия пользовательского интерфейса, но ту же функциональность. Информацию о запуске DDMS, см. предыдущий раздел в этом документе Запуск DDMS.

Просмотр использования кучи для процесса
DDMS позволяет просматривать, сколько динамической памяти используется процессом. Эта информация полезна для отслеживания использования кучи в определенный момент времени в ходе выполнения вашего приложения.

Для просмотра использования кучи для процесса:
1. На вкладке Devices выберите процесс, для которого вы хотите увидеть информацию кучи.
2. Нажмите на кнопку Update Heap для включения информации кучи для процесса.
3. На вкладке Heap кликните Cause GC для вызова сбора мусора, которая разрешает сбор данных кучи. По завершении операции, вы увидите группы типов объектов и память, которая была выделена для каждого типа. Вы можете нажать Cause GC снова, чтобы обновить данные.
4. Нажмите на тип объекта в списке, чтобы увидеть гистограмму, которая показывает количество объектов, выделенных для конкретного размера памяти в байтах.

Отслеживание выделения памяти объектов
DDMS предоставляет функцию, позволяющую отслеживать объекты, размещённые в памяти, и увидеть, какие классы и потоки выделяются объектам. Это позволяет отслеживать в режиме реального времени, где объекты выделяются при выполнении определенных действий в приложении. Эта информация является ценной для оценки использования памяти, которая могут повлиять на производительность приложения.

Чтобы отслеживать распределение памяти объектов:
1. На вкладке Devices выберите процесс, которому вы хотите включить отслеживание.
2. На вкладке Tracker Allocation нажмите Start Tracking, чтобы начать слежение. С этого момента все, что вы делаете в вашем приложении, будет отслеживаться.
3. Нажмите Get Allocations, чтобы увидеть список объектов, которые были выделены, с тех пор как вы нажали на кнопку Start Tracking. Вы можете нажать на Get Allocations еще раз, чтобы добавить в список новые объекты, которые были выделены.
4. Чтобы остановить отслеживание или удалить данные и начать заново, нажмите кнопку Stop Tracking.
5. Нажмите на определенной строке в списке, чтобы увидеть более подробную информацию, такую как метод и номер строки кода, который соответствует объекту.

Работа с файловой системой эмулятора или устройства
DDMS предоставляет вкладку File Explorer, которая позволяет просматривать, копировать и удалять файлы на устройстве. Эта функция полезна при рассмотрении файлов, которые создаются приложением или если вы хотите передавать файлы на устройство или с устройства.

Для работы с файловой системой эмулятора или устройства:
1. На вкладке Devices выберите эмулятор, на котором вы хотите посмотреть файловую систему.
2. Чтобы скопировать файл с устройства, найдите файл в File Explorer и нажмите кнопку Pull file .
3. Чтобы скопировать файл в устройство, нажмите кнопку Push file на вкладке File Explorer.

Изучение информации потока
Вкладка Threads DDMS показывает вам в данный момент потоки для выбранного процесса.
1. На вкладке Devices выберите процесс, потоки которого вы хотите исследовать.
2. Нажмите Update Threads.
3. На вкладке Threads вы можете просмотреть информацию о потоке для выбранного процесса.

Запуск метода профилирования
Метод профилирования предназначен для отслеживания определенных метрик о методе, например, количество вызовов, время выполнения, и время, потраченное на выполнение метода. Если вы хотите более детальный контроль над тем, где собираются данные профилирования, используйте startMethodTracing() и stopMethodTracing() методы. Для получения дополнительной информации о создании журнала трассировки см. Profiling and Debugging UIs.

Перед началом метода профилирования в DDMS, будьте в курсе следующих ограничений:
• Android 1.5 устройства не поддерживаются.
• Android 2.1 и более ранние устройства должны иметь SD карту и приложение должно иметь разрешение на запись на карту памяти SD.
• Android 2.2 и более поздним устройствам не нужны карты SD. Файлы журнала трассировки передаются непосредственно вашему компу.

Для начала метода профилирования:
1. На вкладке Devices выберите процесс, которому вы хотите включить метод профилирования.
2. Нажмите Start Method Profiling.
3. Взаимодействуйте с приложением, чтобы стартовать метод, которые вы хотите профилировать.
4. Нажмите Stop Method Profiling. DDMS останавливает профилирование приложения и открывает Traceview с информацией метода профилирования, которая была собрана между временем, как вы нажали на Start Method Profiling и Stop Method Profiling.

Используем инструмент Network Traffic
В Android 4.0, DDMS (Dalvik Debug Monitor Server) включает в себя вкладку Detailed Network Usage, позволяющую отслеживать, когда ваше приложение делает сетевые запросы. Используя этот инструмент, вы можете контролировать, как и когда ваше приложение передаёт данные и оптимизировать исходный код соответствующим образом. Также можно различать разные типы трафика, применяя "тэги" сетевых сокетов перед использованием.

Эти тэги показываются на диаграмме области стека в DDMS, как показано на рисунке 2:

Изображение
Рисунок 2. Вкладка Network Usage.

Контролируя частоту передачи ваших данных, и объем данных, передаваемых во время каждого соединения, вы можете определить области приложения, которые можно сделать более эффективными для использования батареи. Как правило, вы должны смотреть на короткие всплески, которые можно отложить, или что должно вызываться позднее, передаётся заранее.

Чтобы лучше определить причину всплесков передачи, TrafficStats API позволяет пометить передачу данных, происходящих в поток; используйте setThreadStatsTag(), а затем вручную тегируйте (и снимайте тег) индивидуальные сокеты, используя tagSocket() и untagSocket(). Например:

Код: Выделить всё

TrafficStats . setThreadStatsTag ( 0xF00D ); 
TrafficStats . tagSocket ( outputSocket ); 
// Передача данных с использованием сокетов 
TrafficStats . untagSocket ( outputSocket );
Кроме того, Apache HttpClient и URLConnection API, включенные в платформу, автоматически тегируют сокеты внутренне на основе активного тега (как это определено getThreadStatsTag()). Эти API правильно тегируют/снимают тег сокетов, когда переработаны в рамках поддержания активности пулов. В следующем примере, setThreadStatsTag() назначает активному тегу 0xF00D. Там может быть только одна активная метка на поток. Это значение, которое будет возвращено getThreadStatsTag() и, следовательно, используется HttpClient для тега сокетов. Инструкция finally вызывает clearThreadStatsTag(), чтобы очистить тег.

Код: Выделить всё

TrafficStats . setThreadStatsTag (0xF00D ; 
   try { 
        / / Делаем запрос, используя HttpClient.execute() 
    }  finally { 
        TrafficStats.clearThreadStatsTag(); 
}
Тегирование сокетов поддерживается в Android 4.0, но статистика в реальном времени будет отображаться только на устройствах под управлением Android 4.0.3 или выше.

Использование LogCat
LogCat интегрирован в DDMS и выводит сообщения, которые вы выводите с использованием Log класса наряду с другими сообщениями, таких как трассировка стека, когда возникают исключения. Смотрите тему Reading and Writing Log Messages для получения дополнительной информации о том, как записывать сообщения в LogCat.
Когда Вы настроили логирование, вы можете использовать LogCat фичу DDMS для фильтрации определенных сообщений с помощью следующих кнопок:
• Warn (Все)
• Debug (Отладка)
• Info (Информация)
• Warn (Предупреждения)
• Error (Ошибки)
Вы также можете настроить свой собственный пользовательский фильтр для указания большего количества деталей, таких как фильтрация сообщений с определённым тегом и идентификатором процесса, вызвавшего сообщения лога. Кнопки add filter, edit filter и delete filter позволяют Вам управлять своими пользовательскими фильтрами.

Эмуляция операций с телефоном и навигацией
Вкладка Emulator control позволяет имитировать телефонные вызовы и данные о состоянии сети. Это полезно, когда вы хотите проверить надежность приложения в различных сетевых средах.

Изменение состояния сети, скорости и задержки
Секция Telephony Status вкладки Emulator controls позволяет изменять различные аспекты состояния телефоной сети, скорость и задержки. Следующие опции доступны для вас и вступают в силу немедленно после того, как вы установите их:
• Voice - незарегистрированные, дома, роуминг, поиска, отказано
• Data - незарегистрированные, дома, роуминг, поиска, отказано
• Speed - полный, GSM, HSCSD, GPRS, EDGE, UMTS, HSDPA
• Latency - GPRS, EDGE, UMTS

Имитация звонков или текстовых сообщений SMS
Секция Telephony Actions вкладки Emulator controls позволяет имитировать звонки и сообщения. Это полезно, когда вы хотите, чтобы проверить надежность приложения в ответ на входящие звонки и сообщения, отправленные на телефон. Следующие действия доступны для Вас:
• Voice - Введите номер в поле Incoming number и нажмите кнопку Call для отправки симуляции вызова на эмулятор или телефон. Нажмите Hang up для завершения вызова.
• SMS - Введите номер в поле Incoming number и сообщение в поле Message: и нажмите кнопку Send, чтобы отправить сообщение.

Установка местоположения
Если ваше приложение зависит от местоположения телефона, DDMS может отправлять на устройство или AVD макет местоположения. Это полезно, если вы хотите проверить различные аспекты расположения вашего приложения без физического перемещения. Следующие типы данных местоположения доступны для Вас:
• Manual - установить местоположение вручную, с указанием десятичных или шестидесятеричных значений долготы и широты.
• GPX - GPS Обмен файлами
• KML - Keyhole Markup Language файл
Для получения дополнительной информации о предоставлении макета данных о местоположении см. Location Strategies.

=bor=
Сообщения: 267
Зарегистрирован: 21 мар 2013, 12:26

Re: Работа в DDMS Eclipse

Сообщение =bor= » 06 май 2013, 00:35

Продолжение. :)

Чтение и запись логов
Log class
Стартуем LogCat
Фильтрация вывода логов
Управление форматом вывода логов
Просмотр альтернативных буферов вывода
Просмотр stdout и stderr
Отладка веб-страниц

Система регистрации Android обеспечивает механизм для сбора и просмотра вывода отладочной информации. Logcat делает дамп логов системных сообщений, которые включают в себя такие вещи, как трассировки стека, когда эмулятор выдает сообщение об ошибке и сообщения, которые вы написали из вашего приложения, используя класс Log. Вы можете запустить LogCat через ADB или DDMS, которые позволяет читать сообщения в реальном времени.

Класс Log
________________________________________
Log – это логирующий класс, который можно использовать в коде для вывода сообщения в LogCat. Общие методы ведения журналов включают в себя:
• V (String, String) (подробно)
• D (String, String) (отладка)
• I (String, String) (информация)
• W (String, String) (предупреждение)
• е (String, String) (ошибка)

Например:

Код: Выделить всё

Log.i ("MyActivity", "MyClass.getView() - получить номер позиции" + position);
LogCat выведет что-то вроде:

Код: Выделить всё

I / MyActivity (1557): MyClass.getView () - получить номер позиции 1
Использование LogCat
________________________________________
Вы можете использовать LogCat изнутри DDMS или вызывать ее из ADB-шелл. Для получения дополнительной информации о том, как использовать в LogCat DDMS см. Using DDMS. Для запуска LogCat через ADB-шелл используйте следующее:

Код: Выделить всё

[adb] LogCat [< опции >]  ...  [<filter-spec>]  ...
Вы можете использовать команду LogCat с компьютера разработки или из удаленного adb shell в эмуляторе/экземпляра устройства. Для просмотра выходных логов в компьютере разработчика, вы используете

Код: Выделить всё

$ adb logcat
и из удаленного adb shell вы используете

Код: Выделить всё

# logcat
В следующей таблице описаны параметры командной строки LogCat :
-c Очистка журнала и выход
-d Дамп лога на экран и выход
-f <filename> Запись логов в <filename>. По умолчанию stdout.
-g Вывод размер указанного буфера журнала и выход
-n <count> Устанавливает максимальное количество обновления логов из <count> . Значение по умолчанию 4. Требует -R опцию
-r <kbytes> Обновление лог-файла каждые <kbytes> продукции. Значение по умолчанию равно 16. Требует F- опцию
-s Задает спецификацию фильтров по умолчанию в беззвучный режим
-v <format> Устанавливает формат вывода сообщений логов. По умолчанию brief-формат. Список поддерживаемых форматов см. в разделе Controlling Log Output Format

Фильтрация вывода логов
Каждое сообщение лога Android имеет тег и приоритет, связанные с ним.
• Тег сообщения лога – короткая строка, указывающую на компонент системы, из которой сообщение исходит (например, " View " для представления системы).
• Приоритет - один из следующих символов, в порядке приоритета от низшего к высшему:
o V - Verbose (самый низкий приоритет)
o D - Debug
o I - Info
o W - Warning
o E - Error
o F - Fatal
o S - Silent (самый высокий приоритет, на котором ничего даже не выводится)

Вы можете получить список тегов, используемых в системе, вместе с приоритетами, запустив LogCat и наблюдая первые два столбца каждого сообщения, <priority> / <tag> .
Вот пример из LogCat-вывода, который показывает, что сообщение относится к приоритету уровня "I" и тегу "ActivityManager":

Код: Выделить всё

I/ActivityManager (585): Starting activity: Intent { action=Android.intent.action...}
Для уменьшения вывода логов до приемлемого уровня, можно ограничить вывод, используя filter expressions. Фильтр выражений позволяет указать системе комбинации тегов-приоритета, которые вам нужны - система подавляет другие сообщений, кроме указанных тегов.
Выражение фильтра имеет следующий формат tag:priority..., где tag указывает интересующий тег и priority указывает на минимальный уровень приоритета рапортовать по этому тегу. Сообщения тега этого уровня или приоритетом выше записываются в журнал. Вы можете указать любое количество tag:priority спецификаций в одном выражении фильтра. Набор спецификаций разделяется пробелами.
Вот пример фильтра, который подавляет все сообщения, за исключением с тегом "ActivityManager", с приоритетом "Info" или выше, и все сообщения, с тегом "MyApp", с приоритетом "Debug" или выше:

Код: Выделить всё

adb logcat ActivityManager:I MyApp:D *:S
Последний элементо в этом выражении *: S задает уровень приоритета для всех тегов " silent ", обеспечивая тем самым отображение только сообщений со словами " View " и "MyApp". Использование *:S является отличным способом чтобы убедиться, что вывод логов ограничен фильтрами, которые явно указаны - это позволяет вашим фильтрам служить "белым списком" для вывода логов.
Следующее выражение фильтра показывает все сообщения, с уровнем приоритета "warning" и выше на все теги:

Код: Выделить всё

adb logcat *:W
Если вы используете LogCat с компьютера разработчика (в противовес запуску его на удаленном adb shell), вы также можете установить фильтр по умолчанию путем экспорта значения переменной среды ANDROID_LOG_TAGS:

Код: Выделить всё

export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
Обратите внимание, что ANDROID_LOG_TAGS фильтр не экспортируется в эмулятор/устройство, если вы работаете с LogCat из удаленного шелла или используете adb shell logcat.

Контроль формата вывода логов
Лог-сообщения содержат ещё ряд полей метаданных в дополнение к полям тег и приоритет. Вы можете изменить формат вывода логов, чтобы они отображали определенное поле метаданных. Чтобы сделать это, используйте опцию –V и укажите один из поддерживаемых форматов вывода, перечисленных ниже.
• brief - отображает приоритет/тег и PID процесса, который послал сообщение (формат по умолчанию)
• process - только PID
• tag - отображает приоритет/тег
• raw - отображает лог как raw, без других полей метаданных
• time - отображает дату, времени вызова, приоритет/тег, и PID процесса, который послал сообщение
• threadtime - отображает дату, времени вызова, приоритет, тег и PID и TID потока, который послал сообщение
• long - отображение всех полей метаданных и отдельно сообщения с пустыми строками.

При запуске LogCat вы можете указать выходной формат, который вы хотите с помощью опции -v:

Код: Выделить всё

[adb] logcat [- v <format>]
Вот пример, который показывает, как создавать сообщения в формат вывода thread:

Код: Выделить всё

adb logcat - v thread 
Обратите внимание, что можно указать только один выходной формат опцией –v.

Просмотр альтернативных буферов логов
Система регистрации Android хранит несколько кольцевых буферов логов, и не все из логов отправляются в кольцевой буфер по умолчанию. Для отображения дополнительных сообщений журнала, вы можете запустить LogCat команду с опцией –b для просмотра альтернативного кольцевого буфера. Вы можете просмотреть любой из этих альтернативных буферов:
• radio - просмотр буфера, содержащего логи радио/телефонии
• events - просмотр буфера, содержащего сообщения, связанных с событиями
• main - просмотр основного лог-буфера (по умолчанию)

Использование опции -b:

Код: Выделить всё

[abp] logcat [-b <buffer>]
Вот пример того, как просмотреть лог буфер, содержащий радио- и телефонные логи:

Код: Выделить всё

abp logcat -b radio
Просмотр stdout и stderr
________________________________________
По умолчанию, система Android посылает stdout и stderr (System.out и System.err) вывод на /Dev/null. В процессах, которые управляют Dalvik VM, у вас есть система записи копии вывода в лог-файл. В этом случае система записывает сообщения в лог с помощью лог-тегов stdout и stderr с приоритетом I.
Для такого вывода логов вы останавливаете запущенный эмулятор/устройство, а затем используете шелл-команду SetProp, чтобы перенаправить вывод. Вот как это делается:

Код: Выделить всё

$ adb shell stop
$ adb shell setprop log.redirect-stdio true
$ adb shell start
Система сохраняет эту настройку, пока вы не остановите эмулятор/устройство. Для использования настройки по умолчанию на эмуляторе/устройстве вы можете добавить запись в /data/local.prop на устройстве.

Отладка веб-приложений
________________________________________
Если вы разрабатываете веб-приложение для Android, вы можете отлаживать JavaScript с помощью консоли JavaScript APIs, выводя сообщения LogCat. Для получения дополнительной информации см. Debugging Web Apps.

Ответить