Descripción del depurador de .NET en Visual Studio Code

Completado

En la unidad anterior, aprendió que un depurador le ayuda a controlar la ejecución del programa y observar su estado. En esta sección, aprenderá a realizar ambas tareas en Visual Studio Code.

Comencemos por aprender a configurar el depurador de Visual Studio Code para usarlo con .NET.

Configuración de Visual Studio Code para la depuración de .NET

La primera vez que abra un archivo de C# en Visual Studio Code, recibirá un aviso para instalar las extensiones recomendadas para C#.

Recorte de pantalla del símbolo del sistema de Visual Studio Code para instalar la extensión de C#.

Visual Studio Code instalará la extensión de C# y mostrará un mensaje adicional para agregar recursos necesarios para compilar y depurar el proyecto.

Recorte de pantalla del símbolo del sistema de Visual Studio Code para agregar recursos necesarios para compilar y depurar el proyecto de .NET.

Nota:

La compatibilidad con el lenguaje C# en Visual Studio Code es una instalación opcional del Marketplace. Visual Studio Code le pide automáticamente que instale esta extensión cuando abra un archivo de C# si aún no lo ha hecho. Si tiene problemas para compilar o depurar la aplicación .NET en Visual Studio Code, debe comprobar que el proyecto tiene los recursos necesarios para la compatibilidad con el lenguaje C#.

Puntos de interrupción

Como aprendió en la unidad anterior, un depurador le ayuda a analizar y controlar la ejecución del programa. Al iniciar el depurador de Visual Studio Code, comienza inmediatamente a ejecutar el código. Dado que el código se ejecuta rápidamente, debe poder pausar el programa en cualquier instrucción. Para ello, usará puntos de interrupción.

Para agregar un punto de interrupción en Visual Studio Code, haga clic en el lado izquierdo del número de línea de la línea que desea interrumpir. Verá un círculo de color rojo después de habilitar el punto de interrupción. Para quitarlo, simplemente vuelva a seleccionar el círculo rojo.

Captura de pantalla de un punto de interrupción agregado en la ventana del editor de Visual Studio Code.

Si hace clic con el botón derecho para agregar un punto de interrupción, también puede seleccionar Agregar punto de interrupción condicional. Este tipo especial de punto de interrupción permite especificar una condición para interrumpir la ejecución. Este punto de interrupción solo estará activo cuando se cumpla la condición especificada. También puede modificar un punto de interrupción existente haciendo clic con el botón derecho en él y seleccionando Editar punto de interrupción.

Captura de pantalla de la configuración de un punto de interrupción condicional en Visual Studio Code.

Introducción al depurador de Visual Studio Code

Después de configurar los puntos de interrupción e iniciar la aplicación, aparecen nuevos paneles de información y controles en la pantalla.

Captura de pantalla de la información general del depurador de Visual Studio Code.

  1. Controles de inicio del depurador
  2. Estado de las variables
  3. Estado de las variables inspeccionadas
  4. Pila de llamadas actual
  5. Puntos de interrupción
  6. Controles de ejecución
  7. Paso de ejecución actual
  8. Consola de depuración

Controles de inicio del depurador

En la parte superior de la barra lateral, puede encontrar los controles de inicio:

Captura de pantalla de los controles de la barra lateral de depuración de Visual Studio Code.

  1. Inicie la depuración.
  2. Seleccione la configuración de inicio activa.
  3. Edite el archivo launch.json. Créalo si lo necesitas.
  4. Abra el terminal de depuración.

Visualización y edición del estado de las variables

Al analizar la causa de un defecto del programa, observe el estado de las variables para buscar cambios inesperados. Puede usar el panel Variables para hacerlo.

Las variables se muestran organizadas por ámbito:

  • Variables locales: accesible en el ámbito actual, normalmente la función actual.
  • Variables globales: accesible desde cualquier lugar del programa. Los objetos del sistema del entorno de ejecución de JavaScript también se incluyen, por lo que no se sorprenda si ve muchos elementos allí.
  • Variables de cierre: accesible desde el cierre actual, si existe. Un cierre combina el ámbito local de una función con el ámbito de la función externa a la que pertenece.

Puede desplegar ámbitos y variables seleccionando la flecha. Al desplegar objetos, puede ver todas las propiedades definidas en el objeto .

Es posible cambiar el valor de una variable sobre la marcha haciendo doble clic en la variable.

Al mantener el puntero sobre un parámetro de función o una variable directamente en la ventana del editor, también podrá inspeccionar su valor.

Captura de pantalla del puntero sobre la variable durante la depuración.

Inspección de variables

Puede ser tedioso buscar un estado de variable cada vez que quiera realizar un seguimiento de ella a lo largo del tiempo o de funciones diferentes. Aquí es donde el panel Supervisión resulta útil.

Puede seleccionar el botón Plus para escribir un nombre de variable o una expresión que se va a ver. Como alternativa, puede hacer clic con el botón derecho en una variable en el panel Variables y seleccionar Agregar para ver.

Todas las expresiones que se encuentran dentro del panel de inspección se actualizan automáticamente a medida que se ejecuta el código.

Pila de llamadas

Cada vez que el programa especifique una función, se agregará una entrada a la pila de llamadas. Cuando tu aplicación se vuelve compleja y tienes funciones llamadas dentro de funciones muchas veces, la pila de llamadas representa la secuencia de llamadas de funciones.

Esto resulta útil para buscar el origen de una excepción. En caso de que haya un bloqueo inesperado en su programa, a menudo verá algo en la consola similar al siguiente ejemplo:

Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at OrderProcessor.OrderQueue.ProcessNewOrders(String[] orderIds) in C:\Users\Repos\OrderProcessor\OrderQueue.cs:line 12
   at OrderProcessor.Program.Main(String[] args) in C:\Users\Repos\OrderProcessor\Program.cs:line 9

El grupo de at [...] líneas bajo el mensaje de error se denomina traza de pila. Proporciona el nombre y el origen de cada función a la que se ha llamado antes de terminar con la excepción. Puede ser un poco difícil descifrar, ya que también incluye funciones internas del entorno de ejecución de .NET.

Aquí es donde el panel Pila de llamadas de Visual Studio Code resulta útil. Filtra la información no deseada y le muestra solo las funciones pertinentes de su código de forma predeterminada. Después, puede desenredar esta pila de llamadas para averiguar dónde se originó la excepción.

Panel de puntos de interrupción

En el panel Puntos de interrupción, puede ver y alternar todos los puntos de interrupción que ha colocado en el código. También puede alternar entre las opciones para interrumpir las excepciones, tanto las detectadas como las no detectadas. Puede usar el panel Puntos de interrupción para examinar el estado del programa y realizar un seguimiento del origen de una excepción mediante la pila de llamadas cuando se produce uno.

Control de la ejecución

Puede controlar el flujo de ejecución del programa mediante estos controles.

Captura de pantalla de los controles de ejecución del depurador de Visual Studio Code.

De izquierda a derecha, los controles son:

  • Continuar o pausar la ejecución: si la ejecución está en pausa, continuará hasta que se alcance el siguiente punto de interrupción. Si el programa se está ejecutando, el botón se convertirá en un botón de pausa que puede usar para pausar la ejecución.
  • Depurar paso a paso: Ejecuta la siguiente instrucción de código en el contexto actual.
  • Entrar en: Al igual que Saltar sobre, pero si la siguiente instrucción es una llamada a función, se dirigirá a la primera instrucción de código de esta función (igual que el comando step).
  • Salir de la depuración: Si está dentro de una función, ejecute el código restante de esta y vuelva a la instrucción después de la llamada de función inicial (igual que el comando out).
  • Reiniciar: reinicie el programa desde el principio.
  • Stop: finalice la ejecución y salga del depurador.

Uso de la consola de depuración

Para mostrar u ocultar la consola de depuración, seleccione Ctrl+Mayús+Y para Windows y Linux. Seleccione Cmd+Mayús+Y en Mac. Puede usar la consola de depuración para visualizar los registros de la consola de la aplicación. También puede usarlo para evaluar expresiones o ejecutar código en el contenido de ejecución actual, como comandos o nombres de variables en el depurador de .NET integrado.

Puede escribir una expresión de .NET en el campo de entrada en la parte inferior de la consola de depuración y, a continuación, seleccionar Entrar para evaluarla. El resultado se muestra directamente en la consola.

Captura de pantalla de la consola de depuración de Visual Studio Code.

Mediante la consola de depuración, puede comprobar rápidamente un valor de variable, probar una función con valores diferentes o modificar el estado actual.

Nota:

Aunque la consola de depuración es muy útil para ejecutar y evaluar código .NET, puede resultar un poco confuso al intentar ejecutar o depurar una aplicación de consola de .NET porque la consola de depuración no acepta entradas de terminal para un programa en ejecución.

Para controlar la entrada del terminal durante la depuración, puede usar el terminal integrado (una de las ventanas de Visual Studio Code) o un terminal externo. Para este tutorial, usará el terminal integrado.

  1. Abra .vscode/launch.json.

  2. Cambie la console configuración a integratedTerminal desde:

    "console": "internalConsole",
    

    A:

    "console": "integratedTerminal",
    
  3. Guarde los cambios.

En la unidad siguiente, aprenderá a usar el depurador para corregir el error en el código de Fibonacci que vimos anteriormente.