Compartir a través de


Puntos de interrupción: Usar números de llamadas, funciones de pila de llamadas y condiciones para realizar interrupciones cuando y donde quiera en el depurador de Visual Studio

Establecer puntos de interrupción para las líneas de código fuente, instrucciones de ensamblado y función de la pila de llamadas.Especificar las condiciones, números de llamadas y ubicación de la ejecución.Imprimir con puntos de seguimiento.Guardar e importar puntos de interrupción.

Contenido

Create breakpoints that break when you want

Set a breakpoint at a source line, assembly instruction, or call stack function

Access the advanced functionality of breakpoints

Specify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

Print to the Output window with tracepoints

Manage breakpoints in the Breakpoints window

Troubleshoot breakpoints

Breakpoint Glyphs Reference

Crear puntos de interrupción que se interrumpan cuando se desee

Los puntos de interrupción estándar, que interrumpen la ejecución del depurador cada vez que se visita una ubicación de archivo de código fuente, constituyen una de las técnicas de depuración más importantes del cuadro de herramientas de un desarrollador.Visual Studio le ayuda a ir más allá de los puntos de interrupción estándar para crear un control más detallado sobre cuándo y dónde se ejecuta un punto de interrupción.

  • Puede establecer puntos de interrupción en tiempo de ejecución que detengan la ejecución cuando el programa devuelva una función en la pila de llamadas y evitar así largas series de comandos Paso a paso para salir.

  • Si sospecha que un bucle del código inicia un comportamiento erróneo después de cierto número de iteraciones, puede establecer un punto de interrupción para detener la ejecución después de un determinado número de visitas a la línea de código asociado, en lugar de verse obligado a presionar repetidamente F5 (Depurar, Continuar) para alcanzar el nivel de iteración.

  • Mediante expresiones de código, puede especificar las condiciones exactas en las que un punto de interrupción se interrumpa.

Puede usar la ventana Puntos de interrupción para administrar el estado y el comportamiento de un gran número de puntos de interrupción.Si ha creado cuidadosamente una secuencia de puntos de interrupción para diagnosticar un problema común o especialmente complejo, puede guardar o compartir dichos puntos de interrupción mediante los comandos de importación y exportación de la ventana Puntos de interrupción.

Nota de precauciónPrecaución

Evite establecer puntos de interrupción en componentes del sistema en los que depure código mixto (nativo y administrado).El uso de puntos de interrupción en un componente del sistema durante la depuración en modo mixto puede hacer que Common Language Runtime se interrumpa y que el depurador deje de responder.

Establecer un punto de interrupción en una línea de código fuente, instrucción de ensamblado o función de la pila de llamadas

  • Set a breakpoint in a source file • Set a breakpoint at a function return in the Call Stack window • Set a breakpoint at an assembly instruction in the Disassembly window

Establecer un punto de interrupción en un archivo de código fuente

A continuación se muestran dos técnicas para establecer un punto de interrupción estándar en una ventana de código fuente:

  • Haga doble clic en el medianil de la ventana en la línea donde desee interrumpir.

    O bien

  • Seleccione la línea y elija F9.

Punto de interrupción en la ventana Pila de llamadas

El icono de punto de interrupción aparece en el medianil.

Para hacer un seguimiento visual de los puntos de interrupción durante la ejecución del código, vea Asignar métodos en la pila de llamadas durante la depuración en Visual Studio.

Volver al principioSet a breakpoint at a source line, assembly instruction, or call stack function

Establecer un punto de interrupción en el valor devuelto por una función en la ventana Pila de llamadas

Puede interrumpir la ejecución en la instrucción o línea que devuelve una función de llamada para establecer un punto de interrupción en la ventana Pila de llamadas.El depurador debe hallarse en modo de interrupción.

  • Abra la ventana Pila de llamadas (tecla de método abreviado: Ctrl + Alt + C) y seleccione la función de llamada en la que desea interrumpir la ejecución.

  • Elija Punto de interrupción, Insertar punto de interrupción en el menú contextual o, simplemente utilice la tecla de método abreviado: F9.

En el margen izquierdo, junto al nombre de la llamada a la función, aparece un símbolo de punto de interrupción.

Punto de interrupción en la ventana Pila de llamadas

Si abre la ventana Puntos de interrupción (tecla de método abreviado: Ctrl + Alt + B), el punto de interrupción aparecerá como un punto de interrupción de dirección con una ubicación de memoria que corresponde a la siguiente instrucción ejecutable de la función.El depurador interrumpe la ejecución en la instrucción.

Punto de interrupción de la pila de llamadas en la ventana Puntos de interrupción

Para hacer un seguimiento visual de los puntos de interrupción durante la ejecución del código, vea Asignar métodos en la pila de llamadas durante la depuración en Visual Studio.

Establecer un punto de interrupción en una instrucción de ensamblado en la ventana Desensamblado

Para establecer un punto de interrupción en una instrucción de ensamblado, el depurador debe hallarse en modo de interrupción.

  1. Abra la ventana Desensamblado (tecla de método abreviado: Ctrl + Alt + D).

  2. Realice una de las siguientes acciones:

    1. Haga doble clic en el medianil de la ventana en la línea donde desee interrumpir.

      O bien

    2. Seleccione la línea y elija F9.

Volver al principioSet a breakpoint at a source line, assembly instruction, or call stack function

Obtener acceso a la funcionalidad avanzada de puntos de interrupción

Menú contextual de Punto de interrupción

En una ventana de código fuente, la ventana Pila de llamadas o la ventana Desensamblado, abra el menú contextual del punto de interrupción y elija la propiedad.

En la ventana Puntos de interrupción, seleccione una fila de puntos de interrupción y abra el menú contextual.También puede establecer algunas condiciones directamente en la columna Condición.

Especificar que un punto de interrupción se interrumpa por número de llamadas, evaluación de expresiones, ubicación de ejecución o cambio de datos

  • Specify a hit count at which the breakpoint executes • Specify a breakpoint condition using a code expression • Specify the devices, processes, or threads that a breakpoint executes on • Set a data change breakpoint (native C++ only)

Especificar un número de llamadas en el que se ejecute el punto de interrupción

Un número de llamadas registra el número de veces que se visita un punto de interrupción.Establezca un valor y una condición para que el punto de interrupción se ejecute cuando el número de llamadas sea igual al valor, sea igual a un múltiplo de un valor especificado o sea mayor o igual que el valor.Para especificar el número de llamadas y la condición:

  1. Abra el cuadro de diálogo Número de llamadas al punto de interrupción.

    1. En una ventana de código fuente, Desensamblado o Pila de llamadas, seleccione una línea que contenga un punto de interrupción y, a continuación, elija Puntos de interrupción, Número de llamadas en el menú contextual.

      O bien

    2. En la ventana Puntos de interrupción, seleccione una fila de puntos de interrupción y, a continuación, elija Número de llamadas en el menú contextual.

      Cuadro de diálogo Número de llamadas al punto de interrupción

  2. Seleccione la condición y escriba el número de llamadas.

Las condiciones del número de llamadas son útiles cuando se desea interrumpir en un bucle un número determinado de iteraciones.También puede especificar un número muy alto si desea contar el número de veces que se visita un punto de interrupción, pero no desea interrumpir la ejecución.

El número de llamadas especificado sólo se retiene para la sesión de depuración.Cuando la sesión de depuración finaliza, el número de llamadas se restablece en cero.

Volver al principioSpecify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

Especificar una condición de punto de interrupción mediante una expresión de código

Una condición de punto de interrupción es una expresión que el depurador evalúa cuando se alcanza un punto de interrupción.Si se cumple la condición, el depurador interrumpe la ejecución.

La condición puede ser cualquier expresión válida que reconozca el depurador.En un programa de banca, por ejemplo, puede establecer una condición de punto de interrupción como balance < 0.Para obtener más información sobre las expresiones válidas, vea Expresiones en el depurador.

Para especificar una condición de punto de interrupción

  1. Abra el menú contextual del punto de interrupción y elija Condición.

  2. En el cuadro de diálogo Condición del punto de interrupción, escriba una expresión válida en el cuadro Condición.

  3. Elija Es true si desea interrumpir cuando la expresión se cumple o elija Ha cambiado si desea interrumpir cuando el valor de la expresión cambie.

El depurador no evalúa la expresión hasta la primera vez que se alcanza el punto de interrupción.Si elige Ha cambiado para el código nativo, el depurador no considerará la primera evaluación de la condición como cambio, por lo que no se visitará el punto de interrupción en la primera evaluación.Si elige Ha cambiado para el código administrado, se visitará el punto de interrupción en la primera evaluación después de seleccionar Ha cambiado.

Si se establece una condición de punto de interrupción con una sintaxis no válida, aparecerá inmediatamente un mensaje de advertencia.Si se especifica una condición de punto de interrupción con una sintaxis válida pero una semántica no válida, aparecerá un mensaje de advertencia la primera vez que se visite el punto de interrupción.En ambos casos, el depurador interrumpirá la ejecución cuando se visite el punto de interrupción no válido.El punto de interrupción se omitirá únicamente si la condición es válida y se evalúa como falso.

Volver al principioSpecify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

Especificar los dispositivos, procesos o subprocesos en los que se ejecuta un punto de interrupción

  1. Abra el menú contextual de un punto de interrupción y elija Filtro.

    Cuadro de diálogo Filtro del punto de interrupción

  2. Especifique los criterios de filtro según las indicaciones del cuadro de diálogo.

Volver al principioSpecify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

Establecer un punto de interrupción de cambio de datos (solo C++ nativo)

Los puntos de interrupción de datos interrumpen la ejecución cuando se escribe un valor que está almacenado en una ubicación de memoria especificada.Si el valor se lee pero no se escribe, la ejecución no se interrumpe.Para establecer puntos de interrupción de datos, el depurador debe estar en modo de interrupción.

  1. En el menú Depurar, elija Nuevo punto de interrupción, Puntos de interrupción de datos nuevos.

    O bien

    En el menú de la ventana Puntos de interrupción, elija Nuevo, Puntos de interrupción de datos nuevos.

    Ventana de puntos de interrupción

  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 que se produzca una interrupción cuando cambie el contenido de la variable avar.

  3. En el cuadro Recuento de bytes, escriba el número de bytes que desea que el depurador inspeccione.

    Por ejemplo, si escribe 4, el depurador inspeccionará cuatro bytes a partir de &myFunction e interrumpirá la ejecución si cualquiera de esos bytes cambia de valor.

Para establecer puntos de interrupción de datos, el depurador debe estar en modo de interrupción.

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

  • Si un proceso que no se está depurando escribe en la ubicación de la memoria

  • Si la ubicación de la memoria se comparte entre dos o más procesos.

  • Si la ubicación de la memoria se actualiza dentro del kernel.Por ejemplo, si se pasa memoria a la función ReadFile de Windows de 32 bits, la memoria se actualizará desde el modo kernel y el depurador no interrumpirá la escritura en la memoria.

Las direcciones de las variables cambian de una sesión de depuración a la siguiente.Por esta razón, los puntos de interrupción de datos se deshabilitan automáticamente a la finalización 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 de datos sigue habilitado cuando finaliza la función.Sin embargo, la ubicación de memoria en la que se define ya no tiene el mismo significado.Por consiguiente, los resultados de este tipo de punto de interrupción son imprevisibles.Si establece un punto de interrupción de datos en una variable local, se recomienda quitarlo o deshabilitarlo antes de que finalice la función.

Visual Studio admite un máximo de cuatro puntos de interrupción de datos en cada solución.

Volver al principioSpecify when a breakpoint breaks by hit count, expression evaluation, execution location, or data change

Imprimir en la Ventana de salida con puntos de seguimiento

Los puntos de seguimiento son otra forma de utilizar los puntos de interrupción.Un punto de seguimiento es un punto de interrupción que imprime un mensaje en la ventana Salida.Un punto de seguimiento puede actuar como una instrucción de seguimiento temporal en el lenguaje de programación.

Para imprimir un mensaje en un punto de interrupción existente, abra el menú contextual del punto de interrupción y elija Cuando se llama.

Especifique el mensaje que desea imprimir en el cuadro de diálogo Al visitar un punto de interrupción.

Cuadro de diálogo Al visitar un punto de interrupción

Especificar el mensaje

Puede incluir información de programación en el mensaje mediante la sintaxis DebuggerDisplayAttribute (vea DebuggerDisplayAttribute).A continuación se muestran un par de ejemplos:

  • In function '{$FUNC}', on thread '{$TID}'

  • Used variable: {varName}, function name: {functionName($FUNC)}

Puede utilizar cualquiera de las palabras clave que se describen en el cuadro de diálogo Al visitar un punto de interrupción.Además, puede utilizar otras dos palabras clave que no se muestran en el cuadro de diálogo:

  1. $TICK inserta el contador de CPU actual

  2. $FILEPOS inserta la posición del archivo actual

Especificar el comportamiento del punto de seguimiento

Para interrumpir la ejecución cuando se alcanza el punto de seguimiento, desactive la casilla Continuar la ejecución.Si se activa Continuar la ejecución, la ejecución no se detiene.En ambos casos, se imprime el mensaje.

Deshabilitar el punto de seguimiento

Para deshabilitar temporalmente el punto de seguimiento, desactive la casilla Imprimir un mensaje.

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

  • Export and import breakpoints • Label breakpoints

Casi toda la funcionalidad para establecer, configurar y administrar puntos de interrupción de la ventana Puntos de interrupción está disponible en las ubicaciones de los puntos de interrupción individuales de las ventanas de código fuente, la ventana Pila de llamadas y la ventana Desensamblador.Pero la ventana Puntos de interrupción proporciona una ubicación central para administrar todos los puntos de interrupción, lo cual puede resultar especialmente útil en una solución grande o un escenario de depuración complejo en el que los puntos de interrupción sean críticos.Si necesita guardar o compartir el estado y la ubicación de un conjunto de puntos de interrupción, solo puede guardar e importar archivos de punto de interrupción desde la ventana Puntos de interrupción.

Volver al principioManage breakpoints in the Breakpoints window

Etiquetar puntos de interrupción

Las etiquetas de punto de interrupción solo se utilizan en la ventana Puntos de interrupción para ordenar y filtrar la lista de puntos de interrupción.Para agregar una etiqueta a un punto de interrupción, elija la fila del punto de interrupción y elija Etiqueta en el menú contextual.

Solucionar problemas de puntos de interrupción

  • The debugger can't determine the source file for a breakpoint • The debugger can't locate the correct version of the source file for a breakpoint • Breakpoints don't work in a DLL

El depurador no puede determinar el archivo de código fuente de un punto de interrupción

Si dos o más archivos de origen del proyecto tienen el mismo nombre, el depurador podría tener dificultades para determinar en qué archivo establecer el punto de interrupción.Esto se produce a menudo si crea un módulo con el mismo nombre que un componente de la biblioteca de depuración con la que está vinculando.

Para corregir este problema, seleccione el punto de interrupción en una ventana de código fuente y elija Ubicación en el menú contextual.

Cuadro de diálogo Punto de interrupción de archivo

Escriba la ruta de acceso completa al archivo correcto en el cuadro Archivo

Volver al principio Troubleshoot breakpoints

El depurador no puede encontrar la versión correcta del archivo de código fuente de un punto de interrupción

Si un archivo de código fuente ha cambiado y el código fuente ya no coincide con el código que se está depurando, es posible que el depurador busque el archivo de código fuente que corresponde a un punto de interrupción, aunque exista el archivo de código fuente.

  1. Si desea que Visual Studio muestre el código fuente que no coincide con la versión que está depurando, elija Depurar, Opciones y configuración.En la página Depuración/General, desactive la opción Usar solo código fuente que sea exactamente igual al de la versión original.

  2. También puede enlazar el punto de interrupción al archivo de código fuente.Seleccione el punto de interrupción y elija Ubicación en el menú contextual.Active Permitir que el código fuente sea distinto del de la versión original en el cuadro de diálogo Punto de interrupción de archivo.

Volver al principio Troubleshoot breakpoints

Los puntos de interrupción no funcionan en una DLL

No se puede establecer un punto de interrupción en un archivo de código fuente si el depurador no ha cargado la información de depuración correspondiente al módulo donde se encuentra el código.Los síntomas pueden incluir mensajes como no se puede establecer el punto de interrupción.El glifo del punto de interrupción de advertencia aparece en la posición del punto de interrupción.Sin embargo, estos puntos de interrupción de advertencia se convierten en puntos de interrupción reales cuando se carga el código.

Volver al principioTroubleshoot breakpoints

Referencia de los glifos de puntos de interrupción

Las ventanas de código fuente y Desensamblado muestran la ubicación de los puntos de interrupción mediante símbolos en el margen izquierdo que se denominan glifos.En la tabla siguiente se describen estos glifos.

Si detiene el mouse sobre un glifo de punto de interrupción, aparece una sugerencia que le ofrece más información.Esta información resulta de gran utilidad para saber más acerca de los errores y advertencias de los puntos de interrupción.

Glifo

Descripción

Glifo de depuración 1

Punto de interrupción normal.El glifo relleno indica que el punto de interrupción está habilitado.El glifo vacío indica que está deshabilitado.

Glifo de depuración 2

Punto de interrupción avanzado.Habilitado/deshabilitado.El signo + indica que el punto de interrupción tiene por lo menos una característica avanzada asociada a él, como por ejemplo una condición, número de llamadas o filtro.

Glifo de depuración 3

Punto de interrupción asignado.Habilitado/deshabilitado.El punto de interrupción se establece en código de ASP/ASP.NET y se asigna a un punto de interrupción en la página HTML correspondiente, o se establece en un archivo de script de servidor y se asigna al archivo de script de cliente correspondiente.

Glifo de depuración 4

Punto de seguimiento.Habilitado/deshabilitado.Cuando se llega a este punto, se realiza una acción específica pero no se interrumpe la ejecución del programa.

Glifo de depuración 5

Punto de seguimiento avanzado.Habilitado/deshabilitado.El signo + indica que el punto de seguimiento tiene por lo menos una característica avanzada asociada a él, como una condición, número de llamadas o filtro.

Glifo de depuración 6

Punto de seguimiento asignado.Habilitado/deshabilitado.El punto de seguimiento se establece en código de ASP/ASP.NET y se asigna a un punto de seguimiento en la página HTML correspondiente.

Glifo de depuración 7

Error de punto de interrupción o punto de seguimiento.La X indica que no se pudo establecer el punto de interrupción o punto de seguimiento debido a una condición de error.

Glifo de depuración 8

Advertencia de punto de interrupción o de punto de seguimiento.El signo de admiración indica que no se pudo establecer un punto de interrupción o punto de seguimiento debido a una condición temporal.Normalmente, esto significa que no se ha cargado el código en la ubicación del punto de interrupción o punto de seguimiento.También podrá verlo si asocia un proceso y los símbolos del proceso no se cargan.Cuando se cargue el código o los símbolos, se habilitará el punto de interrupción y el glifo cambiará.

Vea también

Conceptos

Iniciar, interrumpir, recorrer paso por paso y ejecutar procesos a través del código y detener la depuración en Visual Studio