Navegación por el código con el depurador de Visual Studio

El depurador de Visual Studio puede ayudarle a navegar por el código para inspeccionar el estado de una aplicación y mostrar su flujo de ejecución, que también se conoce como ejecución paso a paso de código. Puede usar métodos abreviados de teclado, y depurar comandos, puntos de interrupción y otras características para obtener rápidamente el código que quiera examinar. Si está familiarizado con los comandos y accesos directos de navegación del depurador, puede encontrar y resolver los problemas de la aplicación de forma más rápida y sencilla. Para obtener una lista de los métodos abreviados de teclado más comunes relacionados con la navegación y depuración de código, consulte la sección Depuración en Métodos abreviados de teclado.

Nota

Si es la primera vez que intenta depurar código, le recomendamos que lea Cómo depurar para principiantes sin experiencia y Herramientas y técnicas de depuración antes de continuar con este artículo.

Inicio de la depuración y acceso al modo de interrupción

Algunos comandos de navegación inician la aplicación y asocia automáticamente el depurador. La aplicación se detiene en una línea de código específica en función del comando que se haya usado para iniciar la navegación y entra en el modo de interrupción (es decir, la aplicación está en pausa en el depurador).

En el modo de interrupción, la ejecución de la aplicación se suspende mientras las funciones, las variables y los objetos permanecen en la memoria. Puede navegar por el código cuando el depurador está en modo de interrupción. Hay dos formas bastante habituales de entrar en el modo de interrupción con rapidez:

Se pueden usar comandos de procesamiento de código paso a paso para iniciar la aplicación, pero su uso es más frecuente después de haber entrado en el modo de interrupción.

Algunos comandos de navegación se usan principalmente mientras se está en el modo de interrupción (es decir, mientras se está en pausa en el depurador).

Depuración y modo de interrupción

Cuando está en modo de interrupción, puede usar varios comandos para navegar por el código. Puede examinar los valores de las variables para buscar infracciones o errores. Para algunos tipos de proyectos, también puede realizar ajustes en la aplicación mientras está en el modo de interrupción.

La mayoría de las ventanas del depurador, como los Módulos y las ventanas Inspección, solo están disponibles mientras el depurador está asociado a la aplicación. Algunas características del depurador, como la presentación de los valores de las variables en la ventana Variables locales o la evaluación de las expresiones en la ventana Inspección, solo están disponibles mientras el depurador está en pausa (es decir, en modo de interrupción).

Nota

Si interrumpe código que no tiene archivos de código fuente o de símbolos (.pdb) cargados, el depurador mostrará una página con el mensaje No se encontraron archivos de código fuente o No se encontraron símbolos que le permitirá encontrar y cargar los archivos. Consulte Specify symbol (.pdb) and source files (Especificación de símbolo (.pdb) y archivos de origen). Si no puede cargar los archivos de código fuente o de símbolos, aún puede depurar las instrucciones de ensamblado en la ventana Desensamblado.

Ejecución paso a paso de código

Por procesamiento de código paso a paso se entiende la ejecución del código de aplicación de instrucción en instrucción, con el depurador asociado. Los comandos paso a paso del depurador ayudan a comprobar los efectos de cada instrucción y a obtener más información sobre el flujo de la ejecución.

Depurar código paso a paso

Para detenerse en cada instrucción durante la depuración, use Depurar>Depurar paso a paso por instrucciones o presione F11.

El depurador recorre paso a paso las instrucciones del código y no las líneas físicas. Por ejemplo, una cláusula if se puede escribir en una línea:

int x = 42;
string s = "Not answered";
if( int x == 42) s = "Answered!";

Pero cuando esta línea se ejecuta paso a paso por instrucciones, el depurador trata la condición como un paso y el resultado como otro. En el ejemplo anterior, la condición es "true".

En una llamada a una función anidada, Paso a paso por instrucciones llega hasta la función más profundamente anidada. Por ejemplo, si utiliza Paso a paso por instrucciones en una llamada como Func1(Func2()), el depurador ejecuta paso a paso las instrucciones de la función Func2.

Sugerencia

Según ejecuta cada línea de código, puede mantener el cursor sobre las variables para ver sus valores o usar las ventanas Variables locales e Inspección para ver cambiar los valores. También puede realizar un seguimiento visual de la pila de llamadas mientras depura las funciones paso a paso. (Solo para Visual Studio Enterprise, vea Creación de un mapa visual de la pila de llamadas durante la depuración).

Examen del código y omisión de algunas funciones

Es posible que no le interese una función mientras depura. Es posible que sepa que algún código funciona, como el código de biblioteca probado. Puede usar los siguientes comandos para omitir el código mientras se esté ejecutando paso a paso. Las funciones siguen ejecutándose, pero el depurador las omite.

Comando de teclado Comando del menú Depurar Descripción
F10 Paso a paso por procedimientos Si la línea actual contiene una llamada de función, Paso a paso por procedimientos ejecuta el código y suspende la ejecución en la primera línea de código después de que se devuelva la función a la que se ha llamado.
Mayús+F11 Paso a paso para salir Paso a paso para salir continúa ejecutando el código y suspende la ejecución cuando se devuelve la función actual. El depurador omite la función actual.

Ejecución hasta una ubicación o función determinada

Tal vez prefiera realizar la ejecución directamente en una ubicación o función específica cuando sepa exactamente qué código quiere inspeccionar o si sabe dónde quiere iniciar la depuración.

  • Establecer un punto de interrupción es lo mejor si cree que va a volver a usar ese punto de interrupción.
  • Otros métodos son para una mayor comodidad, y equivalen a establecer un punto de interrupción temporal.

Ejecución en un punto de interrupción en el código

Para establecer un punto de interrupción sencillo en el código, seleccione el margen izquierdo junto a la línea de código donde quiera suspender la ejecución. También puede seleccionar la línea y presionar F9, seleccionar Depurar>Alternar puntos de interrupción, o hacer clic con el botón derecho y seleccionar Punto de interrupción>Insertar punto de interrupción. El punto de interrupción aparece como un punto rojo en el margen izquierdo junto a la línea de código. El depurador suspende la ejecución justo antes de que se ejecute la línea.

Screenshot that shows how to set a breakpoint.

Screenshot that shows how to set a breakpoint.

Los puntos de interrupción proporcionan un amplio conjunto de funcionalidades en Visual Studio, como los puntos de interrupción condicionales y de seguimiento. Para obtener más información, consulte Uso de los puntos de interrupción.

Ejecución en un punto de interrupción de función

Puede configurar el depurador para que se ejecute hasta que llegue a una función especificada. Puede especificar la función por su nombre o elegirla en la pila de llamadas.

Para especificar un punto de interrupción de función por nombre:

  1. Seleccione Depurar>Nuevo punto de interrupción>Punto de interrupción de función.

  2. En el cuadro de diálogo Nuevo punto de interrupción de función, escriba el nombre de la función y seleccione el lenguaje:

    Screenshot that shows the New Function Breakpoint dialog.

    Screenshot that shows the New Function Breakpoint dialog.

  3. Seleccione Aceptar.

Si la función está sobrecargada o en más de un espacio de nombres, puede elegir el que quiera en la ventana Puntos de interrupción:

Screenshot that shows breakpoints window.

Screenshot that shows breakpoints window.

Para seleccionar un punto de interrupción de función de la pila de llamadas:

  1. Durante la depuración, abra la ventana Pila de llamadas. Para ello, seleccione Depurar>Ventanas>Pila de llamadas.

  2. En la ventana Pila de llamadas, haga clic con el botón derecho en una función y seleccione Ejecutar hasta el cursor o presione Ctrl+F10.

Para información sobre cómo realizar un seguimiento visual de la pila de llamadas, vea Creación de un mapa visual de la pila de llamadas durante la depuración.

Ejecución hasta la ubicación del cursor

Para realizar la ejecución hasta la ubicación del cursor, seleccione en el código fuente o en la ventana Pila de llamadas la línea en la que quiera interrumpir la ejecución, haga clic con el botón derecho y seleccione Ejecutar hasta el cursor o presione Ctrl+F10. Seleccionar Ejecutar hasta el cursor equivale a establecer un punto de interrupción temporal.

Forzado de la ejecución a una ubicación de cursor

Para realizar la ejecución hasta la ubicación del cursor, seleccione en el código fuente o en la ventana Pila de llamadas la línea en la que quiera interrumpir la ejecución, haga clic con el botón derecho y seleccione Force Run to Cursor (Forzar Ejecutar hasta el cursor). Al seleccionar Force Run to Cursor (Forzar Ejecutar hasta el cursor), se omitirán los puntos de interrupción y las excepciones de primera oportunidad hasta que el depurador alcance la línea de código.

Ejecutar hasta clic

Mientras el depurador está en pausa, puede mantener el cursor sobre una instrucción en el código fuente o en la ventana Desensamblado y seleccionar la flecha verde Ejecutar hasta aquí. Usar Ejecutar hasta clic equivale a establecer un punto de interrupción temporal.

Screenshot that shows Run to Click and the green arrow.

Nota:

Run to Click (Ejecutar hasta hacer clic) está disponible a partir de Visual Studio 2017.

Forzar ejecución hasta hacer clic

Mientras el depurador está en pausa, puede pasar el cursor por encima de una instrucción en el código fuente mientras mantiene pulsada la tecla Mayús, y después seleccionar Force run execution to here (Forzar Ejecutar hasta aquí). Al elegir esta opción, la aplicación adjunta el depurador de Visual Studio y se pausa en la ubicación del cursor. Los puntos de interrupción y las excepciones de primera oportunidad que se encuentren durante la ejecución se deshabilitan temporalmente.

Screenshot that shows Force Run to Click.

Nota:

Force Run to Click (Forzar Ejecutar hasta hacer clic) está disponible a partir de Visual Studio 2022.

Interrumpir el código manualmente

Para interrumpir en la siguiente línea de código disponible en una aplicación en ejecución, seleccione Depurar>Interrumpir todo o presione Ctrl+Alt+Interrumpir.

Depuración de código que no es de usuario

De forma predeterminada, el depurador intenta depurar solo el código de la aplicación habilitando un valor llamado Solo mi código. Para más información sobre cómo funciona esta característica para los diferentes tipos de proyecto y lenguajes y cómo puede personalizarla, vea Solo mi código.

Para ver el código del marco, el código de la biblioteca de terceros o las llamadas del sistema durante la depuración, puede deshabilitar Solo mi código. En Herramientas (o Depurar) >Opciones>Depuración, desactive la casilla Habilitar Solo mi código. Cuando Solo mi código está deshabilitado, el código que no es de usuario aparece en las ventanas del depurador, y este puede depurar el código que no es de usuario paso a paso por instrucciones.

Nota

Los proyectos de dispositivos no admiten Solo mi código.

Depuración de código del sistema

Si ha cargado símbolos de depuración para el código del sistema de Microsoft y ha deshabilitado Solo mi código, puede depurar paso a paso por instrucciones una llamada del sistema al igual que lo haría con cualquier otra llamada.

A partir de la versión 17.7 de Visual Studio 2022, puede descompilar automáticamente código de .NET al entrar en código externo sin necesidad de cargar manualmente símbolos de depuración. Para obtener más información, consulte Generación de código fuente a partir de ensamblados de .NET durante la depuración.

Para cargar símbolos de Microsoft, vea Configuración de la ubicación de archivos de símbolos y opciones de carga.

Para cargar los símbolos de un componente del sistema específico:

  1. Mientras realiza la depuración, abra la ventana Módulos; para ello, seleccione Depurar>Ventanas>Módulos o presione Ctrl+Alt+U.

  2. En la ventana Módulos, puede indicar qué módulos tienen cargados los símbolos en la columna Estado del símbolo. Haga clic con el botón derecho en el módulo para el que quiera cargar los símbolos y seleccione Cargar símbolos.

Ir a propiedades y operadores en código administrado

El depurador se salta las propiedades y los operadores en código administrado de forma predeterminada. En la mayoría de los casos, este comportamiento proporciona una mejor experiencia de depuración. Para deshabilitar que las propiedades y los operadores se depuren paso a paso por instrucciones, seleccione Depurar>Opciones. En la página Depuración>General, desactive la casilla Saltar propiedades y operadores (solo administrado) .

Movimiento del puntero para cambiar el flujo de ejecución

Para cambiar la siguiente instrucción que se va a ejecutar, basta con mover el puntero de ejecución amarillo. Puede usar esta característica durante el modo de interrupción.

Se trata de una característica avanzada del depurador. Para obtener más información, vea Movimiento del puntero de ejecución.