Skip to content

Most visited

Recently visited

navigation

Depurar tu app

Android Studio incluye un depurador que te permite depurar apps que se ejecutan en el emulador de Android o en un dispositivo Android conectado. Con el depurador de Android Studio, puedes hacer lo siguiente:

Para comenzar con la depuración, haz clic en Debug en la barra de herramientas. Android Studio compila un APK, lo firma con una clave de depuración, lo instala en el dispositivo que hayas seleccionado, luego lo ejecuta y abre la ventana Debug, como se muestra en la figura 1. Si agregas código C y C++ a tu proyecto, Android Studio también ejecuta el depurador LLDB en la ventana Debug para depurar tu código nativo.

Si no aparecen dispositivos en la ventana Select Deployment Target después de hacer clic en Debug, debes conectar un dispositivo o hacer clic en Create New Emulator para configurar el emulador de Android.

Figura 1: Ventana Debugger, donde se muestran el subproceso actual y el árbol de objetos para una variable.

Si tu app se encuentra en ejecución en un emulador o un dispositivo conectado, puedes comenzar a realizar la depuración de la siguiente manera:

  1. Haz clic en Attach debugger to Android process.
  2. En el diálogo Choose Process, selecciona el proceso al que desees asociar el depurador.

    De forma predeterminada, el depurador muestra el dispositivo y el proceso de la app para el proyecto actual, y también los dispositivos de hardware o virtuales conectados a tu computadora. Selecciona Show all processes para mostrar todos los procesos en todos los dispositivos; por ejemplo, se mostrarán los servicios que tu app haya creado y los procesos del sistema.

    Desde el menú Debugger, puedes seleccionar un tipo de depuración diferente. De forma predeterminada, Android Studio usa el tipo de depuración Auto para seleccionar la mejor opción de depuración según tu proyecto incluya código Java o C y C++.

  3. Haz clic en OK.

    Aparecerá la ventana Debug. En este caso, observa las dos pestañas a la derecha del título de la ventana Debug: una pestaña es para depurar código nativo y la otra para código Java, como se indica mediante -java.

    Las diferentes sesiones de depuración tienen pestañas independientes y diferentes números de puerto, que se muestran entre paréntesis en las pestañas.

  4. Para finalizar una sesión de depuración, haz clic en la pestaña de la sesión y luego en Terminate .

Nota: El depurador y el recolector de elementos no usados de Android Studio se vinculan de forma flexible. La máquina virtual de Android garantiza que cualquier objeto que el depurador identifique no se recolecte como elemento no usado hasta que se desconecte el depurador. Esto puede generar acumulaciones de objetos con el tiempo mientras el depurador esté conectado. Por ejemplo, si el depurador detecta un subproceso en ejecución, el objeto Thread asociado no se somete a recolección de elementos no usados, ni siquiera después de la finalización del subproceso.

Tipos de depuración

De forma predeterminada, Android Studio usa el tipo de depuración Auto para determinar el depurador o los depuradores que se usarán. Por ello, no es necesario que cambies las configuraciones al pasar de la depuración de código Java a C y C++. No obstante, puedes crear o editar una configuración de depuración para personalizar determinados ajustes, como la adición de directorios de símbolos o comandos de LLDB, o usar un tipo de depuración diferente. También puedes seleccionar el tipo de depuración en la lista desplegable Debugger del diálogo Choose Process al asociar el depurador a un proceso de Android en ejecución.

Entre los tipos de depuración disponibles se incluyen los siguientes:

Auto
Selecciónalo si deseas que Android Studio elija automáticamente la mejor opción para el código que depures. Por ejemplo, si tienes código C o C++ en tu proyecto, Android Studio usa automáticamente el tipo de depuración Hybrid. De lo contrario, Android Studio usa el tipo de depuración Java.
Java
Selecciónalo si solo deseas depurar código Java; el depurador de Java ignora los puntos de interrupción o control que estableciste en tu código nativo.
Native
Selecciónalo si solo deseas usar LLDB para depurar tu código. Cuando se usa este tipo de depuración, no está disponible la vista de la sesión del depurador de Java. De forma predeterminada, LLDB inspecciona solo tu código nativo e ignora los puntos de interrupción en tu código Java. Si también deseas depurar tu código Java, debes realizar un cambio al tipo de depuración Auto o Hybrid.
Hybrid
Selecciónalo si deseas realizar un cambio entre la depuración de Java y código nativo. Android Studio asocia el depurador de Java y LLDB al proceso de tu app, uno para el depurador de Java y uno para LLDB, a fin de que puedas inspeccionar puntos de interrupción tanto en tu código Java como en tu código nativo sin reiniciar tu app ni cambiar la configuración de depuración.

Nota: Android Studio proporciona una función experimental de depuración de C++ con reconocimiento de lenguaje Java que te permite depurar puntos de interrupción Java y C o C++ usando un solo proceso LLDB. Si bien esta función aún se encuentra en desarrollo, puedes probarla en Android Studio 2.2 y versiones posteriores. Para obtener más información, visita el sitio web de Android Tools.

Usar el registro del sistema

El registro del sistema muestra mensajes del sistema mientras depuras tu app. Entre esos mensajes se incluye información sobre apps en ejecución en el dispositivo. Si deseas usar el registro del sistema para depurar tu app, asegúrate de que tu código escriba mensajes de registro e imprima el seguimiento de pila para las excepciones mientras tu app se encuentre en la etapa de desarrollo.

Escribir mensajes de registro en tu código

Para escribir mensajes de registro en tu código, usa la clase Log. Los mensajes de registro te ayudan a comprender el flujo de ejecución recopilando los resultados de la depuración del sistema mientras interactúas con tu app. Los mensajes de registro pueden indicarte la parte de tu aplicación que falló. Para obtener más información sobre el registro, consulta Leer y escribir registros.

En el siguiente ejemplo se muestra la manera en que podrías agregar mensajes de registro para determinar si hay información disponible sobre el estado anterior al iniciarse tu actividad:

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 */
        }
    }
}

Durante el desarrollo, tu código también puede detectar excepciones y escribir el seguimiento de pila en el registro del sistema:

void someOtherMethod() {
    try {
        ...
    } catch (SomeException e) {
        Log.d(TAG, "someOtherMethod()", e);
    }
}

Nota: Cuando estés listo para publicar tu app, quita los mensajes del registro de depuración y las llamadas de impresión de seguimiento de pila de tu código. También puedes hacer esto configurando un indicador DEBUG y colocando mensajes del registro de depuración en las declaraciones condicionales.

Ver el registro del sistema

En las ventanas Android DDMS (Dalvik Debug Monitor Server) y Android Monitor se muestran registros del sistema y procesos específicos de la app. Para ver el registro del sistema en la ventana de herramientas Android DDMS:

  1. Inicia tu app como se describe en Ejecutar tu aplicación en el modo de depuración.
  2. Haz clic en Android Monitor .
  3. Si el registro del sistema está vacío en la vista Logcat, haz clic en Restart .

Figura 2: Registro del sistema de la ventana de la herramienta Android DDMS.

La ventana de herramientas Android DDMS te brinda acceso a algunas funciones de DDMS desde Android Studio. Para obtener más información acerca de DDMS, consulta Cómo usar DDMS.

En el registro del sistema se muestran mensajes de los servicios de Android y otras apps del sistema operativo. Para filtrar los mensajes del registro y ver solo aquellos que te interesen, usa las herramientas de la ventana Android DDMS:

Trabajar con puntos de interrupción

Android Studio admite varios tipos de puntos de interrupción que activan diferentes acciones de depuración. El tipo más común es un punto de interrupción de línea que pausa la ejecución de tu app en una línea de código específica. Mientras la app está pausada, puedes examinar variables, evaluar expresiones y luego continuar la ejecución línea por línea para determinar las causas de los errores en el tiempo de ejecución.

Para agregar un punto de interrupción de línea, haz lo siguiente:

  1. Localiza la línea de código en la cual desees pausar la ejecución, luego haz clic en el medianil izquierdo de esa línea de código o coloca el símbolo de intercalación en la línea y presiona Control+F8 (en Mac, Command+F8).
  2. Si tu app se encuentra en ejecución, no necesitas actualizarla para agregar el punto de interrupción. Simplemente, haz clic en Attach debugger to Android proccess . De lo contrario, inicia la depuración haciendo clic en Debug .

Figura 3: Cuando estableces un punto de interrupción, aparece un punto rojo junto a la línea.

Cuando la ejecución del código alcanza el punto de interrupción, Android Studio pausa la ejecución de tu app. Luego puedes usar las herramientas de la pestaña Debugger para identificar el estado de la app:

Si tu proyecto usa código nativo, de forma predeterminada, el tipo de depuración Auto asocia el depurador Java y LLDB a tu app como dos procesos independientes, de modo que puedas realizar el cambio entre la inspección de puntos de interrupción de Java y C o C++ sin reiniciar tu app ni cambiar la configuración.

Nota: Para que Android Studio detecte puntos de interrupción en tu código C o C++, debes usar un tipo de depuración que admita LLDB, como Auto, Native o Hybrid. Puedes cambiar el tipo de depuración que usa Android Studio editando tu configuración de depuración. Para obtener más información sobre los diferentes tipos de depuración, lee la sección relacionada con el uso de tipos de depuración.

Cuando Android Studio implementa tu app en tu dispositivo de destino, se abre la ventana Debug con una pestaña, o la vista de la sesión de depuración, para cada proceso del depurador, como se muestra en la figura 4.

Figura 4: Depuración de código nativo mediante LLDB.

  1. Android Studio realiza un cambio automático a la pestaña <your-module> cuando el depurador LLDB encuentra un punto de interrupción en tu código C y C++. También se encuentran disponibles los subpaneles Frames, Variables y Watches, que funcionan exactamente como si depuraras código Java. Si bien el subpanel Threads no está disponible en la vista de la sesión de LLDB, puedes acceder a los procesos de tu app usando la lista desplegable del subpanel Frames. Puedes obtener más información acerca de estos subpaneles en las secciones Depurar marcos de ventanas e Inspeccionar variables.

    Nota: Mientras inspecciona un punto de interrupción en tu código nativo, el sistema de Android suspende la máquina virtual que ejecuta el código de bytes Java de tu app. Esto significa que no puedes interactuar con el depurador de Java ni recuperar información de estado de tu sesión de depuración de Java mientras inspeccionas un punto de interrupción en tu código nativo.

  2. Android Studio realiza un cambio automático a la pestaña <your-module>-java cuando el depurador de Java encuentra un punto de interrupción en tu código Java.
  3. Durante la depuración con LLDB, puedes usar el terminal LLDB en la vista de la sesión de LLDB para pasar opciones de línea de comandos a LLDB.

    Sugerencia: Si hay determinados comandos que deseas que LLDB ejecute cada vez que comienzas a depurar tu app, ya sea antes o después de que el depurador se conecte al proceso de esta, puedes agregar esos comandos a tu configuración de depuración.

Durante la depuración de código C y C++ también puedes configurar tipos especiales de puntos de interrupción, llamados puntos de control, que pueden suspender el proceso de tu app cuando esta interactúa con un bloque de memoria específico. Para obtener más información, lee la sección Agregar puntos de control.

Ver y configurar puntos de interrupción

Para ver todos los puntos de interrupción y configurar ajustes para los estos, haz clic en View Breakpoints a la izquierda de la ventana Debug. Aparecerá la ventana Breakpoints, como se muestra en la figura 5.

Figura 5: La ventana Breakpoints incluye todos los puntos de interrupción actuales y la configuración de comportamiento para cada uno.

La ventana Breakpoints te permite habilitar o inhabilitar cada punto de interrupción desde la lista de la izquierda. Si se inhabilita un punto de interrupción, Android Studio no pausa tu app cuando alcanza ese punto de interrupción. Selecciona un punto de interrupción de la lista para configurarlo. Puedes configurar la inhabilitación de un punto de interrupción al principio y hacer que el sistema lo habilite una vez que se alcance otro. También puedes establecer que se inhabilite o no un punto de interrupción una vez alcanzado. Para configurar un punto de interrupción para cualquier excepción, selecciona Exception Breakpoints en la lista de puntos de interrupción.

Depurar marcos de una ventana

En la ventana Debugger, el subpanel Frames te permite inspeccionar el marco de la pila que condujo al alcance del punto de interrupción actual. Esto te permite navegar y examinar el marco de la pila e inspeccionar la lista de subprocesos en tu app de Android. Para seleccionar un subproceso, usa la flecha desplegable del selector de subprocesos y visualiza el marco de la pila. Cuando haces clic en los elementos del marco se abre el origen en el editor. También puedes personalizar la presentación de subprocesos y exportar el marco de la pila como se explica en la Guía de marcos de ventanas.

Inspeccionar variables

En la ventana Debugger, el subpanel Variables te permite inspeccionar variables cuando el sistema detiene tu app en un punto de interrupción y seleccionas un marco del subpanel Frames. El subpanel Variables también te permite evaluar expresiones ad hoc usando métodos estáticos o variables disponibles en el marco seleccionado.

El subpanel Watches se proporciona una funcionalidad similar, con la excepción de que las expresiones agregadas al subpanel Watches se conservan entre sesiones de depuración. Debes agregar controles para variables y campos a los que accedas con frecuencia o que proporcionen un estado útil para la sesión de depuración actual. Los paneles Variables y Watches aparecen como se muestra en la figura 5.

Para agregar una variable o expresión a la lista de Watches, sigue estos pasos:

  1. Inicia la depuración.
  2. En el panel Watches, haz clic en Add .
  3. En el cuadro de texto que aparece, escribe el nombre de la variable o la expresión que desees controlar, y luego presiona Enter.

Para quitar un elemento de la lista Watches, selecciona el elemento y luego haz clic en Remove .

Puedes volver a ordenar los elementos en la lista Watches seleccionando un elemento y luego haciendo clic en Up o Down .

Figura 6: Subpaneles Variables y Watches de la ventana Debugger.

Agregar puntos de control

Durante la depuración de código C y C++, puedes configurar tipos especiales de puntos de interrupción, llamados puntos de control, que pueden suspender el proceso de tu app cuando esta interactúa con un bloque de memoria específico. Por ejemplo, si configuras dos punteros de un bloque de memoria y le asignas un punto de control, al usar cualquiera de los punteros para acceder a ese bloque de memoria se activa el punto de control.

En Android Studio, puedes crear un punto de control durante el tiempo de ejecución seleccionando una variable específica, pero LLDB asigna el punto de control solo al bloque de memoria que el sistema asigna a esa variable, no a la variable en sí. Esto es diferente a agregar una variable al subpanel Watches, que te permite observar el valor de una variable y no te permite suspender el proceso de tu app cuando el sistema lee o cambia su valor en la memoria.

Nota: Cuando el proceso de tu app sale de una función y el sistema quita la asignación de sus variables locales de la memoria, debes reasignar los puntos de control que creaste para esas variables.

Para poder configurar un punto de control, debes cumplir los siguientes requisitos:

Si cumples los requisitos anteriores, puedes agregar un punto de control de la siguiente manera:

  1. Mientras tu app esté suspendida en un punto de interrupción, navega al subpanel Variables en la vista de la sesión de LLDB.
  2. Haz clic con el botón secundario en una variable que ocupe el bloque de memoria del cual desees realizar un seguimiento y selecciona Add Watchpoint. Aparecerá un diálogo para configurar tu punto de control, como se muestra en la figura 7.

    Figura 7: Adición de un punto de control a una variable en la memoria.

  3. Configura tu punto de control con las siguientes opciones:
    • Enabled: puedes anular la selección de esta opción si deseas indicar a Android Studio que ignore el punto de control por el momento. Android Studio guarda tu punto de control para que puedas acceder a él posteriormente en tu sesión de depuración.
    • Suspend: de forma predeterminada, el sistema Android suspende el proceso de tu app cuando esta accede a un bloque de memoria que asignes a un punto de control. Puedes anular la selección de esta opción si no deseas este comportamiento; esto revela más opciones que puedes usar para personalizar comportamiento cuando el sistema interactúe con tu punto de control: Log message to console y Remove [the watchpoint] when hit.
    • Access Type: permite determinar si tu app debe activar el punto de control cuando intenta realizar operaciones de tipo Read (lectura) o Write (escritura) en el bloque de memoria que el sistema asigna a la variable. Para activar tu punto de control en lectura o escritura, selecciona Any.
  4. Haz clic en Done.

Para ver todos tus puntos de control o configurar ajustes de los puntos de control, haz clic en View Breakpoints a la izquierda de la ventana Debug. Aparecerá el diálogo Breakpoints, como se muestra en la figura 8.

Figura 8: El diálogo Breakpoints incluye tus puntos de control actuales y configuraciones de comportamiento para cada uno.

Después de agregar tu punto de control, haz clic en Resume Program a la izquierda de la ventana Debug para reanudar el proceso de tu app. De forma predeterminada, si tu app intenta acceder a un bloque de memoria en el que hayas configurado un punto de control, el sistema Android suspende el proceso de tu app y aparece un ícono de punto de control () junto a la última línea de código que ejecutó tu app, como se muestra en la figura 9.

Figura 9: Android Studio indica la línea de código que tu app ejecuta junto antes de activar un punto de control.

Realizar un seguimiento de la asignación de objetos

Android Studio te permite realizar un seguimiento de los objetos que se asignan al montón de Java, y ver las clases y los subprocesos que asignan estos objetos. Esto te permite ver la lista de objetos asignados durante un período de interés. La información es valiosa para analizar el uso de memoria que puede afectar el rendimiento de la aplicación.

  1. Inicia tu app como se describe en Ejecutar tu app en el modo de depuración y luego selecciona View > Tool Windows > Android Monitor (o haz clic en Android Monitor en la barra de la ventana).
  2. En la ventana Android Monitor, haz clic en la pestaña Monitors.
  3. En la parte superior de la ventana, selecciona tu dispositivo y el proceso de la app en las listas desplegables.
  4. En el panel Memory, haz clic en Start Allocation Tracking .
  5. Interactúa con tu app en el dispositivo.
  6. Haz clic nuevamente en el mismo botón para detener el seguimiento de la asignación.

Android Monitor muestra información sobre el uso de memoria, CPU, GPU y red de la aplicación. Consulta Aspectos básicos de Android Monitor para obtener información sobre cómo usar Android Monitor. Consulta también Información general sobre Android Monitor para acceder a una introducción a las funciones de Android Monitor, que incluyen un catálogo de registro (logcat), monitores de rendimiento, herramientas de análisis de datos y herramientas de captura de pantalla y video.

Figura 10: Seguimiento de la asignación de objetos en Android Studio.

Ver y cambiar el formato de visualización de valores de los recursos

En modo de depuración, puedes ver los valores de los recursos y seleccionar un formato de visualización diferente. Con la pestaña Variables visible en un marco seleccionado, realiza lo siguiente:

  1. En la lista Variables, haz clic con el botón secundario en cualquier parte de una línea de recursos para mostrar la lista desplegable.
  2. En la lista desplegable, selecciona View as y escoge el formato que quieras usar.

    Los formatos disponibles dependen del tipo de datos del recurso que selecciones. Es posible que veas una o más de las siguientes opciones:

    • Class: visualización de la definición de la clase.
    • toString: visualización del formato de la string.
    • Object: visualización de la definición del objeto (una instancia de una clase).
    • Array: visualización en formato de matriz.
    • Timestamp: visualización de la fecha y hora con el formato aaaa-mm-dd hh:mm:ss.
    • Auto: Android Studio selecciona el mejor formato según el tipo de datos.
    • Binary: visualización de un valor binario con ceros y unos.
    • MeasureSpec: valor pasado del elemento principal al secundario seleccionado. Consulta MeasureSpec.
    • Hex: visualización como valor hexadecimal.
    • Primitive: visualización de un valor numérico con un tipo de datos primitivo.
    • Integer: visualización de un valor numérico de tipo Integer.

Puedes crear un formato personalizado (representador del tipo de datos) de la siguiente manera:

  1. Haz clic con el botón secundario en el valor del recurso.
  2. Selecciona View as.
  3. Selecciona Create. Aparecerá el diálogo Java Data Type Renderers.
  4. Sigue las instrucciones de Representadores de tipos de datos de Java.

Analizar métricas del tiempo de ejecución para optimizar tu app

Si tu aplicación no genera errores de tiempo de ejecución, no significa que no tenga problemas. También debes tener en cuenta los siguientes problemas:

Android Device Monitor es una herramienta independiente que cuenta con una interfaz de usuario gráfica para varias herramientas de depuración y análisis de aplicaciones de Android, incluida Dalvik Debug Monitor Server (DDMS). Puedes usar Android Device Monitor para analizar el uso de memoria, métodos de perfilamiento y el tráfico de red del monitor, y simular llamadas y mensajes entrantes.

Para abrir Android Device Monitor desde Android Studio, haz clic en Monitor en la barra de herramientas. Android Device Monitor se abrirá en una ventana nueva.

Para obtener más información sobre Android Device Monitor y DDMS, consulta Device Monitor y Cómo usar DDMS.

Realizar capturas de pantalla y videos

Android Studio te permite realizar una captura de pantalla o grabar un video corto de la pantalla del dispositivo mientras tu app se ejecuta. Las capturas de pantalla y los videos son útiles como material promocional para tu app, y también puedes asociarlos a los informes de errores que envíes a tu equipo de desarrollo.

Para realizar una captura de pantalla de tu app:

  1. Inicia tu app como se describe en Ejecutar tu aplicación en el modo de depuración.
  2. Haz clic en Android Monitor .
  3. Haz clic en Screen Capture a la izquierda.
  4. Opcional: Para agregar un marco de dispositivo alrededor de tu captura de pantalla, haz clic en Frame screenshot.
  5. Haz clic en Save.

Para grabar un video de tu app:

  1. Inicia tu app como se describe en Ejecutar tu aplicación en el modo de depuración.
  2. Haz clic en Android Monitor .
  3. Haz clic en Screen Record a la izquierda.
  4. Haz clic en Start Recording.
  5. Interactúa con tu app.
  6. Haz clic en Stop Recording.
  7. Ingresa un nombre de archivo para la grabación y haz clic en OK.
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)