Solución de problemas de puntos de interrupción en el depurador de Visual Studio

              Aplicable a: Visual Studio

Advertencias de punto de interrupción

Al depurar, un punto de interrupción tiene dos estados visuales posibles:

  • Un círculo rojo sólido, si el depurador estableció correctamente un punto de interrupción en el proceso de destino.
  • Un círculo hueco (relleno de blanco), ya sea el punto de interrupción está deshabilitado o se produjo una advertencia al intentar establecer el punto de interrupción.

Para determinar la diferencia, mantenga el puntero sobre el punto de interrupción y vea si hay una advertencia. En las dos secciones siguientes se describen advertencias destacadas y cómo corregirlas.

"No se han cargado símbolos para este documento"

Vaya a la ventana Módulos (Depurar>módulosde Windows>) al depurar y compruebe si el módulo está cargado.

  • Si el módulo está cargado, compruebe la columna Estado del símbolo para ver si se han cargado los símbolos.
    • Si los símbolos no se cargan, compruebe el estado del símbolo para diagnosticar el problema. En el menú contextual de un módulo de la ventana Módulos , seleccione Información de carga de símbolos... para ver dónde ha buscado el depurador para intentar cargar símbolos. Para obtener más información sobre cómo cargar símbolos, vea Especificar símbolo (.pdb) y Archivos de origen.
    • Si se cargan símbolos, la PDB no contiene información sobre los archivos de origen. Algunas causas posibles son:
      • Si los archivos de origen se agregaron recientemente, confirme que se está cargando una versión actualizada del módulo.
      • Es posible crear archivos PB eliminados mediante la opción del enlazador /PDBSTRIPPED . Los ARCHIVOS PDB eliminados no contienen información de archivo de origen. Confirme que está trabajando con una PDB completa y no con una PDB desgarrada.
      • El archivo PDB está parcialmente dañado. Elimine el archivo y ejecute una compilación limpia del módulo para intentar resolver el problema.
  • Si el módulo no está cargado, compruebe lo siguiente para encontrar la causa:
    • Confirme que está depurando el proceso correcto.
    • Compruebe que está depurando el código correcto. Puede averiguar qué tipo de código está configurado el depurador para depurar en la ventana Procesos (Depurar>procesos deWindows>). Por ejemplo, si está intentando depurar código de C#, confirme que el depurador está configurado para el tipo y la versión adecuados de .NET (por ejemplo, Administrado (v4*) frente a Administrado (v2*/v3*) frente a Administrado (CoreCLR)).

"… el código fuente actual es diferente de la versión integrada en..."

Si un archivo de origen ha cambiado y el origen ya no coincide con el código que está depurando, el depurador no establecerá puntos de interrupción en el código de forma predeterminada. Normalmente, este problema se produce cuando se cambia un archivo de origen, pero el código fuente no se ha vuelto a generar. Para solucionar este problema, recompilar el proyecto. Si el sistema de compilación cree que el proyecto ya está actualizado aunque no lo esté, puede forzar la recompilación del sistema del proyecto. Recompile el proyecto guardando el archivo de origen de nuevo o limpiando la salida de compilación antes de compilarlo.

En escenarios poco frecuentes, es posible que desee depurar sin tener código fuente coincidente. La depuración sin código fuente coincidente puede dar lugar a una experiencia de depuración confusa, así que asegúrese de cómo desea continuar.

Siga una de las opciones para deshabilitar estas comprobaciones de seguridad:

  • Para modificar un único punto de interrupción, mantenga el puntero sobre el icono de punto de interrupción en el editor y seleccione el icono de configuración (engranaje). Se agrega una ventana de inspección al editor. En la parte superior de la ventana de inspección, hay un hipervínculo que indica la ubicación del punto de interrupción. Seleccione el hipervínculo para permitir la modificación de la ubicación del punto de interrupción y active Permitir que el código fuente sea diferente del original.
  • Para modificar esta configuración para todos los puntos de interrupción, vaya a Opciones de depuración>y Configuración. En la página Depuración/General , desactive la opción Requerir archivos de origen que coincidan exactamente con la versión original . Asegúrese de volver a habilitar esta opción cuando haya terminado la depuración.

El punto de interrupción se estableció correctamente (sin advertencia), pero no se alcanzó

En esta sección se proporciona información para solucionar problemas cuando el depurador no muestra ninguna advertencia: el punto de interrupción es un círculo rojo sólido durante la depuración activa, pero no se alcanza el punto de interrupción.

Estas son algunas cosas que hay que comprobar:

  1. Si el código se ejecuta en más de un proceso o en más de un equipo, asegúrese de que está depurando el proceso o equipo correcto.
  2. Confirme que el código se está ejecutando. Para probar que el código se está ejecutando, agregue una llamada a System.Diagnostics.Debugger.Break (C#/VB) o __debugbreak (C++) a la línea de código donde está intentando establecer el punto de interrupción y, a continuación, recompilar el proyecto.
  3. Si va a depurar código optimizado, asegúrese de que la función en la que se establece el punto de interrupción no esté insertada en otra función. La Debugger.Break prueba descrita en la comprobación anterior también puede funcionar para probar este problema.
  4. Para adjuntar a escenarios de proceso, asegúrese de depurar el tipo de código correcto (por ejemplo, código de script frente a .NET Framework frente a .NET 5+). Para investigar, active la opción Asociar a en el cuadro de diálogo Adjuntar al proceso y elija Seleccionar, si es necesario, para cambiar el tipo de código.

He eliminado un punto de interrupción, pero sigo acercándolo cuando empiezo a depurar de nuevo.

Si eliminó un punto de interrupción durante la depuración, puede volver a alcanzar el punto de interrupción la próxima vez que inicie la depuración. Para dejar de alcanzar este punto de interrupción, asegúrese de que todas las instancias del punto de interrupción se quitan de la ventana Puntos de interrupción .