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 автоматически использует тип отладки «Dual». В противном случае Android Studio использует тип отладки «Java-Only».
- Только Java
- Выберите этот тип отладки, если вы хотите отлаживать только код, написанный на Java или Kotlin. Отладчик Java-Only игнорирует любые точки останова и наблюдения, установленные в вашем машинном коде.
- Только нативный (доступно только с кодом 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 + Native) — доступен только с кодом 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 во время проверки точки останова в вашем нативном коде.
- Android Studio переключается на вкладку <your-module> -java, когда отладчик Java обнаруживает точку останова в коде Java или Kotlin.
- При отладке с помощью LLDB вы можете использовать терминал LLDB в представлении сеанса LLDB для передачи параметров командной строки в LLDB . Если вы хотите, чтобы LLDB выполнял определённые команды при каждом запуске отладки приложения, непосредственно перед или сразу после подключения отладчика к процессу приложения, вы можете добавить эти команды в конфигурацию отладки .
- Введите выражение для просмотра или отображения
- Нажмите «Добавить в наблюдения» или нажмите Enter, чтобы оценить выражение один раз.
- Ваше целевое физическое устройство или эмулятор использует процессор x86 или x86_64. Если ваше устройство использует процессор ARM, необходимо выровнять границу адреса переменной в памяти до 4 байтов для 32-разрядных процессоров или до 8 байтов для 64-разрядных процессоров. Чтобы выровнять переменную в машинном коде, укажите
__attribute__((aligned( num_bytes )))
в переменной deceleration, как показано ниже:// 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
. - Шестнадцатеричное: Отображение в виде шестнадцатеричного значения.
- Примитивный: Отображение в виде числового значения с использованием примитивного типа данных.
- Целое число: Отображается как числовое значение типа
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 ... } }
Ява
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) } }
Ява
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++ вы также можете устанавливать специальные типы точек останова, называемые точками наблюдения (watchpoints ), которые могут приостанавливать процесс приложения при взаимодействии с определённым блоком памяти. Подробнее см. в разделе о добавлении точек наблюдения (watchpoints) .
Просмотр и настройка точек останова
Чтобы просмотреть все точки останова и настроить их параметры, нажмите «Просмотреть точки останова». В окне «Отладка» откроется окно «Точки останова», как показано на рисунке 7.

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

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

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

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