System.Diagnostics.Debugger.Debug () dejó de funcionar

Estoy trabajando en un progtwig que utiliza el método System.Diagnostics.Debugger.Break () para permitir que el usuario establezca un punto de interrupción desde la línea de comandos. Esto ha funcionado bien durante muchas semanas. Sin embargo, cuando estaba trabajando para corregir una prueba de unidad hoy, intenté usar el interruptor de depuración desde la línea de comandos, y no funcionó.

Esto es lo que he intentado:

  • He confirmado que el método Debug () realmente se está llamando (poniendo un System.Console.WriteLine () después de él)
  • He confirmado que la comstackción aún está en depuración.
  • He hecho una construcción limpia
  • He reiniciado Product Studio

Una búsqueda rápida en Google no reveló nada, y la documentación de la API para .Net no menciona nada sobre esta función que no funciona correctamente. Entonces … ¿alguna idea?

Finalmente me di cuenta de lo que estaba pasando. Por alguna razón, algo cambió en mi máquina, de modo que simplemente llamar a Debugger.Debug ya no era suficiente (aún no entiendo lo que cambió). En cualquier caso, ahora puedo hacer que aparezca el depurador usando:

if (Debugger.IsAttached == false) Debugger.Launch(); 

Estaba usando el método debugger.launch() y dejó de funcionar repentinamente. utilizando

 if (Debugger.IsAttached == false) Debugger.Launch(); 

Tampoco sacó el depurador. Intenté restablecer la configuración de mi estudio visual y funcionó!

Extrae de aquí ( MSDN ) la siguiente nota:

A partir de net_v40_long, el tiempo de ejecución ya no ejerce un control estricto sobre el lanzamiento del depurador para el método M: System.Diagnostics.Debugger.Break, sino que informa un error al subsistema de Informe de errores de Windows (WER). WER proporciona muchas configuraciones para personalizar la experiencia de informe de problemas, por lo que muchos factores influirán en la forma en que WER responde a un error, como la versión del sistema operativo, el proceso, la sesión, el usuario, la máquina y el dominio. Si tiene resultados inesperados al llamar al método M: System.Diagnostics.Debugger.Break, verifique la configuración de WER en su máquina. Para obtener más información sobre cómo personalizar WER, consulte Configuración de WER: http://msdn.microsoft.com/library/windows/desktop/bb513638.aspx. Si desea asegurarse de que el depurador se inicie independientemente de la configuración de WER, asegúrese de llamar al método M: System.Diagnostics.Debugger.Launch.

Creo que explica el comportamiento detectado.

¿Está utilizando VS 2008 SP1? Tuve muchos problemas con la depuración en ese lanzamiento, y todos fueron resueltos por este parche de Microsoft .

Los puntos de interrupción puestos en bucles o en funciones recursivas no se alcanzan en todos los procesos en cada iteración. Con frecuencia, algunos procesos pueden pasar por muchas iteraciones de un bucle, ignorando el punto de interrupción, antes de que se detenga un proceso.

Los puntos de interrupción se alcanzan, pero no son visibles cuando se depuran múltiples procesos en el depurador de Visual Studio.

Hay algunos otros problemas relacionados con el depurador también corregidos.