En C# hay alguna declaración equivalente a DebugBreak(). Quiero invocar el depurador cuando se cumple una condición en particular.DebugBreak() Equivalente en C#
por favor ayuda
En C# hay alguna declaración equivalente a DebugBreak(). Quiero invocar el depurador cuando se cumple una condición en particular.DebugBreak() Equivalente en C#
por favor ayuda
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:
y luego editar la condición para adaptarse a sus necesidades:
Esto entonces será simbolizado con una pequeña + dentro de su punto de punto de interrupción:
Tal Debugger.Break
System.Diagnostics.Debugger.Break();
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
Si solo quiere que se active cuando ya hay un depurador conectado, se puede verificar 'Debugger.IsAttached'. – Richard
@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
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
Este artículo en MSDN proporciona información sobre este tema. http://blogs.msdn.com/b/calvin_hsia/archive/2006/08/25/724572.aspx
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)
Joe, gracias por detallar la diferencia entre Debug.Launch() y Debug.Break() – AbrahamJP
Joe. Realmente salvaste mi día. Muchas gracias. –
No se puede declarar un punto de interrupción en condiciones complejas EN ESA MANERA (utilizando la cláusula condicional). –
Lo bueno de Debugger.Break es que funciona incluso si aún no hay un depurador conectado. – CodesInChaos
@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();' –