Android Studio предоставляет отладчик, позволяющий выполнять следующие и многие другие действия:
- Выберите устройство, на котором вы будете отлаживать приложение.
- Установите точки останова в своем коде на Java, Kotlin и C/C++.
- Проверяйте переменные и оценивайте выражения во время выполнения программы.
На этой странице приведены инструкции по основным операциям отладки. Для получения дополнительной информации см. также документацию по отладке в IntelliJ IDEA .
Включить отладку
Прежде чем приступить к отладке, выполните следующие действия:
- Включите отладку на вашем устройстве.
- При использовании эмулятора отладка включена по умолчанию. Но для подключенного устройства необходимо включить отладку в параметрах разработчика устройства .
- Запустите отлаживаемый вариант сборки.
Используйте вариант сборки , в конфигурации которого параметр `
debuggable true(isDebuggable = trueв скриптах Kotlin).Обычно можно выбрать вариант сборки по умолчанию "debug", который включен в каждый проект Android Studio, даже если он не виден в файле
build.gradle. Однако, если вы определяете новые типы сборки, которые должны быть отлаживаемыми, необходимо добавитьdebuggable trueк типу сборки:- Установите точки останова в коде вашего приложения.
- На панели инструментов выберите устройство, на котором вы хотите отлаживать приложение, из меню целевого устройства.

Рисунок 1. Меню целевого устройства. Если у вас не настроены никакие устройства, вам необходимо либо подключить устройство через USB , либо через Wi-Fi , либо создать AVD для использования эмулятора Android .
- На панели инструментов нажмите «Отладка».
.Если ваше приложение уже запущено на устройстве, отобразится диалоговое окно с вопросом, хотите ли вы переключиться с режима «Запуск» на режим «Отладка». Для начала отладки устройству потребуется перезагрузка. Чтобы оставить запущенным тот же экземпляр приложения, нажмите «Отменить отладку» и вместо этого подключите отладчик к запущенному приложению . В противном случае Android Studio создаст APK-файл, подпишет его ключом отладки, установит на выбранное вами устройство и запустит его.
Если вы добавите в свой проект код на C и C++ , Android Studio также запустит отладчик LLDB в окне отладки для отладки вашего нативного кода.
- Если окно отладки не открыто, выберите Вид > Окна инструментов > Отладка или нажмите кнопку Отладка.
в панели инструментов. - Нажмите «Подключить отладчик к процессу Android».
. - В диалоговом окне «Выбор процесса» выберите процесс, к которому вы хотите подключить отладчик.
- Если вы используете эмулятор или устройство с root-правами, вы можете установить флажок «Показать все процессы» , чтобы увидеть все процессы. На устройстве с root-правами это покажет все процессы, запущенные на устройстве. Однако на устройстве без root-прав это покажет только процессы, доступные для отладки.
- В меню «Использовать настройки отладчика Android» можно выбрать существующую конфигурацию запуска/отладки . Для кода на C и C++ это позволяет повторно использовать команды запуска LLDB, команды LLDB после подключения и каталоги символов в существующей конфигурации.
- Если у вас нет существующей конфигурации запуска/отладки, выберите «Создать новую» . Этот пункт активирует меню «Тип отладки» , где вы можете выбрать другой тип отладки . По умолчанию Android Studio использует тип отладки «Обнаруживать автоматически», чтобы выбрать оптимальный вариант отладчика в зависимости от того, содержит ли ваш проект код на Java или C/C++.
- Нажмите ОК .
Появляется окно отладки.
- Панель инструментов выполнения и навигации. См. раздел «Работа с точками останова».
- селектор потоков
- Ввод выражений для оценки и отслеживания изменений. См. раздел «Проверка переменных» .
- Стековый дисплей
- Панель переменных. См. раздел «Проверка переменных» .
- Обнаружение автоматически
- Выберите этот тип отладки, если хотите, чтобы Android Studio автоматически выбирала оптимальный вариант для отлаживаемого кода. Например, если в вашем проекте есть код на C или C++, Android Studio автоматически использует тип отладки «Двойная». В противном случае Android Studio использует тип отладки «Только Java».
- Только для Java
- Выберите этот тип отладки, если хотите отлаживать только код, написанный на Java или Kotlin. Отладчик «Только Java» игнорирует любые точки останова или наблюдения, установленные в вашем нативном коде.
- Только для нативной версии (доступно только с кодом на C/C++)
- Выберите этот тип отладки, если хотите использовать только LLDB для отладки кода. При использовании этого типа отладки представление сессии отладчика Java недоступно. По умолчанию LLDB проверяет только ваш нативный код и игнорирует точки останова в вашем коде Java. Если вы также хотите отлаживать свой код Java, переключитесь на тип отладки «Автоматическое обнаружение» или «Двойная отладка».
Встроенная отладка работает только на устройствах, отвечающих следующим требованиям:
Устройство поддерживает
run-as.Чтобы проверить, поддерживает ли устройство
run-as, выполните следующую команду в оболочке ADB, подключенной к вашему устройству:run-as your-package-name pwd
Замените
your-package-nameна имя пакета вашего приложения. Если устройство поддерживаетrun-as, команда должна завершиться без ошибок.На устройстве включена
ptrace.Чтобы проверить, включен ли
ptrace, выполните следующую команду в оболочке ADB, подключенной к вашему устройству:sysctl kernel.yama.ptrace_scope
Если
ptraceвключен, команда выведет значение0или ошибку "unknown key. Еслиptraceне включен, команда выведет значение, отличное от0.
- Двойная архитектура (Java + нативная) - доступна только с кодом на C/C++
- Выберите этот тип отладки, если хотите переключаться между отладкой Java-кода и нативного кода. Android Studio подключает к процессу вашего приложения как Java-отладчик, так и LLDB, позволяя проверять точки останова как в Java-коде, так и в нативном коде без перезапуска приложения или изменения конфигурации отладки.
На рисунке 2 обратите внимание на две вкладки справа от заголовка окна отладки. Поскольку приложение содержит код как на Java, так и на C++, одна вкладка предназначена для отладки нативного кода, а другая — для отладки кода Java, как указано в обозначении -java .

Рисунок 3. Вкладка для отладки нативного кода и вкладка для отладки кода Java. - точка разрыва строки
- Наиболее распространенный тип — это точка останова, которая приостанавливает выполнение приложения на указанной строке кода. Во время паузы вы можете проверять переменные, вычислять выражения, а затем продолжать выполнение построчно, чтобы определить причины ошибок времени выполнения.
- Метод точки останова
- Точка останова метода приостанавливает выполнение вашего приложения при входе или выходе из определенного метода. Во время паузы вы можете проверять переменные, вычислять выражения, а затем продолжать выполнение построчно, чтобы определить причины ошибок времени выполнения. Когда вы устанавливаете точку останова на компонуемой функции, отладчик отображает параметры компонуемой функции и их состояние, чтобы помочь определить, какие изменения могли вызвать перекомпозицию.
- Точка разрыва поля
- Точка останова в поле приостанавливает выполнение вашего приложения при чтении или записи в определенное поле.
- Точка останова исключения
- Точка останова при возникновении исключения приостанавливает выполнение вашего приложения.
- Найдите строку кода, где вы хотите приостановить выполнение.
- Щелкните в левой боковой панели вдоль этой строки кода или наведите курсор на строку и нажмите Control+F8 (в macOS — Command+F8 ).
- Если ваше приложение уже запущено, нажмите «Подключить отладчик к процессу Android».
В противном случае, чтобы начать отладку, нажмите «Отладка» .
. Чтобы просмотреть дерево объектов переменной, разверните его в представлении «Переменные». Если представление «Переменные» не отображается, щелкните «Настройки макета».
и убедиться, что переменные проверены.Чтобы перейти к следующей строке кода, не заходя в метод, нажмите кнопку «Перейти к следующей строке».
.Чтобы перейти к первой строке внутри вызова метода, нажмите кнопку «Шаг внутрь».
.Чтобы перейти к следующей строке вне текущего метода, нажмите «Выйти».
.Чтобы продолжить работу приложения в обычном режиме, нажмите «Продолжить программу».
.- Когда отладчик LLDB обнаруживает точку останова в вашем коде C/C++, Android Studio переключается на вкладку <your-module> . Панели «Фреймы», «Переменные» и «Отслеживаемые параметры» также доступны и работают точно так же, как при отладке кода Java.
Хотя панель «Потоки» недоступна в представлении сеанса LLDB, вы можете получить доступ к процессам вашего приложения, используя список на панели «Фреймы». Подробнее об этих панелях можно узнать в разделах, посвященных отладке оконных фреймов и проверке переменных .
Примечание: Во время проверки точки останова в нативном коде система Android приостанавливает работу виртуальной машины, выполняющей байт-код Java вашего приложения. Это означает, что вы не сможете взаимодействовать с отладчиком Java или получать какую-либо информацию о состоянии из сеанса отладчика Java во время проверки точки останова в нативном коде.
- Когда отладчик Java обнаруживает точку останова в вашем коде Java или Kotlin, Android Studio переключается на вкладку <your-module> -java.
- При отладке с помощью LLDB вы можете использовать терминал LLDB в окне сеанса LLDB для передачи параметров командной строки в LLDB . Если у вас есть определенные команды, которые вы хотите, чтобы LLDB выполнял каждый раз при запуске отладки вашего приложения, непосредственно перед или сразу после подключения отладчика к процессу вашего приложения, вы можете добавить эти команды в конфигурацию отладки .
- Введите выражение для просмотра или отображения.
- Нажмите «Добавить в часы» или Enter, чтобы один раз оценить выражение.
- Ваше целевое физическое устройство или эмулятор использует процессор x86 или x86_64. Если ваше устройство использует процессор ARM, то вам необходимо выровнять границу адреса вашей переменной в памяти либо по 4 байтам для 32-битных процессоров, либо по 8 байтам для 64-битных процессоров. Чтобы выровнять переменную в вашем нативном коде, укажите
__attribute__((aligned( num_bytes )))в объявлении переменной, как показано ниже:// For a 64-bit ARM processor int my_counter __attribute__((aligned(8)));
- Вы уже назначили три или менее точек наблюдения. Android Studio поддерживает до четырех точек наблюдения на целевых устройствах x86 или x86_64. Другие устройства могут поддерживать меньшее количество точек наблюдения.
- Пока ваше приложение приостановлено на точке останова, перейдите на панель «Переменные» в представлении сессии LLDB.
Щелкните правой кнопкой мыши по переменной, занимающей блок памяти, который вы хотите отслеживать, и выберите «Добавить точку наблюдения» .

Рисунок 9. Добавление точки наблюдения к переменной в памяти. Появляется диалоговое окно для настройки точки наблюдения, как показано на рисунке 9.
Настройте точку наблюдения, используя следующие параметры:
- Включено: Снимите этот флажок, если хотите указать Android Studio игнорировать точку наблюдения до тех пор, пока вы не измените настройку. Android Studio сохранит вашу точку наблюдения, чтобы вы могли получить к ней доступ позже.
- Приостановка: По умолчанию система Android приостанавливает процесс вашего приложения при обращении к блоку памяти, назначенному вами контрольной точке. Снимите этот флажок, если вам не нужно такое поведение. Это откроет дополнительные параметры, которые можно использовать для настройки поведения системы при взаимодействии с вашей контрольной точкой: «Выводить сообщение в консоль» и «Удалять при обращении» .
- Тип доступа: выберите, должно ли ваше приложение запускать контрольную точку при попытке чтения или записи в блок памяти, выделенный системой для переменной. Чтобы запустить контрольную точку при чтении или записи, выберите «Любой» .
- Нажмите «Готово» .
- В списке переменных щелкните правой кнопкой мыши в любом месте строки ресурса, чтобы отобразить список.
- В списке выберите «Просмотреть как» и укажите нужный формат.
Доступные форматы зависят от типа данных выбранного ресурса. Вы можете увидеть один или несколько из следующих вариантов:
- Класс: Отобразить определение класса.
- toString: Отображает формат строки.
- Объект: Отобразить определение объекта (экземпляра класса).
- Массив: Отображение в формате массива.
- Отметка времени: Дата и время отображаются в следующем формате: гггг-мм-дд чч:мм:сс.
- Автоматический режим: Android Studio выбирает оптимальный формат в зависимости от типа данных.
- Двоичное представление: Отображение двоичного значения с использованием нулей и единиц.
- MeasureSpec: Значение, передаваемое от родительского элемента к выбранному дочернему. См.
MeasureSpec. - Hex: Отображается в шестнадцатеричном формате.
- Примитивный тип: Отображение числового значения с использованием примитивного типа данных.
- Целое число: Отображается как числовое значение типа
Integer.
- Щелкните правой кнопкой мыши по значению ресурса.
- Выберите «Просмотр как» .
- Выберите «Создать» .
- Отобразится диалоговое окно « Образцы типов данных Java» . Следуйте инструкциям в разделе «Образцы типов данных Java» .
Классный
android { buildTypes { customDebugType { debuggable true ... } } }
Котлин
android { buildTypes { create("customDebugType") { isDebuggable = true ... } } }
Это свойство также распространяется на модули, содержащие код на C/C++ .
Примечание: свойство jniDebuggable больше не используется.
Если ваше приложение зависит от библиотечного модуля, который вы также хотите отлаживать, эта библиотека также должна быть упакована с debuggable true чтобы сохранить свои отладочные символы. Чтобы гарантировать, что отлаживаемые варианты вашего проекта приложения получат отлаживаемый вариант библиотечного модуля, публикуйте нестандартные версии вашей библиотеки.
Начать отладку
Начать сеанс отладки можно следующим образом:
Подключите отладчик к запущенному приложению.
Если ваше приложение уже запущено на устройстве, вы можете начать отладку без перезапуска приложения следующим образом:
Вкладка «Процессы» в обозревателе устройств ( Вид > Окна инструментов > Обозреватель устройств ) также содержит список процессов, доступных для отладки. Оттуда вы можете выбрать процесс и завершить его.
, принудительная остановка
или подключить отладчик к заданному процессу.
.
Окно отладки

Окно отладки разделено на
Примечание: Отладчик и сборщик мусора Android Studio слабо интегрированы. Виртуальная машина Android гарантирует, что любой объект, о котором знает отладчик, не будет удален сборщиком мусора до тех пор, пока отладчик не отключится. Это может привести к накоплению объектов во время работы отладчика. Например, если отладчик видит запущенный поток, связанный с ним объект Thread не будет удален сборщиком мусора до тех пор, пока отладчик не отключится, даже если поток завершился.
Изменить тип отладчика
Поскольку для отладки кода на Java/Kotlin и C/C++ требуются разные инструменты отладки, отладчик Android Studio позволяет выбрать тип используемого отладчика. По умолчанию Android Studio определяет, какой отладчик использовать, на основе языков, обнаруженных в вашем проекте, с помощью типа отладчика «Обнаруживать автоматически» .
Чтобы вручную выбрать отладчик в конфигурации отладки , нажмите «Выполнить» > «Изменить конфигурации» . Вы также можете выбрать отладчик в диалоговом окне, которое появляется при нажатии «Выполнить» > «Подключить отладчик к процессу Android» .
Доступные типы отладки включают следующие:
Примечание: При отладке нативного кода, оптимизированного компилятором, может появиться следующее предупреждение:
This function was compiled with optimizations enabled. Some debugger features may not be available . При использовании флагов оптимизации компилятор вносит изменения в скомпилированный код для повышения его эффективности. Это может привести к тому, что отладчик будет сообщать неожиданную или некорректную информацию, поскольку ему сложно сопоставить оптимизированный скомпилированный код с исходным кодом. По этой причине следует отключать оптимизации компилятора при отладке нативного кода.
Воспользуйтесь системным журналом.
Системный журнал отображает системные сообщения во время отладки вашего приложения. Эти сообщения содержат информацию от приложений, работающих на устройстве. Если вы хотите использовать системный журнал для отладки вашего приложения, убедитесь, что ваш код записывает сообщения в журнал и выводит трассировку стека для исключений, пока ваше приложение находится на этапе разработки.
Включайте сообщения в лог в вашем коде.
Для записи сообщений в журнал в вашем коде используйте класс Log . Сообщения в журнале помогают понять ход выполнения, собирая отладочную информацию системы во время взаимодействия с вашим приложением. Сообщения в журнале также могут указать, какая часть вашего приложения завершилась с ошибкой. Для получения дополнительной информации о ведении журналов см. раздел «Запись и просмотр журналов с помощью Logcat» .
В следующем примере показано, как можно добавить сообщения в журнал, чтобы определить, доступна ли информация о предыдущем состоянии на момент начала вашей активности:
Котлин
import android.util.Log ... class MyActivity : Activity() { ... override fun onCreate(savedInstanceState: Bundle?) { ... if (savedInstanceState != null) { Log.d(TAG, "onCreate() Restoring previous state") /* restore state */ } else { Log.d(TAG, "onCreate() No saved state available") /* initialize app */ } ... } ... companion object { private val TAG: String = MyActivity::class.java.simpleName ... } }
Java
import android.util.Log; ... public class MyActivity extends Activity { private static final String TAG = MyActivity.class.getSimpleName(); ... @Override public void onCreate(Bundle savedInstanceState) { ... if (savedInstanceState != null) { Log.d(TAG, "onCreate() Restoring previous state"); /* restore state */ } else { Log.d(TAG, "onCreate() No saved state available"); /* initialize app */ } ... } }
В процессе разработки ваш код также может перехватывать исключения и записывать трассировку стека в системный журнал:
Котлин
fun someOtherMethod() { try { ... } catch (e : SomeException) { Log.d(TAG, "someOtherMethod()", e) } }
Java
void someOtherMethod() { try { ... } catch (SomeException e) { Log.d(TAG, "someOtherMethod()", e); } }
Примечание: Удалите отладочные сообщения и вызовы вывода трассировки стека из вашего кода, когда будете готовы опубликовать приложение. Для этого установите флаг DEBUG и поместите отладочные сообщения в условные операторы.
Просмотрите системный журнал
В окне Logcat можно просматривать и фильтровать отладочные и другие системные сообщения, как показано на рисунке 4. Например, вы можете видеть сообщения, возникающие при сборке мусора, или сообщения, которые вы добавляете в свое приложение с помощью класса Log .
Чтобы использовать Logcat, запустите отладку и выберите вкладку Logcat.

Описание Logcat и его параметров фильтрации см. в разделе «Запись и просмотр журналов с помощью Logcat» .
Работа с точками останова
Android Studio поддерживает точки останова, которые запускают различные действия отладки. Существует несколько типов точек останова:
Вы можете установить условные точки останова, которые будут приостанавливать выполнение только при выполнении определенных условий. Вы также можете установить точки останова для логирования, которые будут записывать данные в Logcat без приостановки выполнения. Это поможет избежать засорения кода сообщениями логирования.
Чтобы добавить точку останова строки, выполните следующие действия:
При установке точки останова рядом с линией появляется красная точка, как показано на рисунке 5.

Когда выполнение кода достигнет точки останова, Android Studio приостановит выполнение вашего приложения.
Чтобы определить состояние приложения, используйте инструменты на вкладке «Отладчик»:
Если ваш проект использует нативный код, по умолчанию тип отладки «Автоматическое обнаружение» подключает к вашему приложению как отладчик Java, так и LLDB в виде двух отдельных процессов. Вы можете переключаться между проверкой точек останова Java и C/C++ без перезапуска приложения или изменения настроек.
Примечание: Чтобы Android Studio могла обнаруживать точки останова в вашем коде на C или C++, вам необходимо использовать тип отладки, поддерживающий LLDB, например, «Обнаружение автоматически», «Нативный» или «Двойной». Вы можете изменить тип отладки, используемый Android Studio , отредактировав конфигурацию отладки . Чтобы узнать больше о различных типах отладки, прочитайте раздел об использовании других типов отладки .
Когда Android Studio развертывает ваше приложение на целевом устройстве, открывается окно отладки с вкладкой или представлением сеанса отладки для каждого процесса отладчика, как показано на рисунке 6.

При отладке кода на C/C++ можно также устанавливать специальные типы точек останова, называемые контрольными точками , которые могут приостанавливать работу приложения при взаимодействии с определенным блоком памяти. Подробнее об этом можно узнать в разделе о добавлении контрольных точек .
Просмотр и настройка точек останова
Чтобы просмотреть все точки останова и настроить параметры точек останова, нажмите «Просмотреть точки останова».
В окне отладки появляется окно точек останова, как показано на рисунке 7.

В окне «Точки останова» можно включать или отключать каждую точку останова из списка на панели. Если точка останова отключена, Android Studio не приостанавливает работу приложения при достижении этой точки останова.
Выберите точку останова из списка, чтобы настроить ее параметры. Вы можете настроить точку останова так, чтобы она была отключена изначально, а система включала ее после срабатывания другой точки останова. Вы также можете настроить, должна ли точка останова быть отключена после ее срабатывания. Чтобы установить точку останова для любого исключения, выберите «Точки останова для исключений» в списке точек останова.
Чтобы временно отключить все точки останова, нажмите кнопку «Отключить точки останова».
В окне отладки. Щелкните еще раз, чтобы снова включить.
Отладочные оконные рамки
В окне отладчика панель «Кадры» позволяет просмотреть кадр стека, вызвавший срабатывание текущей точки останова. Это позволяет перемещаться по кадру стека и изучать его, а также просматривать список потоков в вашем Android-приложении.
Чтобы выбрать поток, используйте меню выбора потока и просмотрите его стековый кадр. Щелкните элементы в кадре, чтобы открыть исходный код в редакторе. Вы также можете настроить отображение потока и экспортировать стековый кадр, как описано в руководстве по изучению кадров .
Проверьте переменные
В окне отладчика панель «Переменные» позволяет проверять переменные, когда система останавливает приложение на точке останова, и вы выбираете кадр на панели «Кадры». Панель «Переменные» также позволяет вычислять произвольные выражения, используя статические методы и/или переменные, доступные в выбранном кадре.
Чтобы добавить выражение в дерево объектов (во время отладки приложения):

В качестве альтернативы, если дерево объектов содержит выражение, за которым вы хотите следить, вы можете перетащить его в начало дерева, чтобы добавить его в список отслеживаемых выражений.
Отслеживаемые выражения будут обновляться при срабатывании точек останова или при пошаговом выполнении кода.
Вычисленные выражения будут отображаться в верхней части дерева объектов до тех пор, пока вы вручную не вычислите другое выражение или не выполните код пошагово.
Чтобы удалить отслеживаемое выражение из дерева объектов, щелкните правой кнопкой мыши по выражению, а затем выберите «Удалить отслеживаемое» .
Добавить точки наблюдения
При отладке кода на C/C++ можно устанавливать специальные точки останова, называемые контрольными точками , которые могут приостанавливать работу приложения при взаимодействии с определенным блоком памяти. Например, если вы установите два указателя на блок памяти и назначите ему контрольную точку, то использование любого из этих указателей для доступа к блоку памяти активирует контрольную точку.
В Android Studio можно создать точку наблюдения во время выполнения, выбрав определенную переменную, но LLDB назначает точку наблюдения только тому блоку памяти, который система выделяет для этой переменной, а не самой переменной. Это отличается от добавления переменной в панель «Наблюдения», которая позволяет отслеживать значение переменной, но не позволяет приостанавливать процесс приложения, когда система считывает или изменяет ее значение в памяти.
Примечание: Когда процесс вашего приложения завершает работу функции и система освобождает локальные переменные из памяти, вам необходимо переназначить все точки наблюдения, созданные для этих переменных.
Для установки контрольной точки необходимо выполнить следующие требования:
Примечание: При отладке приложения с использованием 32-битных ARM ABI добавление контрольной точки или наведение курсора на переменные внутри кода для проверки их значений может привести к сбою. В качестве обходного пути используйте для отладки 64-битные ARM, x86 или x86_64 бинарные файлы. Эта проблема будет исправлена в одном из следующих релизов Android Studio.
Если вы соответствуете требованиям, вы можете добавить точку наблюдения следующим образом:
Чтобы просмотреть все точки наблюдения и настроить параметры точек наблюдения, нажмите «Просмотреть точки останова».
В окне отладки появляется диалоговое окно «Точки останова», как показано на рисунке 10.

После добавления контрольной точки нажмите «Возобновить программу».
В окне отладки можно возобновить работу приложения. По умолчанию, если приложение пытается получить доступ к блоку памяти, для которого установлена точка наблюдения, система Android приостанавливает работу приложения и отображает значок точки наблюдения.
отображается рядом со строкой кода, которая была выполнена вашим приложением последней, как показано на рисунке 11.

Просмотр и изменение формата отображения значений ресурсов.
В режиме отладки вы можете просматривать значения ресурсов и выбирать другой формат отображения переменных в вашем коде Java или Kotlin. При отображении вкладки «Переменные» и выборе фрейма выполните следующие действия:
Для создания пользовательского формата выполните следующие действия: