我最近不得不为同事开发的现有服务开发一个额外的模块.他在主要工作函数中放置了一个try/catch块,用于捕获冒泡到这个级别的所有未处理异常,将它们与堆栈跟踪信息一起记录下来:
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,并弹出异常.