如何找到被“忽略”的异常?
Posted
技术标签:
【中文标题】如何找到被“忽略”的异常?【英文标题】:How to find exceptions that were "ignored"? 【发布时间】:2011-09-12 09:57:03 【问题描述】:无需在 throws 子句中声明检查异常或在 scala 的 try/catch 块中处理它们是我喜欢的功能。但是当必须处理异常但被忽略时,这可能是一个问题。我正在寻找工具(可能是编译器标志/插件)来查找忽略检查异常的方法。
【问题讨论】:
有一个关于 scala 辩论邮件列表的讨论,Martin Odersky 说:groups.google.com/group/scala-debate/msg/99369ca6c4959894 【参考方案1】:一种选择是在应用程序的非常高级别捕获异常(顶部是main
-方法)。
另一种选择是使用UncaughtExceptionHandler
(如果您在 JVM 上):
object MyUncaughtExceptionHandler extends Thread.UncaughtExceptionHandler
def uncaughtException(thread: Thread, throwable: Throwable)
println("Something bad happened!")
val t = new Thread(new Runnable
override def run()
null.toString
);
t.setUncaughtExceptionHandler(MyUncaughtExceptionHandler)
t.start()
【讨论】:
似乎操作正在寻找静态检查,而您提出了两种运行时方法。 @ziggystar 没错,在生产中等待不好的事情发生不是一种选择。【参考方案2】:AFAIK,没有这样的工具,但是我成功使用的一种技术是简单地在您的 IDE(IntelliJ 或 Eclipse)中为 java.lang.Throwable 安装一个 at-throw-point 断点,这将暂停执行每个 java 异常(或错误)在程序运行时的抛出点,然后继续点击“播放”以查看它们(至少在您感兴趣的执行路径上)
干杯...
【讨论】:
以上是关于如何找到被“忽略”的异常?的主要内容,如果未能解决你的问题,请参考以下文章