1

我想使用 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. 我不太确定这意味着什么,但我认为这并不意味着我会过得很轻松。

4

0 回答 0