自动exception处理

我想知道是否存在某些东西(在Java世界中)能够使用以下function拍摄JVM当前状态的快照:

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

需要两个第一个function(第三个function很棒)。 它必须适合生产使用(因此,没有办法调试器)。

在问这个问题之前,我已经搜索了WWW(尽可能长),并找到了一些指示:

  • Cajoon拦截器 :正如在Dzonepost中所说 ,它是一个被动JVM代理,满足三个要求! 但是,它有两个缺点:你必须支付它并且网站已关闭(可能没有机会支付任何费用)。
  • AviCode Intercept Studio :Cajoon的.NET等价物。 只是为了提供一些见解。
  • JavaFrame :好的,这是一条推文,但是它指向一个可用的SVN 仓库 ,它有一个JVM代理的源代码(在MIT许可下)看起来很好(我打算尝试一下)。

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

似乎很明显它将是一个JVM代理( 例如来自JVMTI的exception事件)。

最后,我将重点介绍维基百科的exception处理文章中的以下段落:

在Java或.NET等运行时引擎环境中,存在附加到运行时引擎的工具,每次发生感兴趣的exception时,它们都会记录抛出exception时存在于内存中的调试信息(调用堆栈和堆栈)值)。 这些工具称为自动exception处理或错误拦截工具,并为exception提供“根本原因”信息。

这就是主意。 我希望有人可以给我一些见解,或者将来,有人会受到这篇不起眼的post的启发:)

谢谢!

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

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

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

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

感谢大家!

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

  • VM代理如何工作
  • JVM选项

您可能希望了解NetBeans在自动使用日志记录方面所做的工作: http : //wiki.netbeans.org/UsageLoggingSpecification 。

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

也许可以用AspectJ完成?

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

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

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