2011-01-19 18 views

Respuesta

27

Se puede utilizar el método de la clase DebuggerBreak, en el espacio de nombres System.Diagnostics:

Debugger.Break(); 

Ahora, también hay una diferente forma en que puede agregar puntos de interrupción condicional, sin perder el tiempo agregando código a su proyecto.

Por supuesto, esto sólo funciona cuando ya se está ejecutando su programa a través del depurador

Lo que puede hacer primero es añadir un punto de interrupción periódica en el lugar donde desea que el depurador se detenga, a continuación, haga clic en el rojo punto para el punto de ruptura:

breakpoint right-click menu

y luego editar la condición para adaptarse a sus necesidades:

breakpoint condition dialog

Esto entonces será simbolizado con una pequeña + dentro de su punto de punto de interrupción:

conditional breakpoint

+0

No se puede declarar un punto de interrupción en condiciones complejas EN ESA MANERA (utilizando la cláusula condicional). –

+1

Lo bueno de Debugger.Break es que funciona incluso si aún no hay un depurador conectado. – CodesInChaos

+0

@Artur Hay un límite en la complejidad, sí, acabo de agregarlo para completar la respuesta. La respuesta correcta a la pregunta en particular sigue siendo 'Debugger.Break();' –

4
  System.Diagnostics.Debugger.Break(); 

      //Lauches the JIT debug window 
      System.Diagnostics.Debugger.Launch(); 

Esto es particularmente útil cuando se depura un servicio como aparezca la ventana del depurador Just In Time y puede a continuación, seleccione la ventana de Visual Studio para depurar el servicio en

+1

Si solo quiere que se active cuando ya hay un depurador conectado, se puede verificar 'Debugger.IsAttached'. – Richard

+0

@Richard: ¿para qué línea de código? no es necesario adjuntar el depurador para Debugger.Launch as this muestra la ventana para dar la oportunidad de adjuntar un depurador – WraithNath

+3

el primero (obviamente). 'if (Debugger.IsAttached) {Debugger.Break(); } 'es un patrón útil para tener un punto de interrupción permanente (no depende del estado de guardado del depurador), generalmente lo incluyo en el controlador de excepción de última oportunidad dentro de' #if DEBUG'. – Richard

8

En cuanto a las otras respuestas, prefiero utilizar Debugger.Launch(). Si la aplicación no se está ejecutando en un depurador, Launch() abrirá el diálogo del depurador permitiéndole adjuntar Visual Studio (u otro depurador) al proceso. Sin embargo, si ya está depurando, navegará justo después de la llamada Debugger.Launch(). Break(), por otro lado, actuará como un punto de interrupción - rompiendo cada vez que llegue a ese punto (e invocando el diálogo del depurador si el proceso no ha sido adjuntado).

Tenga mucho cuidado de no dejar ninguna instrucción en su código. El envío de código con llamadas de depuración a la producción puede detener su aplicación o crear errores muy difíciles de localizar. (Mala experiencia el mes pasado)

+2

Joe, gracias por detallar la diferencia entre Debug.Launch() y Debug.Break() – AbrahamJP

+0

Joe. Realmente salvaste mi día. Muchas gracias. –