En herramientas / excepciones, configuré la opción de que el depurador se detenga cuando se lanza una excepción. Ya sea que lo atrapen o no.
¿Cómo excluyo una excepción de esa regla? En algún lugar de mi código hay una excepción detectada que es parte de la lógica del programa. Entonces, obviamente, no quiero que esa excepción detenga el depurador cada vez que se golpea.
Ejemplo: quiero ignorar la excepción de referencia nula (que se detecta) en la línea 344. Quiero detenerme en todas las demás excepciones.
Respuestas:
Si mal no recuerdo, puede usar un
DebuggerStepThrough
atributo en el método que contiene el código que no desea que se active la excepción. Supongo que puedes aislar el código que dispara la molesta excepción en un método y decorarlo con el atributo.fuente
DebuggerStepThrough
atributo no afecta el comportamiento del depurador con excepciones de primera oportunidad.DebuggerStepThrough
atributo no tiene ningún significado para CLR. Es interpretado por depuradores. Parece que no funciona de manera confiable en una variedad de circunstancias, y esoDebuggerHidden
funcionará de manera confiable stackoverflow.com/a/3455100/141172DebuggerHidden
¡es tu amigo!Probado en VS2010 y funciona muy bien.
Si bien
DebuggerStepThrough
parece funcionar también para algunas versiones específicas del depurador,DebuggerHidden
parece funcionar para una gama más amplia de situaciones según los comentarios de ambas respuestas.Tenga en cuenta que ambas opciones no funcionan actualmente con métodos de bloque de iterador o con métodos asíncronos / en espera . Esto podría solucionarse en una actualización posterior de Visual Studio.
fuente
DebuggerHidden
...DebuggerStepThrough es el que se utilizará para evitar que el depurador interrumpa un método en el que hay un intento / captura.
Pero solo funciona si no desmarcó la opción "Habilitar solo mi código (solo administrado)" en la configuración general de las opciones de depuración de Visual Studio (menú Herramientas / Opciones, nodo Depuración / General) ...
Más información sobre ese atributo en http://abhijitjana.net/2010/09/22/tips-on-debugging-using-debuggerstepthrough-attribute/
DebuggerHidden simplemente evitará que Debugger muestre el método donde se lanza la excepción. En su lugar, mostrará el primer método de la pila que no está marcado con ese atributo ...
fuente
Los atributos especificados en las otras respuestas (y otros como el
DebuggerNonUserCode
atributo) ya no funcionan de la misma manera de forma predeterminada en Visual Studio 2015. El depurador se interrumpirá en las excepciones en el mercado de métodos con esos atributos, a diferencia de las versiones anteriores de VS. Para desactivar la mejora de rendimiento que cambió su comportamiento, debe cambiar una configuración de registro:Puede encontrar más información en el blog de Visual Studio .
(Esto probablemente debería ser un comentario sobre la respuesta principal, pero no tengo suficiente representante)
fuente
No puede identificar una excepción lanzada en un lugar específico de su código. Sin embargo, puede desactivar excepciones de un tipo específico.
Si su propio código arroja la excepción en cuestión, la convertiría en una excepción personalizada, derivada de lo que se ajuste, y luego deshabilitaría la ruptura de depuración en este tipo derivado.
La desactivación de excepciones del sistema como NullReferenceException afectará a todo el sistema, lo que, por supuesto, no es deseable durante el desarrollo.
Tenga en cuenta que existen dos tipos de comportamientos de ruptura para las excepciones:
Puede eliminar el check en 'Thrown' para NullReferenceException, lo que le dará el beneficio de no romperse cada vez que su sistema pasa la línea en cuestión en su código, pero aún se rompe si tiene alguna expectativa de NullReference no controlada que ocurre en otras partes de la sistema.
fuente