Usar puntos de interrupción en el depurador de Visual Studio

  • 06/30/2020
  • 12 minutos de lectura
    • M
    • g
    • j
    • v
    • g
    • +8

Los puntos de interrupción son una de las técnicas de depuración más importantes de la caja de herramientas de su desarrollador. Puede establecer puntos de interrupción donde quiera pausar la ejecución del depurador. Por ejemplo, es posible que desee ver el estado de las variables de código o mirar la pila de llamadas en un determinado punto de interrupción. Si intenta resolver una advertencia o un problema mientras usa puntos de interrupción, consulte Solucionar problemas de puntos de interrupción en el depurador de Visual Studio.

Nota

Si conoce la tarea o el problema que está tratando de resolver, pero necesita saber qué tipo de punto de interrupción usar, consulte Preguntas frecuentes – Encuentre su función de depuración.

Establecer puntos de interrupción en el código fuente

Puede establecer un punto de interrupción en cualquier línea de código ejecutable. Por ejemplo, en el siguiente código C#, puede establecer un punto de interrupción en la línea de código con la asignación de variables (int testInt = 1), el bucle for o cualquier código dentro del bucle for. No se puede establecer un punto de interrupción en las firmas de método, declaraciones para un espacio de nombres o clase, o declaraciones de variables si no hay asignación y no hay getter/setter.

Para establecer un punto de interrupción en el código fuente, haga clic en el margen izquierdo junto a una línea de código. También puede seleccionar la línea y presionar F9, seleccionar Depurar > Alternar punto 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.

Para la mayoría de los lenguajes, incluidos C#, punto de interrupción y líneas de ejecución actuales, se resaltan automáticamente. Para el código C++, puede activar el resaltado de puntos de interrupción y líneas actuales seleccionando Herramientas (o Depuración) > Opciones > Depuración > Resalte toda la línea de origen para los puntos de interrupción y la instrucción actual (solo en C++).

Establecer un punto de interrupción

Al depurar, la ejecución se detiene en el punto de interrupción, antes de que se ejecute el código de esa línea. El símbolo de punto de interrupción muestra una flecha amarilla.

En el punto de interrupción del ejemplo siguiente, el valor de testInt sigue siendo 1. Por lo tanto, el valor no ha cambiado desde que se inicializó la variable (establecido en un valor de 1) porque la instrucción en amarillo aún no se ha ejecutado.

 La ejecución del punto de interrupción se detuvo

Cuando el depurador se detiene en el punto de interrupción, puede ver el estado actual de la aplicación, incluidos los valores de las variables y la pila de llamadas.

Aquí hay algunas instrucciones generales para trabajar con puntos de interrupción.

  • El punto de interrupción es una palanca. Puede hacer clic en él, presionar F9 o usar Debug > Alternar punto de interrupción para eliminarlo o reinsertarlo.

  • Para deshabilitar un punto de interrupción sin eliminarlo, desplácese sobre él o haga clic con el botón derecho del ratón y seleccione Deshabilitar punto de interrupción. Los puntos de interrupción deshabilitados aparecen como puntos vacíos en el margen izquierdo o en la ventana Puntos de interrupción. Para volver a habilitar un punto de interrupción, desplácese sobre él o haga clic con el botón secundario y seleccione Habilitar punto de interrupción.

  • Establezca condiciones y acciones, agregue y edite etiquetas o exporte un punto de interrupción haciendo clic con el botón derecho en él y seleccionando el comando adecuado, o pasando el cursor sobre él y seleccionando el icono de Configuración.

Acciones de punto de interrupción y puntos de seguimiento

Un punto de seguimiento es un punto de interrupción que imprime un mensaje en la ventana de salida. Un punto de seguimiento puede actuar como una instrucción de seguimiento temporal en el lenguaje de programación y no detiene la ejecución del código. Para crear un punto de seguimiento, establezca una acción especial en la ventana Configuración de puntos de interrupción. Para obtener instrucciones detalladas, consulte Usar puntos de seguimiento en el depurador de Visual Studio.

Condiciones de punto de interrupción

Puede controlar cuándo y dónde se ejecuta un punto de interrupción estableciendo condiciones. La condición puede ser cualquier expresión válida que reconozca el depurador. Para obtener más información acerca de las expresiones válidas, consulte Expresiones en el depurador.

Para establecer una condición de punto de interrupción:

  1. Haga clic con el botón derecho en el símbolo de punto de interrupción y seleccione Condiciones (o pulse Alt + F9, C). O pase el cursor sobre el símbolo de punto de interrupción, seleccione el icono Configuración y, a continuación, seleccione Condiciones en la ventana Configuración de punto de interrupción.

    También puede establecer condiciones en la ventana Puntos de interrupción haciendo clic con el botón secundario en un punto de interrupción, seleccionando Configuración y, a continuación, seleccionando Condiciones.

     Ajustes de punto de interrupción

  2. En el menú desplegable, seleccione Expresión condicional, Recuento de visitas o Filtro y establezca el valor en consecuencia.

  3. Seleccione Cerrar o presione Ctrl + Enter para cerrar la ventana de Configuración del punto de interrupción. O bien, en la ventana Puntos de interrupción, seleccione Aceptar para cerrar el cuadro de diálogo.

Los puntos de interrupción con condiciones establecidas aparecen con un símbolo + en las ventanas código fuente y Puntos de interrupción.

Crear una expresión condicional

Cuando selecciona Expresión condicional, puede elegir entre dos condiciones: Es verdadero o Cuando se cambia. Choose Es true para romper cuando la expresión está satisfecha, o Cuando se cambia para romper cuando el valor de la expresión ha cambiado.

En el siguiente ejemplo, el punto de interrupción se alcanza solo cuando el valor de testInt es 4:

 La condición de punto de interrupción es verdadera

En el siguiente ejemplo, el punto de interrupción solo se alcanza cuando cambia el valor de testInt :

Punto de interrupción Cuando se cambia

Si establece una condición de punto de interrupción con sintaxis no válida, aparecerá un mensaje de advertencia. Si especifica una condición de punto de interrupción con sintaxis válida pero semántica no válida, aparecerá un mensaje de advertencia la primera vez que se alcance el punto de interrupción. En cualquier caso, el depurador se rompe cuando llega al punto de interrupción no válido. El punto de interrupción se omite solo si la condición es válida y se evalúa a false.

Nota

Para el campo Cuando se cambia, el depurador no considera que la primera evaluación de la condición sea un cambio, por lo que no alcanza el punto de interrupción en la primera evaluación.

Use ID de objeto en expresiones condicionales (solo C# y F#)

Hay momentos en los que desea observar el comportamiento de un objeto específico. Por ejemplo, es posible que desee averiguar por qué se insertó un objeto en una colección más de una vez. En C# y F#, puede crear ID de objeto para instancias específicas de tipos de referencia y usarlos en condiciones de punto de interrupción. El ID de objeto es generado por los servicios de depuración de tiempo de ejecución de lenguaje común (CLR) y asociado al objeto.

Para crear un ID de objeto:

  1. Establezca un punto de interrupción en el código en algún lugar después de que se haya creado el objeto.

  2. Inicie la depuración y, cuando la ejecución se detenga en el punto de interrupción, seleccione Debug > Windows > Locals (o pulse Ctrl + Alt+ V, L) para abrir la ventana Locals.

    Busque la instancia de objeto específica en la ventana Locales, haga clic con el botón secundario en ella y seleccione Crear ID de objeto.

    Debería ver un $ más un número en la ventana Local. Este es el ID del objeto.

  3. Agregue un nuevo punto de interrupción en el punto que desea investigar; por ejemplo, cuando el objeto se va a agregar a la colección. Haga clic con el botón derecho en el punto de interrupción y seleccione Condiciones.

  4. Utilice el ID de objeto en el campo Expresión condicional. Por ejemplo, si la variable item es el objeto que se agregará a la colección, select es true y escriba item = = item<n>, donde <n> es el número de ID del objeto.

    La ejecución se interrumpirá en el momento en que se vaya a agregar ese objeto a la colección.

    Para eliminar el ID de objeto, haga clic con el botón secundario en la variable de la ventana Locales y seleccione Eliminar ID de objeto.

Nota

Los ID de objeto crean referencias débiles y no impiden que el objeto se recopile como basura. Solo son válidos para la sesión de depuración actual.

Establecer una condición de recuento de visitas

Si sospecha que un bucle en su código comienza a comportarse mal después de un cierto número de iteraciones, puede establecer un punto de interrupción para detener la ejecución después de ese número de visitas, en lugar de tener que presionar repetidamente F5 para alcanzar esa iteración.

En Condiciones de la ventana Configuración de punto de interrupción, seleccione Recuento de visitas y, a continuación, especifique el número de iteraciones. En el siguiente ejemplo, el punto de interrupción se establece para golpear en cada otra iteración:

Número de visitas de punto de interrupción

Establecer una condición de filtro

Puede restringir un punto de interrupción para que se active solo en dispositivos especificados o en procesos e subprocesos especificados.

En Condiciones de la ventana Configuración de punto de interrupción, seleccione Filtrar y, a continuación, introduzca una o varias de las expresiones siguientes:

  • Nombre de máquina = “nombre”
  • Processd = valor
  • Nombre de proceso = “nombre”
  • ThreadId = valor
  • ThreadName = “nombre”

Encierre valores de cadena entre comillas dobles. Puede combinar cláusulas con &(AND), || (OR), ! (NOT) y paréntesis.

Establecer puntos de interrupción de función

Puede interrumpir la ejecución cuando se llama a una función. Esto es útil, por ejemplo, cuando conoce el nombre de la función pero no su ubicación. También es útil si tiene funciones con el mismo nombre y desea romperlas todas (como funciones sobrecargadas o funciones en diferentes proyectos).

Para establecer un punto de interrupción de función:

  1. Seleccione Debug > Nuevo punto de interrupción > Punto de interrupción de la función, o pulse Ctrl + K, B.

    También puede seleccionar el nuevo Punto de interrupción de la función > en la ventana Puntos de interrupción.

  2. En el cuadro de diálogo Nuevo punto de interrupción de función, escriba el nombre de la función en el cuadro Nombre de la función.

    Para reducir la especificación de la función:

    • Utilice el nombre completo de la función.

      Ejemplo: Namespace1.ClassX.MethodA()

    • Agregar los tipos de parámetros de una función sobrecargada.

      Ejemplo: MethodA(int, string)

    • ¡Usa el’! símbolo para especificar el módulo.

      Ejemplo: App1.dll!MethodA

    • Utilice el operador de contexto en C++nativo.

      {function, , }

      Ejemplo: {MethodA, , App1.dll}+2

  3. En el desplegable Idioma, elija el idioma de la función.

  4. Seleccione ACEPTAR.

Establecer un punto de interrupción de función mediante una dirección de memoria (solo en C++ nativo)

Puede usar la dirección de un objeto para establecer un punto de interrupción de función en un método llamado por una instancia específica de una clase. Por ejemplo, dado un objeto direccionable de tipo my_class, puede establecer un punto de interrupción de función en el método my_method que llama la instancia.

  1. Establezca un punto de interrupción en algún lugar después de que se instancie la instancia de la clase.

  2. Busque la dirección de la instancia (por ejemplo, 0xcccccccc).

  3. Seleccione Debug > Nuevo punto de interrupción > Punto de interrupción de la función, o pulse Ctrl + K, B.

  4. Agregue lo siguiente al cuadro Nombre de función y seleccione Lenguaje C++.

    ((my_class *) 0xcccccccc)->my_method

Establecer puntos de interrupción de datos (. NET Core 3.0 o superior)

Los puntos de interrupción de datos interrumpen la ejecución cuando cambia la propiedad de un objeto específico.

Para establecer un punto de interrupción de datos

  1. En un proyecto. NET Core, inicie la depuración y espere hasta que se alcance un punto de interrupción.

  2. En la ventana Autos, Ver o Locales, haga clic con el botón secundario en una propiedad y seleccione Romper cuando el valor cambie en el menú contextual.

     Punto de interrupción de Datos administrados

Los puntos de interrupción de datos en. NET Core no funcionarán:

  • Propiedades que no se pueden ampliar en la ventana de información sobre herramientas, Locales, Autos o Watch
  • Variables estáticas
  • Clases con el atributo DebuggerTypeProxy
  • Campos dentro de estructuras

Establecer puntos de interrupción de datos (solo en C++ nativo)

Los puntos de interrupción de datos interrumpen la ejecución cuando cambia un valor almacenado en una dirección de memoria especificada. Si el valor se lee pero no se cambia, la ejecución no se rompe.

Para establecer un punto de interrupción de datos:

  1. En un proyecto de C++, inicie la depuración y espere hasta que se alcance un punto de interrupción. En el menú Depuración, seleccione Nuevo Punto de interrupción > Punto de interrupción de datos.

    También puede seleccionar Nuevo > Punto de interrupción de datos en la ventana Puntos de interrupción o hacer clic con el botón secundario en un elemento de la ventana Autos, Reloj o Locales y seleccionar Romper cuando el valor cambie en el menú contextual.

  2. En el cuadro Dirección, escriba una dirección de memoria o una expresión que se evalúe como una dirección de memoria. Por ejemplo, escriba &avar para romper cuando cambie el contenido de la variable avar.

  3. En el menú desplegable Recuento de bytes, seleccione el número de bytes que desea que vea el depurador. Por ejemplo, si selecciona 4, el depurador observará los cuatro bytes a partir de &avar y se romperá si alguno de esos bytes cambia de valor.

Los puntos de interrupción de datos no funcionan en las siguientes condiciones:

  • Un proceso que no se está depurando escribe en la ubicación de memoria.
  • La ubicación de la memoria se comparte entre dos o más procesos.
  • La ubicación de la memoria se actualiza dentro del núcleo. Por ejemplo, si se pasa memoria a la función Windows ReadFile de 32 bits, la memoria se actualizará desde el modo kernel, por lo que el depurador no se interrumpirá en la actualización.
  • Donde la expresión del reloj es mayor que 4 bytes en hardware de 32 bits y 8 bytes en hardware de 64 bits. Esta es una limitación de la arquitectura x86.

Nota

  • Los puntos de interrupción de datos dependen de direcciones de memoria específicas. La dirección de una variable cambia de una sesión de depuración a la siguiente, por lo que los puntos de interrupción de datos se deshabilitan automáticamente al final de cada sesión de depuración.

  • Si establece un punto de interrupción de datos en una variable local, el punto de interrupción permanece habilitado cuando finaliza la función, pero la dirección de memoria ya no es aplicable, por lo que el comportamiento del punto de interrupción es impredecible. Si establece un punto de interrupción de datos en una variable local, debe eliminar o deshabilitar el punto de interrupción antes de que finalice la función.

Administrar puntos de interrupción en la ventana Puntos de interrupción

Puede usar la ventana Puntos de interrupción para ver y administrar todos los puntos de interrupción de su solución. Esta ubicación centralizada es especialmente útil en una solución grande o para escenarios de depuración complejos donde los puntos de interrupción son críticos.

En la ventana Puntos de interrupción, puede buscar, ordenar, filtrar, habilitar/deshabilitar o eliminar puntos de interrupción. También puede establecer condiciones y acciones, o agregar una nueva función o punto de interrupción de datos.

Para abrir la ventana de puntos de interrupción, seleccione Depurar > Windows > Puntos de interrupción o presione Ctrl+Alt+B.

Ventana de puntos de interrupción

Para seleccionar las columnas que se mostrarán en la ventana de puntos de interrupción, seleccione Mostrar columnas. Seleccione un encabezado de columna para ordenar la lista de puntos de interrupción por esa columna.

Etiquetas de punto de interrupción

Puede usar etiquetas para ordenar y filtrar la lista de puntos de interrupción en la ventana Puntos de interrupción.

  1. Para agregar una etiqueta a un punto de interrupción, haga clic con el botón secundario en el punto de interrupción en la ventana código fuente o Puntos de interrupción y, a continuación, seleccione Editar etiquetas. Agregue una etiqueta nueva o elija una existente y, a continuación, seleccione Aceptar.
  2. Ordene la lista de puntos de interrupción en la ventana Puntos de interrupción seleccionando las Etiquetas, Condiciones u otros encabezados de columna. Puede seleccionar las columnas que desea mostrar seleccionando Mostrar columnas en la barra de herramientas.

Exportar e importar puntos de interrupción

Para guardar o compartir el estado y la ubicación de los puntos de interrupción, puede exportarlos o importarlos.

  • Para exportar un único punto de interrupción a un archivo XML, haga clic con el botón secundario en el punto de interrupción en la ventana Código fuente o Puntos de interrupción y seleccione Exportar o Exportar seleccionado. Seleccione una ubicación de exportación y, a continuación, seleccione Guardar. La ubicación predeterminada es la carpeta de la solución.
  • Para exportar varios puntos de interrupción, en la ventana Puntos de interrupción, seleccione las casillas junto a los puntos de interrupción o introduzca criterios de búsqueda en el campo de búsqueda. Seleccione el icono Exportar todos los puntos de interrupción que coincidan con los criterios de búsqueda actuales y guarde el archivo.
  • Para exportar todos los puntos de interrupción, deseleccione todos los cuadros y deje el campo de búsqueda en blanco. Seleccione el icono Exportar todos los puntos de interrupción que coincidan con los criterios de búsqueda actuales y guarde el archivo.
  • Para importar puntos de interrupción, en la ventana Puntos de interrupción, seleccione el icono Importar puntos de interrupción desde un archivo, vaya a la ubicación del archivo XML y seleccione Abrir.

Establecer puntos de interrupción desde las ventanas del depurador

También puede establecer puntos de interrupción desde la Pila de llamadas y las ventanas del depurador de desmontaje.

Establecer un punto de interrupción en la ventana de pila de llamadas

Para romper en la instrucción o línea a la que regresa una función de llamada, puede establecer un punto de interrupción en la ventana de pila de llamadas.

Para establecer un punto de interrupción en la ventana de pila de llamadas:

  1. Para abrir la ventana de Pila de llamadas, debe estar en pausa durante la depuración. Seleccione Depurar > Pila de llamadas de Windows > o presione Ctrl + Alt + C.

  2. En la ventana Pila de llamadas, haga clic con el botón secundario en la función de llamada y seleccione Punto de interrupción > Insertar punto de interrupción o presione F9.

    Aparece un símbolo de punto de interrupción junto al nombre de la llamada a la función en el margen izquierdo de la pila de llamadas.

El punto de interrupción de la pila de llamadas aparece en la ventana Puntos de interrupción como una dirección, con una ubicación de memoria que corresponde a la siguiente instrucción ejecutable de la función.

El depurador se interrumpe en la instrucción.

Para obtener más información sobre la pila de llamadas, consulte Cómo usar la ventana de pila de llamadas.

Para rastrear visualmente los puntos de interrupción durante la ejecución de código, consulte Métodos de asignación en la pila de llamadas durante la depuración.

Establecer un punto de interrupción en la ventana de desmontaje

  1. Para abrir la ventana de desmontaje, debe estar en pausa durante la depuración. Seleccione Depurar > Desensamblar de Windows > o pulse Ctrl + Alt + D.

  2. En la ventana de Desmontaje, haga clic en el margen izquierdo de la instrucción en la que desea romper. También puede seleccionarlo y presionar F9, o hacer clic con el botón derecho y seleccionar Punto de interrupción > Insertar punto de interrupción.

Consulte también

  • ¿Qué es la depuración?
  • Escriba mejor código C # con Visual Studio
  • Primer vistazo a la depuración
  • Solucionar problemas de puntos de interrupción en el depurador de Visual Studio

Deja una respuesta

Tu dirección de correo electrónico no será publicada.