Depuración con XamarinDebugging with Xamarin

Visual Studio para Mac tiene un depurador nativo que proporciona compatibilidad de depuración con aplicaciones Xamarin.iOS, Xamarin.Mac y Xamarin.Android.Visual Studio for Mac has a native debugger allowing debugging support for Xamarin.iOS, Xamarin.Mac, and Xamarin.Android applications. Visual Studio para Mac usa Mono Soft Debugger, que está implementado en el entorno de ejecución Mono, lo que permite a Visual Studio para Mac depurar código administrado en todas las plataformas.Visual Studio for Mac uses the Mono Soft Debugger, which is implemented into the Mono runtime, allowing Visual Studio for Mac to debug managed code across all platforms.

DepuradorThe Debugger

Visual Studio para Mac usa Mono Soft Debugger para depurar código administrado (C# o F#) en todas las aplicaciones de Xamarin.Visual Studio for Mac uses the Mono Soft Debugger to debug managed (C# or F#) code in all Xamarin applications. Mono Soft Debugger difiere de los depuradores normales en que se trata de un depurador cooperativo que está integrado en el entorno de ejecución Mono; el código generado y el entorno de ejecución Mono cooperan con el IDE para proporcionar una experiencia de depuración.The Mono Soft debugger is different from regular debuggers in that it is a co-operative debugger that is built into the Mono runtime; the generated code and Mono runtime co-operate with the IDE to provide a debugging experience. El entorno de ejecución Mono expone la funcionalidad de depuración a través de un protocolo de conexión sobre el que puede leer más en la documentación de Mono.The Mono runtime exposes the debugging functionality through a wire protocol, which you can read more about in the Mono documentation.

Los depuradores duros, como LLDB o GDB, controlan un programa sin el conocimiento ni la cooperación del programa depurado, aunque pueden resultar útiles al depurar aplicaciones de Xamarin en caso de que se necesite depurar código Android o iOS nativo.Hard debuggers, such as LLDB or GDB, control a program without the knowledge or cooperation from the debugged program, but can still be useful when debugging Xamarin applications in the event that you need to debug native iOS or Android code.

Empleo del depuradorUsing the debugger

Para empezar a depurar cualquier aplicación, asegúrese siempre de que la configuración esté establecida en Depurar.To start debugging any application, always ensure that the configuration is set to Debug. La configuración de depuración proporciona un útil conjunto de herramientas para permitir la depuración, como los puntos de interrupción, el uso de visualizadores de datos y la visualización de la pila de llamadas:The debug configuration provides a helpful set of tools to support debugging, such as breakpoints, using data visualizers, and viewing the call stack:

La configuración es Debug.

Establecer un punto de interrupciónSetting a breakpoint

Para establecer un punto de interrupción en el IDE, haga clic en el margen del editor, junto al número de línea del código en el que quiere interrumpir:To set a breakpoint in your IDE, click on the margin area of your editor, next to the line number of the code where you wish to break:

Establecimiento de punto de interrupción en el margen

Puede ver todos los puntos de interrupción que se establecieron en el código en el Panel de puntos de interrupción:You can view all the breakpoints that have been set in your code by going to the Breakpoints pad:

Lista de puntos de interrupción

Iniciar depuraciónStart debugging

Para iniciar la depuración, seleccione el dispositivo de destino, el emulador o algo similar en el IDE:To start debugging, select the target device or similar/emulator in your IDE:

Selección de dispositivo de destino

Luego implemente la aplicación al hacer clic en el botón Reproducir o presionar Cmd + Entrar.Then deploy your application by pressing the Play button, or Cmd + return. Cuando se alcance un punto de interrupción, el código se resaltará en amarillo:When you hit a breakpoint, the code will be highlighted yellow:

Resaltado que muestra que se ha alcanzado el punto de interrupción

En este punto se pueden usar herramientas de depuración, como la usada para inspeccionar los valores de objetos, para obtener más información sobre lo que sucede en el código:Debugging tools, such as the one used to inspect the values of objects, can be used at this point to get more information about what is happening in your code:

Visualizaciones de depuración

Puntos de interrupción condicionalesConditional breakpoints

También puede establecer reglas que dicten las circunstancias en las que debería ocurrir un punto de interrupción, lo que se conoce como agregar un punto de interrupción condicional.You can also set rules dictating the circumstances under which a breakpoint should occur, this is known as adding a conditional breakpoint. Para establecer un punto de interrupción condicional, obtenga acceso a la ventana de propiedades del punto de interrupción, lo cual puede hacerse de dos maneras:To set a conditional breakpoint, access the Breakpoint Properties window, which can be done in two ways:

  • 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:To add a new conditional breakpoint, right-click on the editor margin, to the left of the line number for the code you wish to set a breakpoint on, and select New Breakpoint:

Menú contextual de 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 de punto de interrupción o bien, en el Panel de puntos de interrupción, seleccione el botón Editar punto de interrupción que se muestra a continuación:To add a condition to an existing breakpoint, right-click on the breakpoint and select Breakpoint Properties, or, in the Breakpoints Pad, select the Edit Breakpoint button illustrated below:

Edición de punto de interrupción existente en el panel de puntos de interrupción

Luego puede escribir la condición bajo la que quiere que se produzca el punto de interrupción:You can then enter the condition under which you want the breakpoint to occur:

Condiciones de Editar punto de interrupción

Ejecución paso a paso del códigoStepping through code

Cuando se ha alcanzado un punto de interrupción, las herramientas de depuración permiten obtener el control sobre la ejecución del programa.When a breakpoint has been reached, the Debug tools enable you to get control over the program's execution. Visual Studio para Mac muestra cuatro botones que permiten ejecutar y recorrer el código.Visual Studio for Mac will display four buttons, allowing you to run and step through the code. En Visual Studio para Mac, tienen un aspecto similar al siguiente:In Visual Studio for Mac, they will look like the following:

Botones para recorrer el código

Estos son los cuatro botones:Here are the four buttons:

  • Reproducir: inicia la ejecución del código hasta el siguiente punto de interrupción.Play - This will begin executing the code, until the next breakpoint.
  • Paso a paso por procedimientos: ejecuta la siguiente línea de código.Step Over - This will execute the next line of code. Si la siguiente línea es una llamada a función, Paso a paso por procedimientos ejecuta la función y se detiene en la siguiente línea de código después de la función.If the next line is a function call, Step Over will execute the function, and will stop at the next line of code after the function.
  • Depurar paso a paso con instrucciones: también ejecuta la siguiente línea de código.Step Into - This will also execute the next line of code. 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.If the next line is a function call, Step Into will stop at the first line of the function, allowing you to continue line-by-line debugging of the function. Si la línea siguiente no es una función, se comportará igual Paso a paso por procedimientos.If the next line is not a function, it will behave the same as Step Over.
  • Paso a paso para salir: vuelve a la línea en la que se ha llamado a la función actual.Step Out - This will return to the line where the current function was called.

Depuración de bibliotecas de clases de MonoDebugging Mono's class libraries

Los productos de Xamarin se distribuyen con el código fuente de las bibliotecas de clases de Mono, que se puede usar para ver cómo funcionan las cosas con el depurador.Xamarin products ship with the source code for Mono's class libraries, and you can use this to single step from the debugger to inspect how things are working under the hood.

Puesto que esta característica consume más memoria durante la depuración, está desactivada de forma predeterminada.Since this feature consumes more memory during debugging, it is turned off by default.

Para habilitar esta característica, vaya a Visual Studio para Mac > Preferencias > Depurador y asegúrese de que la opción "Solo depurar el código del proyecto; no depurar paso a paso por instrucciones el código del marco"To enable this feature, browse to Visual Studio for Mac > Preferences > Debugger and ensure that the "Debug project code only; do not step into framework code." no esté seleccionada, como se muestra a continuación:option is unselected, as illustrated below:

Opción No depurar paso a paso por instrucciones el código del marco