我最近不得不为一位同事开发的现有服务开发一个额外的模块。他放在try/catch块中的主要工作职能用来捕获冒泡到这个级别的所有unhadled例外,带有堆栈跟踪信息等一起记录他们:如何实现顶级异常处理?
try
{
// do main work
}
catch(Exception ex)
{
// log exception info
}
尽管这使得程序非常稳定(如在'不太可能崩溃'),我讨厌它,因为当我测试我的代码时,我没有看到由它造成的异常。当然,我可以查看异常日志并查看是否有新条目,但是我非常希望在抛出异常时获得直接反馈(请将代码中的光标放在代码的右侧)。
至少在我还在编码和测试的时候,我删除了这个顶级的try/catch。但是现在我的任务已经完成了,我必须决定是否将它放回发布版本,否则。 我认为我应该这样做,因为它使服务更稳定,而且它的全部要点是它在后台运行而不需要任何监督。另一方面,我已经读过,应该只是调用特定的例外(如IoException
),而不是一般的Exception
。
你对这个问题的建议是什么?
顺便说一下,该项目是用C#编写的,但我也对非.NET语言的答案感兴趣。
另请参见 http://stackoverflow.com/questions/576532/is-dying-is-awesome-preferred – Brian 2009-03-05 21:51:38