以下代码捕获EOS异常
using (var reader = new BinaryReader(httpRequestBodyStream)) {
try {
while (true) {
bodyByteList.Add(reader.ReadByte());
}
} catch (EndOfStreamException) { }
}
那么为什么我的控制台仍然会收到第一次机会异常?
mscorlib.dll中出现'System.IO.EndOfStreamException'类型的第一次机会异常
有没有办法隐藏这些第一次机会异常消息?
9 回答
“第一次机会”异常的要点是你看到它们是预处理程序,这样你就可以在抛出时调试它们 . “第二次机会”异常是没有适当处理程序的异常 . 有时候你想要 grab “第一次偶然”的例外情况,因为重要的是要看看当它被抛出时发生了什么,即使有人正在捕捉它 .
没有什么可担心的 . 这是正常行为 .
要避免看到消息,请右键单击输出窗口并取消选中“异常消息” .
但是,如果您想知道何时抛出异常而不设置断点并重新配置调试器,那么看到它们发生可能会很好 .
1)在Visual Studio中,您可以更改调试器处理(中断)异常的方式的设置 .
转到“调试”>“例外” . (请注意,这可能不在您的菜单中,具体取决于您的Visual Studio环境设置 . 如果不是仅使用“自定义”菜单将其添加到菜单中 . )
在那里,您将看到一个例外对话框以及何时打破它们 .
在“公共语言运行时异常”行中,您可以取消选择抛出(这应该会让您不必担心第一次机会异常),如果您愿意,也可以取消选择User-unhandeled(我不建议) .
2)您获得的消息不应该在控制台中,而应该出现在Visual Studio的“输出”窗口中 . 如果是后一种情况,那么我没有找到删除它的可能性,但是如果你在没有Visual Studio的情况下运行应用程序就不会出现 .
希望有所帮助 .
与Java不同,.NET处理能力方面的异常相当昂贵,在正常和成功的执行路径中应避免处理异常 .
您不仅可以避免在控制台窗口中出现混乱,而且还可以提高性能,并且可以使.NET CLR Exceptions等性能计数器更有意义 .
在这个例子中你会使用
我有这个问题,无法弄清楚抛出异常的位置 . 所以我的解决方案是让Visual Studio停止在这种异常上执行 .
导航至"Debug/Exceptions"
展开"Common Language Runtime Exceptions"树 .
展开"System"分支 .
向下滚动到"NullReferenceException"所在的位置,然后选中"throw"复选框,并取消选中"user-handled" .
调试您的项目 .
如果您想要更多地控制这些消息,可以添加处理程序:
这可以让你像其他评论中提到的那样使它们静音,但仍然可以确保你能够意识到它们 . 如果我将消息和时间戳记录到文本文件中,我发现很高兴看到我真正投掷了多少 .
实际上,如果每秒有很多异常,你可以通过检查reader.EndOfStream-value来实现更好的性能 . 打印出那些异常消息的速度令人难以置信,将它们隐藏在visual studio中并不会加快速度 .
在VB.NET中:
我认为流正在抛出这个异常,所以你的尝试范围缩小以捕获它 .
在不同的范围周围添加一些try catch组合,直到你 grab 它实际被抛出的位置,但它似乎发生在你的使用之外,因为stream对象不是在using的范围内创建的 .