Frage Vermeiden von Ausnahmemeldungen der ersten Möglichkeit, wenn die Ausnahme sicher gehandhabt wird


Das folgende Bit des Codes fängt die EOS-Ausnahme ab

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

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

Warum erhalte ich in meiner Konsole immer noch Ausnahmen der ersten Chance?

Eine erste Möglichkeitsausnahme vom Typ 'System.IO.EndOfStreamException' ist in mscorlib.dll aufgetreten

Gibt es eine Möglichkeit, diese ersten Ausnahmemeldungen zu verbergen?


75
2017-09-12 05:48


Ursprung


Antworten:


Der Punkt von "First-chance" -Ausnahmen besteht darin, dass Sie sie als Pre-Handler sehen, so dass Sie sie während des Debuggens zum Zeitpunkt des Würfelns anhalten können. Eine "zweite Chance" Ausnahme ist eine, die keinen passenden Handler hat. Manchmal möchten Sie "Erste-Chance" -Ausnahmen einfangen, da es wichtig ist, zu sehen, was passiert, wenn es geworfen wird, selbst wenn jemand es abfängt.

Es gibt nichts, worüber man sich Sorgen machen müsste. Das ist normales Verhalten.


78
2017-09-12 05:56



Um zu vermeiden, dass die Nachrichten angezeigt werden, klicken Sie mit der rechten Maustaste auf das Ausgabefenster und deaktivieren Sie "Ausnahmemeldungen".

Es kann jedoch sinnvoll sein, sie zu sehen, wenn Sie wissen möchten, wann Ausnahmen ausgelöst werden, ohne Haltepunkte zu setzen und den Debugger neu zu konfigurieren.


189
2017-09-13 18:48



1) In Visual Studio können Sie die Einstellungen für die Art und Weise ändern, in der der Debugger Ausnahmen behandelt (bricht).

Gehen Sie zu Debug> Ausnahmen. (Beachten Sie, dass dies abhängig von Ihrer Visual Studio-Umgebungseinstellung nicht in Ihrem Menü sein kann. Fügen Sie es nicht einfach über das Menü "Anpassen" zu Ihrem Menü hinzu.)

Dort sehen Sie einen Dialog der Ausnahmen und wann Sie sie unterbrechen können.

In der Zeile "Common Language Runtime Exceptions" können Sie die Option "Ausgelöst" abwählen (was Sie dann nicht mehr über Ausnahmen der ersten Chance belästigen sollte) und Sie können die Option "Nicht übergebene Benutzer" (was ich nicht empfehlen würde) abwählen.

2) Die Nachricht, die Sie bekommen, sollte nicht in der Konsole sein, sondern sollte im 'Output' Fenster von Visual Studio erscheinen. Wenn Letzteres der Fall ist, habe ich keine Möglichkeit gefunden, das zu entfernen, aber es erscheint nicht, wenn Sie die App ohne Visual Studio ausführen.

Ich hoffe, das hilft.


19
2017-09-12 06:06



Im Gegensatz zu Java sind .NET-Exceptions in Bezug auf die Verarbeitungsleistung ziemlich teuer, und behandelte Exceptions sollten im normalen und erfolgreichen Ausführungspfad vermieden werden.

Sie vermeiden nicht nur Unordnung im Konsolenfenster, sondern verbessern auch Ihre Performance und machen Leistungsindikatoren wie .NET CLR Exceptions aussagekräftiger.

In diesem Beispiel würden Sie verwenden

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

11
2017-09-12 06:32



Ich hatte dieses Problem und konnte nicht herausfinden, wo die Ausnahme ausgelöst wurde. Meine Lösung bestand also darin, Visual Studio zu veranlassen, die Ausführung dieser Art von Ausnahme zu beenden.

  1. Navigiere zu "Debug / Ausnahmen"
  2. Erweitern Sie den Baum "Common Language Runtime Exceptions".
  3. Erweitern Sie den Zweig "System".
  4. Scrollen Sie nach unten zu "NullReferenceException" und aktivieren Sie die Option "throw" -Kontrollkästchen und deaktivieren Sie das "user-handled".
  5. Debuggen Sie Ihr Projekt.

7
2017-10-26 11:32



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

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 wie in anderen Kommentaren erwähnt zum Schweigen bringen, stellen jedoch sicher, dass Sie sich dessen bewusst sind. Ich finde es gut zu sehen, wie viele ich wirklich werfe, wenn ich eine Nachricht und einen Zeitstempel in eine Textdatei schreibe.


4
2018-04-18 18:16



Eigentlich wenn Sie viele Ausnahmen pro Sekunde haben, würden Sie eine bessere Leistung erzielen, indem Sie reader.EndOfStream-Wert überprüfen. Das Drucken dieser Ausnahmemeldungen ist unglaublich langsam, und das Verstecken in Visual Studio wird nichts beschleunigen.


2
2018-05-09 21:49



in VB.NET:

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

-1
2017-08-07 21:23