Vermeiden erste Chance Ausnahmemeldungen, wenn die Ausnahme sicher gehandhabt wird

StackOverflow https://stackoverflow.com/questions/58380

  •  09-06-2019
  •  | 
  •  

Frage

Der folgende Code fängt die EOS Exception

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

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

Warum erhalte ich nach wie vor der ersten Chance Ausnahmen in meiner Konsole?

  

Eine erste Chance Ausnahme des Typs 'System.IO.EndOfStreamException' ist in mscorlib.dll aufgetreten

Gibt es eine Möglichkeit, diese erste Chance Ausnahmemeldungen?

zu verstecken
War es hilfreich?

Lösung

Der Punkt der „erste Chance“ Ausnahme ist, dass Sie sehen, wie sie vor-Handler, so dass Sie auf sie während des Debuggen an der Stelle des Werfens stoppen können. Eine „zweite Chance“ Ausnahme ist eine, die keinen entsprechenden Handler hat. Manchmal möchte man „first-Chance“ Ausnahmen fangen, weil es wichtig ist, zu sehen, was passiert, wenn es geworfen wird, selbst wenn jemand es zu kontrollieren.

Es gibt nichts mit Beunruhigung. Dieses Verhalten ist normal.

Andere Tipps

Um zu vermeiden, um die Nachrichten zu sehen, die rechte Maustaste auf dem Ausgabefenster und deaktivieren Sie „Ausnahmemeldungen“.

Allerdings sehen sie schön sein passieren könnte, wenn Sie wissen, interessiert sind, wenn Ausnahmen ausgelöst werden, ohne Stützpunkte und Rekonfiguration der Debugger zu setzen.

1) In Visual Studio können Sie die Einstellungen für die Art und Weise ändern sich die Debugger Griffe (Brüche auf) Ausnahmen.

Zum Debug> Ausnahmen. (Beachten Sie dies nicht in Ihrem Menü je nach Ihrer Visual Studio-Umgebung Einstellung sein kann. Wenn es nicht nur mit dem Menü Anpassen zu Ihrem Menü hinzufügen.)

Es werden Sie mit einem Dialog von Ausnahmen präsentiert und wenn auf sie zu brechen.

In der Zeile „Common Language Runtime Ausnahmen“ Sie geworfen abwählen können (die dann aufhören sollten Sie über die erste Chance Ausnahmen stören) und Sie können auch Benutzer-unhandeled deaktivieren, wenn (was ich nicht empfehlen würde) zu wollen.

2) Die Nachricht, die Sie bekommen soll nicht in der Konsole sein, sollte aber in den ‚Output‘ Fenster von Visual Studio zu sehen sein. Wenn letzteres der Fall ist, dann habe ich keine Möglichkeit zu entfernen, dass gefunden, aber es wird nicht angezeigt, wenn Sie die App ohne Visual Studio ausgeführt werden.

Ich hoffe, das hilft.

Im Gegensatz zu Java, .NET sind Ausnahmen ziemlich teuer in Bezug auf Rechenleistung und behandelten Ausnahmen in dem normalen und erfolgreichen Ausführungspfad sollten vermieden werden.

Sie werden nicht nur Unordnung im Konsolenfenster vermeiden, aber Ihre Leistung verbessern wird, und es wird die Leistungsindikatoren wie .NET CLR Ausnahmen sinnvoller machen.

In diesem Beispiel würden Sie verwenden

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

Ich hatte dieses Problem und konnte nicht herausfinden, wo die Ausnahme ausgelöst wurde. So war meine Lösung Visual Studio ermöglichen auf diese Art von Ausnahme zu stoppen Ausführung.

  1. Navigieren Sie zu "Debug / Ausnahmen"
  2. Erweitern Sie den "Common Language Runtime Ausnahmen" Baum.
  3. Erweitern Sie den "System" Zweig.
  4. Blättern Sie nach unten, wo „Nullreferenceexception“ ist, und überprüfen Sie die "Werfen" Kontrollkästchen, und deaktivieren Sie die "user-behandelt".
  5. Debug Ihr Projekt.

Wenn Sie mehr Kontrolle über diese Nachrichten möchten, können Sie einen Handler hinzu:

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

Auf diese Weise können Sie sie zum Schweigen zu bringen, wie in anderen Kommentaren erwähnt, macht aber immer noch sicher, dass Sie in der Lage sind sich bewusst von ihnen zu sein. Ich finde, es ist gut zu sehen, wie viele ich wirklich zu werfen, wenn ich eine Nachricht und Zeitstempel in eine Textdatei protokollieren.

Eigentlich, wenn viele Ausnahmen pro Sekunde würden Sie müssen eine bessere Leistung durch Überprüfung reader.EndOfStream-Wert erreichen .. diese Ausnahmemeldungen Ausdrucken ist unglaublich langsam, und sie in Visual Studio versteckt wird nichts beschleunigen.

in VB.NET:

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

Ich denke, der Strom diese Ausnahme wirft, so dass Ihr Versuch ist scoped zu verengen, ihn zu fangen.

In ein paar Try-Catch-Combos um die verschiedenen Bereiche, bis Sie es zu fangen, wo seine tatsächlich geworfen, aber es scheint, entweder in unserer außen zu passieren Ihrer Verwendung, da das Stream-Objekt wird in der Verwendung des Oszilloskops nicht erstellt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top