2009-05-06 8 views
20

Brevemente:¿Puedo ajustar las opciones de Visual Studio "Break cuando se arroja una excepción" programáticamente?

En Visual Studio 2008, el menú tiene una opción DebugExceptions....
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 de romper cuando se produce ninguna excepción CLR (no cuando es capturado y re-lanzado), por lo que este es ideal para la solución de problemas.

El problema es que atrapa todas las excepciones 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 particularmente malo en esto, y como la fortuna lo tiene, mi aplicación utiliza WCF por todo el lugar.

Lo que me gustaría hacer es desactivar la casilla de verificación, y una vez que mi aplicación se haya iniciado (y haber superado la fase de conexión WCF y todas las excepciones internas), enciéndala para interrumpir todas las excepciones a partir de ahora.

  • Sé que no tiene que tener la captura manta en "todas las excepciones CLR", sin embargo, la lista de posibles excepciones es de aproximadamente 2 millas de largo y se necesita siempre para desplazarse y elegir las que desee (y luego, ¿qué pasa si me pierdo algo?)
+1

¿Ha pensado más que soltar un punto de interrupción en el código manualmente y luego encender las excepciones? –

+0

Eso es lo que estoy haciendo. Sin embargo, es muy tedioso tener que activarlos/desactivarlos manualmente cada vez que reinicio la aplicación, que es lo que intento evitar. –

Respuesta

8

Esto no soluciona 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.

1

En la parte superior de mi cabeza (por lo que puede ser una tontería) puede configurar el depurador para romper solo excepciones CLR no controladas, luego crear un delegado/evento controlador para todas las excepciones durante el código init y tragar los CLR (OK, OK, solo en modo de depuración) y luego elimine el delegado/evento en el punto en el código donde desea que VS comience a romper las excepciones de CLR.

30

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") 

Para que pueda escribir fácilmente una macro para activar/desactivar excepciones específicas. Para invocar la macro desde su aplicación, puede iniciar "devenv/command".

Como alternativa, puede usar DTE desde fuera de proceso y automatizar Visual Studio directamente (no se necesitan macros).

Más información:

  1. Customizing exception handling in the VS Debugger
  2. Debugger3.ExceptionGroups
  3. devenv /command
  4. How to: Get References to the DTE and DTE2 Objects
+0

Genial, ¡ahora puedo hacerlo también! – leppie

1

Probablemente puede hacer esto mediante la creación de una macro (como se muestra en Michael Lehenbauer 's ejemplo) y luego reconfigura tu punto de interrupción a ejecuta la macro y continúa 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.

0

También hay

si (Debugger.IsAttached) {Debugger.Break()}

Cuestiones relacionadas