Pregunta Evitar mensajes de excepción de primera oportunidad cuando la excepción se maneja con seguridad


El siguiente bit de código capta la excepción de EOS

using (var reader = new BinaryReader(httpRequestBodyStream)) {

    try {
        while (true) {
            bodyByteList.Add(reader.ReadByte());
        }
    } catch (EndOfStreamException) { }
}

Entonces, ¿por qué todavía recibo excepciones de primera oportunidad en mi consola?

Se produjo una primera excepción de tipo 'System.IO.EndOfStreamException' en mscorlib.dll

¿Hay alguna manera de ocultar estos mensajes de excepción de primera oportunidad?


75
2017-09-12 05:48


origen


Respuestas:


El objetivo de las excepciones de "primera oportunidad" es que las veas como pretrabajador para poder detenerse en ellas durante la depuración en el punto de lanzamiento. Una excepción de "segunda oportunidad" es aquella que no tiene un controlador apropiado. Algunas veces quiere atrapar excepciones de "primera oportunidad" porque es importante ver qué está sucediendo cuando se lanza, incluso si alguien lo está atrapando.

No hay nada de qué preocuparse. Este es un comportamiento normal.


78
2017-09-12 05:56



Para evitar ver los mensajes, haga clic derecho en la ventana de salida y desmarque "Mensajes de excepción".

Sin embargo, verlos suceder podría ser bueno, si le interesa saber cuándo se lanzan las excepciones sin establecer puntos de interrupción y reconfigurar el depurador.


189
2017-09-13 18:48



1) En Visual Studio puede cambiar la configuración de la forma en que el depurador maneja las excepciones (interrupciones).

Vaya a Depurar> Excepciones. (Tenga en cuenta que esto puede no estar en su menú dependiendo de la configuración de su entorno de Visual Studio. Si no es así, agréguela a su menú usando el menú Personalizar).

Allí se le presenta un diálogo de excepciones y cuándo romper con ellas.

En la línea "Excepciones de Common Language Runtime" puede anular la selección de lanzamientos (lo que debería dejar de molestarlo con las excepciones de primera oportunidad) y también puede deseleccionar User-unhandeled (que no recomendaría) si lo desea.

2) El mensaje que está recibiendo no debe estar en la consola, sino que debe aparecer en la ventana 'Salida' de Visual Studio. Si este es el caso, no he encontrado la posibilidad de eliminarlo, pero no aparece si ejecuta la aplicación sin Visual Studio.

Espero que ayude.


19
2017-09-12 06:06



A diferencia de Java, las excepciones de .NET son bastante caras en términos de potencia de procesamiento, y las excepciones manejadas deben evitarse en la ruta de ejecución normal y exitosa.

No solo evitará el desorden en la ventana de la consola, sino que mejorará su rendimiento y hará que los contadores de rendimiento como .NET CLR Exceptions sean más significativos.

En este ejemplo usarías

while (reader.PeekChar() != -1)
{
    bodyByteList.Add(reader.ReadByte());
}

11
2017-09-12 06:32



Tuve este problema y no pude averiguar dónde se lanzó la excepción. Así que mi solución fue permitir que Visual Studio dejara de ejecutar este tipo de excepción.

  1. Navegue a "Depurar / Excepciones"
  2. Expanda el árbol "Excepciones de Common Language Runtime".
  3. Expande la rama "Sistema".
  4. Desplácese hacia abajo hasta donde está "NullReferenceException" y verifique casilla de verificación "arrojar" y desmarque la casilla "manejado por el usuario".
  5. Depure su proyecto.

7
2017-10-26 11:32



Si desea más control sobre estos mensajes, puede agregar un controlador:

Friend Sub AddTheHandler()
AddHandler AppDomain.CurrentDomain.FirstChanceException, AddressOf FirstChanceExceptionHandler
End Sub

<Conditional("DEBUG")>
Friend Sub FirstChanceExceptionHandler( source As Object,  e As Runtime.ExceptionServices.FirstChanceExceptionEventArgs)
' Process first chance exception

End Sub

Esto le permite silenciarlos como se menciona en otros comentarios, pero aún así se asegura de que pueda conocerlos. Encuentro que es bueno ver cuántos estoy lanzando realmente si registro un mensaje y una marca de tiempo en un archivo de texto.


4
2018-04-18 18:16



En realidad, si se producen muchas excepciones por segundo, se obtendría un mejor rendimiento consultando el valor de reader.EndOfStream. La impresión de esos mensajes de excepción es increíblemente lenta y ocultarlos en Visual Studio no acelerará nada.


2
2018-05-09 21:49



en VB.NET:

<DebuggerHidden()> _
Public Function Write(ByVal Text As String) As Boolean
   ...

-1
2017-08-07 21:23