visual sólo studio punto puede optimizado opción módulo interrupcion habilitada está establecer encuentra depurador código archivo abrir c# visual-studio .net-2.0 breakpoints

sólo - punto de interrupcion c#



¿Puede el código fuente de.NET codificar un punto de interrupción de depuración? (7)

Estoy buscando una forma en .NET (2.0, C # en particular) para que el código fuente desencadene un corte de depuración como si se hubiera establecido un punto de interrupción en ese punto, sin tener que recordar establecer un punto de interrupción específico allí en el depurador, y sin interferir con el tiempo de ejecución de la producción.

Nuestro código necesita tragarse excepciones en la producción para no interrumpir una aplicación cliente que se vincule con nosotros, pero estoy tratando de configurarlo para que esos errores aparezcan para ser analizados si se ejecuta en un depurador. , y de lo contrario será ignorado de forma segura.

Mi intento de usar Debug.Assert(false) ha sido menos que ideal, y supongo que Debug.Fail() se comportaría de la misma manera. En teoría, no debería tener ningún efecto en la producción, y se detiene con éxito cuando se depura, pero por diseño (hasta donde puedo decir) no hay forma de continuar la ejecución si se quiere ignorar ese error, como se podría hacer con un punto de ruptura real , y como lo haría en producción donde tragamos el error. También aparentemente rompe la evaluación de estado variable porque el depurador realmente se detiene en el código del sistema nativo y no en el nuestro, por lo que la ayuda para la depuración es limitada. (Tal vez me falta alguna manera de volver a las cosas para ver las variables y así sucesivamente, ¿dónde sucedió? ??)

Esperaba algo como Debug.Break() , pero parece que no existe (a menos que sea en una versión posterior de .NET), y tampoco parece aplicable ningún otro método de Debug .

Actualización: Mientras que la respuesta de ctacke es la mejor coincidencia para lo que estaba buscando, también descubrí un truco con Debug.Assert () - cuando se ejecuta en el depurador - Pausa el depurador, ve al código para la depuración. Confirme la llamada pendiente (resaltada en verde porque está abajo en el código de la estructura) y presione Salir (shift-F11), luego presione Ignorar en el cuadro de diálogo de afirmación. Esto dejará el depurador en pausa al retorno de la declaración (y podrá continuar la ejecución como si no hubiera ocurrido, porque se ignoró). Puede haber otras formas de hacer más o menos lo mismo (¿es mejor intentarlo de nuevo con Reintentar?), Pero de esta manera fue intuitivo.


Me encontré con una situación una vez que esto no funcionó

System.Diagnostics.Debugger.Break();

pero esto hizo

System.Diagnostics.Debugger.Launch();


System.Diagnostics.Debugger.Break?


¿Qué tal si simplemente configura Visual Studio para que aparezca el depurador incluso si se lo traga?

Hacer esto:

  • Ve a Depurar-> Excepciones ...
  • Encuentra la excepción correcta o agrégala si es tuya
  • Marque la casilla de verificación "Lanzada" para la excepción

Esto detendrá Visual Studio en la ubicación donde se lanza la excepción, no solo si no se maneja.

Puedes ver más información aquí .


Probablemente estés buscando algo como esto:

if(System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debugger.Break();

Por supuesto, eso aún se compilará en una versión de lanzamiento. Si desea que se comporte más como el objeto Debug donde el código simplemente no existe en una compilación Release, entonces podría hacer algo como esto:

[Conditional("DEBUG")] void DebugBreak() { if(System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debugger.Break(); }

Luego agréguele una llamada en su código.


Un buen truco que encontré es poner Debugger.Break () en el ctor de su Excepción.


En Visual Studio 2010, presionar Reintentar en un diálogo Debug.Assert lleva a la aserción de depuración fallida, como si tuviera un punto de interrupción.


Si desea tener solo una línea de código en lugar de 4, envuelva

#if DEBUG if (Debugger.IsAttached) Debugger.Break(); #endif

dentro

public static class DebugHelper { [DebuggerHidden] [Conditional("DEBUG")] public static void Stop() { if (Debugger.IsAttached) Debugger.Break(); } }

y use

DebugHelper.Stop();

DebuggerHiddenAttribute se agrega para evitar que el depurador se detenga en el código interno del método Stop y entre en el método con F11.