编译的.class文件包含与整个java类相对应的字节码。但是,在执行期间,某些字节码会多次被执行,而某些字节码可能根本不执行,具体取决于逻辑和输入。有没有办法让我只能在java程序的生命周期中获得执行的那些字节码?
编辑:用例
我认为用例可能有所帮助。在程序的样本运行之后,我想计算执行的字节码指令的频率(例如,已经执行了10次)。是否有可用于此目的的分析器或任何其他工具?
答案 0 :(得分:1)
这篇不起眼的论文谈到了这样一个工具
http://ccsl.icmc.usp.br/files/vincenzi-et-al-2003.pdf
它已经很老了(2003)
它陈述
本文描述了一个用于Java程序和基于Java的组件的覆盖测试工具,名为JaBUTi (Java字节码理解和测试)。与其他需要的测试工具不同 Java源代码,用于执行程序分析,仪表和覆盖评估, 我们的工具只需要Java字节码。字节码可以被视为类似汇编的语言 保留关于程序的高级信息[Lindholm和Yellin,1999]。 因此,JaBUTi使用户能够测试Java程序和基于Java的组件,即使没有 源代码可用。还有其他测试工具在字节码级别工作。 例如,框架工作JUnit [Beck和Gamma,2002]可用于测试Java字节码,但是 它只能进行黑盒测试;它不会报告任何覆盖范围信息。 JTest [Corporation,2002]和GlassJAR [Edge,2002]提供了相关的覆盖信息 在字节码级别控制流测试标准,但它们都不支持数据流覆盖 测试标准。通过在字节码级别工作,我们希望提供可以使用的工具 不仅用于测试具有相应源代码的Java应用程序,还用于 只有字节码的那些,比如软件组件