Depurar aplicaciones Xamarin.iOS

Con el depurador integrado en Visual Studio para Mac o Visual Studio, se pueden depurar aplicaciones de Xamarin.iOS.

Usar la compatibilidad con la depuración nativa de Visual Studio para Mac para depurar C# y otros lenguajes de código administrados, y usar LLDB cuando necesite depurar código de C, C++ u Objective C que podría vincular con el proyecto de Xamarin.iOS.

Nota:

Al compilar aplicaciones en modo de depuración, Xamarin.iOS generará aplicaciones más lentas y mucho mayores, ya que debe instrumentarse cada línea de código. Antes de lanzar, asegúrese de hacer una compilación de versión.

El depurador de Xamarin.iOS se integra en el IDE y permite a los desarrolladores depurar aplicaciones de Xamarin.iOS compiladas con cualquiera de los lenguajes administrados admitidos por Xamarin.iOS en el simulador y en el dispositivo.

El depurador de Xamarin.iOS utiliza el Mono Soft Debugger, lo que significa que el código generado y el tiempo de ejecución Mono cooperarán con el IDE a fin de proporcionar una experiencia de depuración. Esto es diferente de depuradores como LLDB o MDB, que controlan el programa sin el conocimiento o la cooperación del programa depurado.

Establecimiento de puntos de interrupción

Cuando esté listo para iniciar la depuración de la aplicación, el primer paso es establecer puntos de interrupción en la aplicación. Para ello, haga clic en el área del margen del editor, junto al número de la línea de código en la que desea interrumpir:

Puede ver todos los puntos de interrupción que se establecieron en el código en el Panel de puntos de interrupción:

The Breakpoints pad

Si el panel Puntos de interrupción no se muestra automáticamente, para hacerlo visible, seleccione Vista > Depurar Windows > Puntos de interrupción.

Antes de comenzar la depuración de cualquier aplicación, asegúrese siempre de que la configuración está establecida en Depurar, ya que contiene un conjunto de herramientas útil para admitir la depuración, incluyendo puntos de interrupción, la utilización de visualizadores de datos y ver la pila de llamadas:

Iniciar depuración

Para iniciar la depuración, seleccione el dispositivo de destino o similar en el IDE:

A continuación, implemente la aplicación presionando el botón Reproducir.

Cuando se alcance un punto de interrupción, el código se resaltará en amarillo:

The code will be highlighted yellow

Las herramientas de depuración, como la inspección de los valores de objetos, pueden utilizarse en este punto para obtener más información sobre lo que sucede en el código:

Displaying a color value

Puntos de interrupción condicionales

También puede establecer reglas que dictan las circunstancias en las que debería ocurrir un punto de interrupción, esto se conoce como agregar un punto de interrupción condicional.

Para establecer un punto de interrupción condicional, obtenga acceso a la ventana Propiedades del punto de interrupción, lo cual puede hacerse de dos maneras:

  • Para agregar un nuevo punto de interrupción condicional, haga clic con el botón derecho en el margen del editor, a la izquierda del número de línea del código para el que quiere establecer un punto de interrupción y seleccione Nuevo punto de interrupción:

    Select New Breakpoint

  • Para agregar una condición a un punto de interrupción existente, haga doble clic en el punto de interrupción y seleccione Propiedades de punto de interrupción o, en el Panel de puntos de interrupción, seleccione el botón de propiedades que se muestra a continuación:

    The Breakpoints Pad

Puede escribir la condición bajo la que desea que se produzca el punto de interrupción:

Enter the condition for the breakpoint to occur

Cuando se ha alcanzado un punto de interrupción, las herramientas de depuración le permiten obtener el control sobre la ejecución del programa. El IDE mostrará cuatro botones, permitiéndole ejecutar y recorrer el código.

En Visual Studio para Mac, tendrán un aspecto similar al siguiente:

The Debug tools enable the developer to get control over the program’s execution

Dichos componentes son:

  • Reproducir/detener: iniciará o detendrá la ejecución del código, hasta el siguiente punto de interrupción.
  • Paso a paso por procedimientos: ejecutará la siguiente línea de código. Si la siguiente línea es una llamada de función, el salto ejecutará la función y se detendrá en la siguiente línea de código después de la función.
  • Depurar paso a paso con instrucciones: esto también ejecutará la siguiente línea de código. Si la siguiente línea es una llamada de función, Depurar paso a paso con instrucciones se detendrá en la primera línea de la función, lo que le permitirá continuar con la depuración línea por línea de la función. Si la línea siguiente no es una función, se comportará igual Paso a paso por procedimientos.
  • Paso a paso para salir: volverá a la línea donde se llamó la función actual.

Puntos de interrupción

Es importante señalar que iOS proporciona a las aplicaciones solo unos cuantos segundos (10) para que se inicien y completen el método FinishedLaunching en el delegado de la aplicación. Si la aplicación no completa este método en 10 segundos, iOS terminará el proceso.

Esto significa que es casi imposible establecer puntos de interrupción en el código de inicio del programa. Si desea depurar el código de inicio, debe retrasar parte de su inicialización y colocarla en un método invocado por el temporizador o en algún otro tipo de método de devolución de llamada que se ejecute después de que FinishedLaunching haya terminado.

Diagnóstico del dispositivo

Si se produce un error al configurar el depurador, puede habilitar el diagnóstico detallado agregando "-v - v - v" a los argumentos mtouch adicionales en las opciones del proyecto. Esto imprimirá información detallada del error en la consola del dispositivo.

Depuración inalámbrica

El valor predeterminado de Xamarin.iOS es depurar la aplicación en los dispositivos a través de la conexión USB. A veces, el dispositivo USB puede ser necesario para probar la conexión o desconexión del cable para desarrollar aplicaciones basadas en ExternalAccessory. En esos casos, puede utilizar la depuración a través de la red inalámbrica.

Para más información sobre la implementación y depuración inalámbricas, consulte la guía sobre implementación inalámbrica.

Detalles técnicos

Xamarin.iOS utiliza el nuevo depurador suave Mono. A diferencia del depurador Mono estándar, que es un programa que controla un proceso independiente mediante las interfaces del sistema operativo para controlar un proceso independiente, el depurador suave funciona haciendo que el tiempo de ejecución Mono exponga la funcionalidad de depuración a través de un protocolo de conexión.

Al inicio, una aplicación que va a ser depurada contacta el depurador y este empieza a funcionar. En Xamarin.iOS para Visual Studio, Xamarin Mac Agent actúa como intermediario entre la aplicación (en Visual Studio) y el depurador.

Este depurador suave requiere una combinación cooperativa de depuración cuando se ejecuta en el dispositivo. Esto significa que el binario se generará cuando la depuración sea mayor, a medida que el código se instrumenta para contener código adicional en cada punto de secuencia para dar soporte a la depuración.

Acceso a la consola

Los registros de bloqueo y los resultados de la clase Console se enviarán a la consola del iPhone. Puede acceder a esta consola con Xcode mediante el "Organizador", seleccionando el dispositivo desde él.

Como alternativa, si no desea iniciar Xcode, puede utilizar la Utilidad de configuración de iPhone de Apple para acceder directamente a la consola. Esto tiene la ventaja adicional de que puede acceder a los registros de la consola de una máquina de Windows si está depurando un problema en el campo.

Para los usuarios de Visual Studio, hay algunos registros disponibles en la ventana de salida, pero debe cambiar al equipo Mac para obtener registros más exhaustivos y detallados.


Depuración de bibliotecas de clases de Mono

Xamarin.iOS se distribuye con el código fuente de bibliotecas de clases de Mono y puede utilizarlo para ver cómo funcionan las cosas con el depurador.

Puesto que esta característica consume más memoria durante la depuración, está desactivada de forma predeterminada.

Para habilitar esta característica, asegúrese de que la opción Solo depurar código de proyecto, no depurar paso a paso con instrucciones en el código de marco está desactivada en el menú Visual Studio para Mac > Preferencias > Depurador tal como se muestra a continuación:

Debugging Mono's Class Libraries

Una vez hecho esto, puede iniciar la aplicación y depurar paso a paso con instrucciones en cualquiera de las bibliotecas de clases de núcleo de Mono.