77

次のコードは、EOS 例外をキャッチします。

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

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

では、コンソールでまだ初回例外が発生するのはなぜですか?

タイプ 'System.IO.EndOfStreamException' の初回例外が mscorlib.dll で発生しました

これらの最初のチャンスの例外メッセージを非表示にする方法はありますか?

4

9 に答える 9

190

メッセージが表示されないようにするには、出力ウィンドウを右クリックし、[例外メッセージ] のチェックを外します。

ただし、ブレークポイントを設定したりデバッガーを再構成したりせずに、いつ例外がスローされるかを知りたい場合は、それらが発生するのを確認するとよいでしょう。

于 2008-09-13T18:48:25.280 に答える
79

「最初のチャンス」の例外のポイントは、スローの時点でデバッグ中にそれらを停止できるように、それらを事前ハンドラーで確認できることです。「セカンドチャンス」例外は、適切なハンドラーを持たない例外です。誰かが例外をキャッチしたとしても、例外がスローされたときに何が起こっているかを確認することが重要であるため、「最初のチャンス」の例外をキャッチしたい場合があります。

心配することは何もありません。これは正常な動作です。

于 2008-09-12T05:56:34.847 に答える
20
  1. Visual Studio では、デバッガーが例外を処理 (中断) する方法の設定を変更できます。

    [デバッグ] > [例外] に移動します。(Visual Studio の環境設定によっては、メニューにない場合があります。そうでない場合は、[カスタマイズ] メニューを使用してメニューに追加してください。)

    そこには、例外のダイアログと、それらをいつ中断するかが表示されます。

    「Common Language Runtime Exceptions」の行で、throw の選択を解除できます (これにより、最初の例外について煩わされることはなくなります)。必要に応じて、User-unhandeled (これはお勧めしません) の選択を解除することもできます。

  2. 表示されるメッセージはコンソールには表示されませんが、Visual Studio の [出力] ウィンドウに表示されるはずです。後者の場合、それを削除する可能性は見つかりませんでしたが、Visual Studio なしでアプリを実行すると表示されません。

于 2008-09-12T06:06:14.260 に答える
11

Java とは異なり、.NET 例外は処理能力の点でかなり高価であり、処理された例外は通常の成功した実行パスでは避ける必要があります。

コンソール ウィンドウが乱雑になるのを防ぐだけでなく、パフォーマンスが向上し、.NET CLR 例外などのパフォーマンス カウンターがより意味のあるものになります。

この例では、使用します

while (reader.PeekChar() != -1)
{
    bodyByteList.Add(reader.ReadByte());
}
于 2008-09-12T06:32:37.210 に答える
7

私はこの問題を抱えていて、例外がどこにスローされたかを理解できませんでした。したがって、私の解決策は、VisualStudioがこの種の例外で実行を停止できるようにすることでした。

  1. 「デバッグ/例外」に移動します
  2. 「共通言語ランタイムの例外」ツリーを展開します。
  3. 「システム」ブランチを展開します。
  4. 「NullReferenceException」がある場所まで下にスクロールし、「throw」チェックボックスをオンにして、「user-handled」のチェックを外します。
  5. プロジェクトをデバッグします。
于 2012-10-26T11:32:55.293 に答える
4

これらのメッセージをさらに制御したい場合は、ハンドラーを追加できます。

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

これにより、他のコメントで述べたようにそれらを黙らせることができますが、それでもそれらを認識できるようになります. メッセージとタイムスタンプをテキスト ファイルに記録すると、実際にどれだけの数をスローしているかがわかります。

于 2014-04-18T18:16:17.170 に答える
2

実際、毎秒多くの例外が発生している場合は、reader.EndOfStream-value. をチェックすることでパフォーマンスを向上させる必要があります。これらの例外メッセージの出力は信じられないほど遅く、Visual Studio で非表示にしても速度は向上しません。

于 2010-05-09T21:49:50.337 に答える
-1

VB.NET で:

<DebuggerHidden()> _
Public Function Write(ByVal Text As String) As Boolean
   ...
于 2009-08-07T21:23:20.477 に答える
-4

ストリームがこの例外をスローしていると思うので、それをキャッチするために狭い範囲で試してみてください。

実際にスローされている場所でキャッチするまで、さまざまなスコープの周りにいくつかの try catch コンボを追加しますが、ストリーム オブジェクトは using のスコープで作成されていないため、using の外側で発生しているように見えます。

于 2008-09-12T05:50:17.637 に答える