使用来自对象引用的额外信息打印JVM堆栈跟踪

时间:2015-02-06 03:03:30

标签: debugging jvm profiling

我有一个带有惰性monadic控制流的Java + Scala应用程序。因此,堆栈跟踪一个调试器或分析器的外观如下所示:

....
at tarski.JavaScores$FlatMapState.extract(JavaScores.java:175)
at tarski.JavaScores$Extractor.force(JavaScores.java:117)
at tarski.JavaScores$FlatMapState.extract(JavaScores.java:152)
at tarski.JavaScores$Extractor.force(JavaScores.java:117)
at tarski.JavaScores$LazyPlus.force(JavaScores.java:486)
at tarski.JavaScores$FlatMapState.extract(JavaScores.java:152)
at tarski.JavaScores$Extractor.force(JavaScores.java:117)
....

所有堆栈跟踪都是"我们处于代码"的懒惰,monadic部分,这是无用的。但是,FlatMapState的一个字段是一个函数对象,所以如果我可以得到FlatMapState的引用,我可以打印出好的增强堆栈跟踪,显示真正发生的事情。这将有助于调试和分析。

主要问题:有没有办法获得堆栈跟踪中对象的引用,必要时通过编程方式与调试器交互或进行其他环境欺骗?

请注意,StackTraceElement仅包含字符串,因此getStackTrace()无效。其他人在没有答案的情况下提出类似问题,例如Get objects involved in Java stacktrace。但是,我希望通过给出更大的上下文来解释我为什么需要这些信息(分析),有人可能会有一个有用的想法,躲避不可能的部分。

我能做的一件事就是维护我自己的堆栈,由FlatMapState对象维护。不幸的是,我没有看到任何简单的方法将它与普通堆栈相关联(自定义级别对应于哪个正常级别?),因此信息很难呈现和维护。

0 个答案:

没有答案