首页 > 解决方案 > 对 Scala 函数中的每条语句进行计数的仪器

问题描述

我有一个简单的Scala函数,我想在每次执行语句时增加一个类变量。

    class C {
        var cnt: Int: 0

        def fun(): Unit = {
             var a: Int = 0
             var b: Int = -10
             var sum: Int = 0
             sum = a + b
             return sum
        }
    }

我希望函数是这样的:

    class C {
        var cnt: Int: 0

        def fun(): Unit = {
             var a: Int = 0
             cnt = cnt + 1
             var b: Int = -10
             cnt = cnt + 1
             var sum: Int = 0
             cnt = cnt + 1
             sum = a + b
             cnt = cnt + 1
             return sum
        }
    }

但是在软件级别这样做会使代码变得混乱。我可以使用字节码操作来实现这一点,还是应该干预其他级别的编译?

标签: scalainstrumentationbytecode-manipulationbyteman

解决方案


我不确定是谁在这个问题中添加了标签 Byteman,但 Byteman 无法帮助您解决这个问题。正如之前的海报所说,这并不是一个可以使用字节码操作来解决的问题。字节码与源代码行和源语句边界有一个相当不透明的链接,并且通常不可能从字节码中编码的指令派生出任何一种类型的边界。

基于语言解析器的源到源翻译器将是一个更好的选择。


推荐阅读