【问题标题】:Automated Exception Handling自动异常处理
【发布时间】:2010-09-27 05:16:52
【问题描述】:

我想知道是否存在(在 Java 世界中)能够通过以下功能拍摄 JVM 当前状态的快照:

  • 在抛出异常时执行此操作。
  • 捕获局部变量、方法的参数等
  • 将它放在一个方便的文件中,该文件可用于在 IDE 中提取或重现源代码中的情况。

前两个功能是必需的(第三个会很棒)。而且它必须适合生产使用(因此,调试器没有办法)。

在问这个之前,我已经搜索了万维网(尽可能长),我发现了一些指针:

  • Cajoon Interceptor:正如Dzone post 中所说,它是一个满足三个要求的被动JVM 代理!但是,它有两个缺点:您必须为此付费,并且网站已关闭(可能没有机会支付任何费用)。
  • AviCode Intercept Studio:Cajoon 的 .NET 等价物。只是为了提供一些见解。
  • JavaFrame:好的,这是一条推文,但它指向一个可用的 SVN 存储库,其中包含看起来不错的 JVM 代理的源代码(在 MIT 许可下)(我将尝试一下)。李>

那么,也许我正在寻找一个不存在的解决方案?这并不紧急,但我有一个项目的想法,探索这条“未知”(?)路径并获得真实的东西会很棒。

似乎很清楚它将是一个 JVM 代理(来自 JVMTI 的异常事件,用于example)。

最后,我将突出显示Wikipedia's Exception Handling article 中的以下段落:

在运行时引擎环境中,例如 Java 或 .NET,有一些工具可以 附加到运行时引擎和每个 感兴趣的例外的时间 发生,他们记录调试 内存中存在的信息 抛出异常的时间 (调用堆栈和堆值)。这些 工具称为自动异常 处理或错误拦截工具 并提供“根本原因”信息 例外情况。

就是这样。我希望有人能给我一些见解,或者将来有人会从这篇不起眼的帖子中得到启发:)

谢谢!

【问题讨论】:

  • 我很想知道您是否找到了其他解决方案。

标签: java exception exception-handling jvm agent


【解决方案1】:

不确定这在生产环境中是否可行,但有 Omniscient 调试器:

如果您的调试器可以“及时倒退”怎么办?这会让调试更容易吗?通过简单地记录所有变量分配,基本上可以做到这一点。这是无所不知的调试的基本思想。令人惊奇的是,可以用这种方式调试非常大的程序——Ant、JUnit、调试器本身。

http://www.lambdacs.com/debugger/

【讨论】:

  • 我也找到了,但我认为它不是生产环境的合适解决方案,因为它似乎需要通过它执行您的程序。用 JBoss AS 想象一下……无论如何,谢谢 ;)
【解决方案2】:

您可能想了解 NetBeans 就自动使用日志所做的工作:http://wiki.netbeans.org/UsageLoggingSpecification

至于转储局部变量,我想您可以简单地使用调试器,例如 bajafresh4life 提到的那个。

【讨论】:

  • 谢谢,有办法在处理异常时调用调试器吗?目标是在发生异常的那一刻即时获取 JVM 状态的图像。通过这种方式,您将能够查看局部变量的值,以及静态类和方法的参数。
【解决方案3】:

也许可以用AspectJ 完成?

【讨论】:

  • 也许,但没有可用的局部变量转储,我猜,因为方面有自己的范围或上下文(也许我错了)。
【解决方案4】:

我看了一下JavaFrame,这似乎是一个很好的起点。只需安装 Apache Ant,在 javaframe 目录中执行 ant 并启动测试套件(在测试目录中):

LD_LIBRARY_PATH=../build/native/ java -agentlib:frameintrospect -classpath ../build/classes/:. org.thobe.frame.Test

它没有得到任何局部变量,但它会尝试。所以,正如我所说,这可以作为一个起点。我希望进一步了解它的用法,但是没有时间也没有文档(有很多名为 JavaFrame 的项目)是不好的情况。

也许有一天它可以再次完成。是的,再次。有 Cajoon,它看起来很有前途和闪亮,但它的网站已关闭,并且没有任何可下载的 jar 可供尝试。

谢谢大家!

PD.:仅供参考,我在研究时发现的一些链接:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 2011-09-01
    • 2011-06-11
    • 2015-07-01
    • 1970-01-01
    相关资源
    最近更新 更多