exception-handling - 如何实现顶级异常处理?

标签 exception-handling

我最近不得不为同事开发的现有服务开发一个附加模块。他在主工作函数中放置了一个 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/

相关文章:

java - Java : Find Inappropriate Exception Handling 的 Coverity 静态分析

python - Pyramid catch-all 友好的异常处理

java - 异常处理反模式 : Why log and return null is an anti-pattern

c# - 捕获当前线程中的所有异常

java - 为什么我不能在 Hibernate/Struts 中访问新创建的记录?

php - 如何在 tymondesigns/jwt-auth 包生成的 laravel 5 中捕获全局异常?

java - 使用 aspectJ 在 spring 中记录异常?

PHP 可搜索迭代器 : catch OutOfBoundsException or check valid() method?

java - Objects.requireNonNull(T obj) 而不是 null 检查并手动抛出 IllegalArgumentException?

c++ - 在现代 C++ 中应该如何使用异常?