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

Debugging 使用来自对象引用的额外信息打印JVM堆栈跟踪,debugging,jvm,profiling,Debugging,Jvm,Profiling,我有一个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 ta

我有一个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)
....
堆栈跟踪所说的只是“我们处于代码的懒惰、一元部分”,这是无用的。然而,
FlatMapState
的一个字段是一个函数对象,因此如果我能找到
FlatMapState
的引用,我就可以打印出漂亮的增强堆栈跟踪,显示真正发生的情况。这将极大地帮助调试和分析

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

请注意,
StackTraceElement
只包含字符串,因此
getStackTrace()
没有帮助。其他人也问过类似的问题,但没有回答,比如。然而,我希望通过给出我为什么需要这些信息的更大的背景(分析),有人可能会有一个有用的想法来回避不可能的部分


我可以做的一件事是在一旁维护自己的堆栈,由FlatMapState对象酌情维护。不幸的是,我看不到任何简单的方法将其与正常堆栈关联(哪个自定义级别对应于哪个正常级别?),因此信息很难呈现和维护。

NetBeans的调试器有一个选项,可以在未捕获异常时中断,让您在抛出时检查堆栈(包括切换到较低的堆栈帧并检查其局部).我从未尝试将其用于Scala,尽管.JProfiler和IntelliJ也可以这样做,但我正在寻找程序化的东西。我希望看到整个堆栈跟踪的图片,以直观地了解正在发生的事情,因此,每个跟踪都需要几分钟的人的时间的解决方案已经问世。