【问题标题】:Being notified of caught exceptions in Eclipse / Java application在 Eclipse / Java 应用程序中被捕获的异常通知
【发布时间】:2012-01-09 07:01:24
【问题描述】:

有没有办法通知 Eclipse 应用程序中捕获的异常?

我知道,如果我使用 eclipse 调试器启动应用程序,我可以在捕获和未捕获的异常时暂停执行(请参阅 https://stackoverflow.com/a/3066280/228965)。我猜这个功能以某种方式使用了 JVMTI。

现在我有以下问题:

我有一个不是我写的 Eclipse 应用程序。我想监控这个应用程序。我编写了一些包来监控应用程序的不同方面(用户交互、工作台更改等)。我使用 bundles.info 文件沿着应用程序启动这些包。现在,每当发生异常时,我都需要得到通知。我在错误日志中添加了一个侦听器,这样我就会收到未捕获异常的通知。但是,我还希望能够收到有关“任何”异常的通知,即使是那些已被原始开发人员捕获的异常。

有没有办法做到这一点?

【问题讨论】:

  • 会在 Eclipse 的调试器中运行该应用程序,还是需要一种方法来自动记录程序内的所有异常?
  • 使用 AOP 查找所有抛出并添加一个 before 记录的建议。不是 Eclipse 特定的。
  • 我没有程序的源代码。这是一个日食应用程序。我在它的 OSGi 运行时中启动我的包,并希望在不同的事件时得到通知,例如抛出异常。

标签: java eclipse


【解决方案1】:

您可以调查应用程序的记录器。如果它使用 log4j,您可以创建一个特定于异常的附加程序并使用它们。

【讨论】:

    【解决方案2】:

    java.lang.Exception(或者甚至Throwable,具体取决于您要查找的内容)的构造函数添加一个断点。

    所有异常,即使是自定义异常,都必须从其中之一扩展,因此您可以在创建每个异常时找到它 - 然后甚至跟踪它以查看它在哪里被捕获和处理(如果有的话)。

    使用 AOP 也可能是一个不错的选择,但这种方法不需要对现有代码(源代码或字节码)进行任何修改。

    【讨论】:

    • 我没有在 Eclipse 中或在调试模式下运行程序。我已经给出了一个 Eclipse 应用程序,并且我在该应用程序的 OSGi 运行时中启动了我自己的包。没有调试和断点。
    • 有没有可能在调试模式下运行它? (你不需要 Eclipse。)如果你不能这样做,那么你很想修改代码——在这种情况下,我建议使用 AOP 方法。
    【解决方案3】:

    从 JDK 1.5 开始,您可以使用 Thread.setDefaultUncaughtExceptionHandler() 来实现此目的。

    【讨论】:

    • 来自问题:“但我也希望能够收到有关“任何”异常的通知,即使是那些已被原始开发人员捕获的异常。您的解决方案只处理未捕获的异常。
    猜你喜欢
    • 2014-03-22
    • 2014-04-23
    • 2011-10-13
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 2015-08-08
    相关资源
    最近更新 更多