Depurar aplicaciones Xamarin.iOS


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 Depurar solo el código del proyecto; no depurar paso a paso por instrucciones la opción código de marco está seleccionada en el menú depurador Visual Studio para Mac Preferencias de Visual Studio para Mac, como se muestra a continuación:

Depuración de bibliotecas de clases de Mono

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.

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.

Establecer 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:

Panel Puntos de interrupción

Si el panel Puntos de interrupción no se muestra automáticamente, puede hacerlo visible si selecciona Ver puntos de 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:

Código resaltado en amarillo

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:

Representación de un valor de color

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, acceda al punto de interrupción ventana Propiedades, que se puede realizar 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:

    Selección de Nuevo punto de interrupción

  • Para agregar una condición a un punto de interrupción existente, haga clic con el botón derecho en el punto de interrupción y seleccione Propiedades del 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:

    Panel Puntos de interrupción

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

Especificación de la condición para que se produzca el punto de interrupción

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:

Las herramientas de depuración permiten a los desarrolladores tener el control de la ejecución del programa.

Estos 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.