visual studio 2008 - propagacion - ¿Puedo ajustar las opciones de Visual Studio "Break cuando se arroja una excepción" programáticamente?
propagacion de excepciones c# (6)
Brevemente:
En Visual Studio 2008, el menú Debug
tiene una opción de Exceptions...
Al hacer clic en esto, aparece el cuadro de diálogo "Interrumpir cuando se lanza una excepción", donde marque la casilla junto a "Excepciones de Common Language Runtime".
Quiero poder marcar / desmarcar esta casilla programáticamente.
Elaboración:
Esto hace que el depurador se rompa cuando se produce una excepción de CLR (no cuando se detecta y vuelve a lanzar), por lo que es excelente para la resolución de problemas.
El problema es que atrapa todas las excepciones de CLR, y el .NET Framework arroja y atrapa un grupo de excepciones internamente, que también quedan atrapadas. Esto hace que el depurador rompa una serie de excepciones que realmente no me importan, ya que son internas al marco y no son un problema.
WCF es especialmente malo en esto, y según la fortuna, mi aplicación usa WCF por todas partes.
Lo que me gustaría hacer es desactivar la casilla de verificación, y una vez que mi aplicación se haya iniciado (y haya pasado la fase de conexión WCF y todas las excepciones internas), enciéndala para romper todas las excepciones a partir de ahora. en .
- Sé que no es necesario que tenga la cobertura general de "todas las excepciones clr", sin embargo, la lista de posibles excepciones tiene aproximadamente 2 millas de largo y lleva una eternidad desplazarse y elegir las que desea (y luego, ¿qué ocurre si fallo? algunos).
Claro, puedes hacerlo con un complemento o macro de Visual Studio .
Fuera de mi cabeza (por lo que puede ser una tontería) podrías configurar el depurador para que rompa solo en excepciones CLR no controladas, luego crear un delegado / evento de manejador para todas las excepciones durante el código de inicio y tragar las CLR (OK, OK, solo en modo de depuración) y luego eliminar el delegado / evento en el punto en el código donde desea que VS comience a romper las excepciones de CLR.
Esto no aborda su pregunta directamente, pero hay una práctica acorde ctrl-D + E que abre el diálogo de excepciones de depuración. Ctrl + Alt + E hará lo mismo.
También hay
if (Debugger.IsAttached) {Debugger.Break ()}
Puede activarlos / desactivarlos a través de la API de automatización de Visual Studio (llamada DTE). Eche un vistazo a la API Debugger3.ExceptionGroups. Por ejemplo:
'' Turn off NullArgumentException.
Dim debugger As Debugger3 = DTE.Debugger
Dim exceptionGroup As ExceptionSettings = dbg.ExceptionGroups.Item("Common Language Runtime Exceptions")
exceptionGroup.SetBreakWhenThrown(False, "System.NullArgumentException")
Por lo tanto, podría escribir fácilmente una macro para activar / desactivar excepciones específicas. Para invocar la macro desde su aplicación, puede iniciar "devenv / command".
Alternativamente, puede usar DTE desde fuera de proceso y automatizar Visual Studio directamente (no se necesitan macros).
Más información:
Probablemente pueda hacer esto creando una macro (como se muestra en el ejemplo de Michael Lehenbauer ), y luego vuelva a configurar su punto de interrupción para ejecutar la macro y continuar la ejecución. Puede hacer lo mismo al final de la sección del código que le interesa deshabilitar nuevamente la opción o deshabilitarla manualmente entre las sesiones de depuración.