我想使用 JDI 对使用/用于 scala 2.12 编译的 ScalaCheck 进行检测。
通过运行,javap
我得出结论,scalac 2.12.x 发出调用动态指令(对于 x 的某些值),其中 scala 2.11 用于生成内部类,尤其是嵌套方法/函数。
这提出了一个挑战,因为出于性能原因,我想在某些特定的嵌套函数(特别是result(x: T)
in Prop.forAllShrink
)上设置和取消设置断点。
是否可以invokedynamic
使用 JDI 检测代码?如果是这样,怎么做?
我是新手invokedynamic
,不清楚该机制是如何工作的。我的理解是,您的代码(在我的示例中由 scalac 发出的代码)在每次invokedynamic
调用时都会做出链接决策,除了出于性能原因,此决策是根据用户可指定的标准进行缓存的。但是,不执行运行时代码生成。这表明原则上invokedynamic
代码应该是可检测的。
我还在一些 scalac 输出中看到了一个可怕的名字:deserializeLambda
. 我不太确定这意味着什么,但我认为这并不意味着我会过得很轻松。