我最近不得不为同事开发的现有服务开发一个附加模块。他在主工作函数中放置了一个 try/catch block ,用于捕获所有冒泡到此级别的未处理异常,并将它们与堆栈跟踪信息等一起记录:
try
{
// do main work
}
catch(Exception ex)
{
// log exception info
}
虽然这使程序非常稳定(如“不太可能崩溃”),但我讨厌它,因为当我测试我的代码时,我看不到由它引起的异常。当然,我可以查看异常日志,看看是否有新条目,但我更喜欢在异常被抛出的那一刻得到直接反馈(请将光标放在代码的右侧)。
至少在我还在编码和测试的时候,我删除了这个顶级的 try/catch。但现在我的任务完成了,我必须决定是否将其放回发布。
我认为我应该这样做,因为它使服务更稳定,而且它的全部意义在于它在后台运行,不需要任何监督。另一方面,我读到应该只调用特定的异常(如
IoException
),而不是一般的 Exception
.你对这个问题有什么建议?
顺便说一句,该项目是用 C# 编写的,但我也对非 .NET 语言的答案感兴趣。
最佳答案
放回去。
异常应该只在测试时相关。否则,将其弹出给用户是没有意义的。
记录很好。
您还可以使用 Visual Studio 为调试构建定义的 DEBUG 符号作为标志。
...
} catch( Exception e ) {
#if DEBUG
throw;
#else
log as usual
#endif
}
因此,下次需要修改时,应将调试标志设置为 true,然后会弹出异常。
关于exception-handling - 如何实现顶级异常处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/616759/