10

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

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

我尝试了“步骤过滤”,但是(我认为)因为自定义未捕获的异常不在堆栈跟踪中,所以它没有从调试器中过滤掉。这是我第一次尝试 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 有“正确”的答案,因为这应该被推回图书馆的创建者来解决。有时技术解决方案不是正确的解决方案。

4

6 回答 6

13

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

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

  1. 为要暂停的异常(以及可能的子类)指定断点。这是通过单击“添加 Java 异常断点”来完成的。一个由 J 和感叹号组成的图标。
  2. 右键单击断点并选择“断点属性”
  3. 转到“过滤”
  4. 指定要忽略的类或包。这会将它们添加到列表中。请务必取消选中它们以说明它是专有的(不要停在指定位置)

我倾向于使用它,以便我可以将 NullPointerExceptions 指定为一般异常断点,但忽略来自第三方库的包。

于 2011-09-02T11:38:39.937 回答
2

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

于 2011-03-01T18:48:30.927 回答
1

你试过这个吗?

转到窗口->首选项->Java->调试

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

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

于 2011-03-01T19:00:34.317 回答
1

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

于 2011-03-01T19:19:46.420 回答
0

你听起来像你需要一个简单的尝试,抓住。

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

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

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

于 2013-05-18T19:02:22.937 回答
0

有助于杰夫的回答:

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

于 2019-11-14T15:53:29.887 回答