如何在Eclipse中忽略特定类型的未捕获异常?

时间:2011-03-01 18:45:07

标签: java eclipse uncaught-exception

我在Java应用程序中使用第三方库。此第三方库在每次应用程序启动时都会引发自定义未捕获的异常。该例外是无害的,仅用于内部第三方库的日志记录。由于未捕获此异常,因此每次启动应用程序时都会导致Eclipse IDE切换到调试透视图并挂起线程执行,以通知我该问题。我必须手动告诉Eclipse忽略这一点,并且每次都要恢复调试。这非常烦人。我无法更改第三方库以解决此问题。

有没有办法告诉Eclipse IDE忽略特定类型的未捕获异常?

我尝试了“Step Filtering”但是(我认为)因为自定义未捕获的异常不在堆栈跟踪中,所以它不会从调试器中过滤掉。这是我第一次涉足Step Filtering,所以我可能会错误地使用它。这是一个示例堆栈跟踪。

Daemon Thread [Thread-13] (Suspended (exception CustomThirdPartyException)) 
    ThreadPoolExecutor$Worker.run() line: not available [local variables unavailable]   
    Thread.run() line: not available

编辑:

jluzwick在禁用Eclipse中所有未捕获的异常后,使用我们自己的记录器来监视未捕获的异常的工作在技术上可行,但它并不理想,如果我们的记录器坏了,我们可能会错过任何东西。

mazaneicha的解决方案似乎在正确的轨道上,但我无法让它按照我想要的方式工作。这可能是由于我的用户错误。

jluzwick和mazaneicha都有可能解决这个问题,但Konstantin Komissarchik有“正确”的答案,因为这应该被推回到图书馆的创作者来修复。有时技术解决方案不是正确的解决方案。

6 个答案:

答案 0 :(得分:12)

一个旧线程,但我想我会添加一点。

至少在Eclipse Indigo中:在Debug Perspective-> Breakpoints视图中:

  1. 为要暂停的Exceptions(以及可能的子类)指定断点。这可以通过单击“添加Java异常断点”来完成。一个J和感叹号的图标。
  2. 右键单击断点并选择“断点属性”
  3. 转到“过滤”
  4. 指定要忽略的类或包。这会将它们添加到列表中。请务必取消选中它们以表明它是独占的(不要在指定位置停止)
  5. 我倾向于使用它,以便我可以将NullPointerExceptions指定为一般异常断点,但忽略来自第三方库的包。

答案 1 :(得分:2)

我建议尝试在代码中解决此问题。在代码中找到初始化此库的位置并捕获此异常,而不是让它在堆栈中向上传播,这不被视为“正常”行为。

答案 2 :(得分:1)

你试过这个吗?

转到Window-> Preferences-> Java-> Debug

在“暂停执行”下,取消选中“暂停执行未捕获的异常”

我不确定是否有办法禁用特定的异常,但我可能错了。可能有一个插件可以做到这一点。

答案 3 :(得分:1)

在Debug透视图,Breakpoints视图中,单击Java Exception Breakpoints(带有小写字母J和感叹号的图标,J!)。在出现的Add Java Exception Breakpoint窗口中,您可以找到恼人的异常并取消选中“Suspend on Uncaught Exception”框。

答案 4 :(得分:0)

听起来你需要一个简单的尝试,赶上。

 MyException e = new MyException;
 try {
       throw new e;
 } catch (MyException e) {
       e.printStackTrace();
 } 

这将允许抛出异常,但会忽略并让程序继续。如果您希望将其记录到文件中,请使用'PrintWriter.println(e.printStackTrace());'

我希望你得到你需要的东西,并且编码愉快!

答案 5 :(得分:0)

有助于Jeff的回答:

在“调试”透视图中,右键单击挂起的线程,然后选择“排除异常位置”。这样,Eclipse将线程挂起的类添加到未捕获的异常的过滤列表中。

相关问题