Visual Studio Debugger omite puntos de interrupción

Mi IDE de Visual Studio 2008 se comporta de una manera muy extraña al depurar una prueba de unidad: tengo un punto de interrupción y cuando lo golpeo y luego trato de avanzar con F10, la prueba concluye. Si establezco puntos de interrupción en cada línea dentro del método que se está probando, terminaré en uno aleatorio, no en el siguiente en la siguiente línea. He limpiado y reconstruido la solución después de reiniciar el sistema limpio. El comportamiento persiste. ¿Alguien más ha experimentado esto y ha llegado a una conclusión?

Esta prueba solo usó el hilo de ejecución principal (no se están creando subprocesos adicionales)

Se lanzó una revisión de publicación VS2008 SP1 que resuelve varios problemas de depuración. El artículo de KB está aquí , la descarga de la revisión está aquí .


ACTUALIZACIÓN: la ubicación de descarga de la revisión se retiró, no sé de una ubicación de descarga alternativa. Edita esta publicación si encuentras una.

Este comportamiento ocurre si depura la comstackción de lanzamiento (ya que las líneas están optimizadas).

También me pasó en el pasado si accidentalmente estoy depurando un exe antiguo en otro lugar (como lo establece la configuración del proyecto), en lugar de uno más reciente; ^)

Tuve problemas similares en VS 2003. Resultó que estaba usando símbolos incorrectos para que no pudieran vincularse a la fuente correcta.

Asegúrate de lo siguiente:

  1. Que está utilizando la comstackción Debug (o que cualquier tipo de optimización está desactivada)
  2. Esa ruta de salida de comstackción está bien (que “Propiedades del proyecto \ Vinculador \ Archivo de salida” coincida con el ejecutable que está depurando)
  3. Que no coloque puntos de interrupción en las declaraciones de variables: es decir, si coloca un punto de interrupción en “int some_variable;”, nunca lo alcanzará, sino que primero alcanzará el primer lugar después de definir / inicializar algo o llamar a algún métodos
  4. No puede entrar con F10 (ejecuta la siguiente instrucción) pero con F11 (ejecuta la siguiente instrucción y sigue la ejecución en llamadas a métodos)
  5. Asegúrese de no tener ningún filtro en los puntos de interrupción (es decir, recuento de golpes o condición)

ps intente colocar el DebugBreak (); función en ambos métodos (a menos que este código se ejecute dentro de un ciclo así que esto puede ser frustrante). Esto debería causar la terminación de su proceso cuando la ejecución llegue a cualquiera de estas funciones (para que pueda continuar con la depuración desde ese lugar en particular).

Este comportamiento también ocurre cuando tiene varios subprocesos en ejecución.

Incluso en una comstackción de depuración, las optimizaciones del comstackdor podrían explicar este comportamiento. En las propiedades del proyecto, “Crear”, verifique que la checkbox “Optimizar código” esté desactivada. He visto esto activado por defecto después de actualizar ciertos proyectos de .Net 1.1.

¿Estás poniendo tus puntos de interrupción dentro de un código que es parte de una clase generada?

He experimentado este problema en el sitio del cliente de una referencia de servicio. Las clases generadas son clases parciales con el

[System.Diagnostics.DebuggerStepThroughAttribute()] 

atributo aplicado. Incluso cuando mi punto de interrupción estaba en un archivo diferente, pero todavía formaba parte de la clase atribuida, se omitiría el punto de interrupción.

Eliminé ese atributo del archivo Reference.cs generado y el depurador funcionó como esperaba.

Por supuesto, esta no es una solución permanente porque si el archivo Reference.cs se regenera, el atributo vuelve.

Esto puede ser tan simple como un caso en el marco de prueba que no carga el mismo ensamblado en el que está trabajando actualmente. He tenido esto en casos excepcionales en NUnit, que funciona con una copia de tu ensamblaje bajo prueba; ocasionalmente, dejó de copiar sobre la versión más reciente. ¿Están decorados sus puntos de interrupción con un indicador de “símbolos no cargados”?

Vaya a Proyecto-> Propiedades y desmarque “Optimizar código”

Este es el caso si ve código como DataSet ds = new DataSet (); recibe un golpe en el depurador pero codifica como una cadena Test = “Test”; se salta

Puede ser que sea demasiado tarde para responder, recibí el mismo problema en VS2012 para solucionarlo, compruebe si el menú Test> TestSettings> “LocalTestRun.TestRunConfig” está marcado; si está marcado, desmárquelo y dejará de omitir las líneas de código. Puede ser lo mismo para Vs2008 también funciona.

Me encontré con esto en Visual Studio Community 2013. El comportamiento parece ser por diseño. Al ejecutar las pruebas, la ejecución no se detendrá en los puntos de interrupción. Cuando desee que la ejecución se detenga en puntos de interrupción, selecciona PRUEBA -> Depurar en lugar de PRUEBA -> Ejecutar.

Mis pruebas unitarias estaban probando en x86. Cambiarlos a x64 funcionó.

Menú

Test -> Test Settings -> Default Processor Architecture -> x64 .

F10 es Paso a paso , F5 continúa al próximo punto de interrupción, F11 es Paso a paso, que ejecuta la siguiente línea de código y luego espera. Eso es lo que probablemente estés buscando.

Acabo de encontrar los mismos problemas y revisé todas las sugerencias anteriores sin suerte. En algún momento del pasado, alguien ha cambiado la firma del método para que sea “privado” cuando debe ser “estático” o “público”. Tan pronto como cambié la firma del método de prueba a “pública”, los puntos de interrupción comenzaron a funcionar nuevamente.