如何获取Java程序在运行时执行的字节码?

时间:2014-02-06 01:21:28

标签: java debugging bytecode

编译的.class文件包含与整个java类相对应的字节码。但是,在执行期间,某些字节码会多次被执行,而某些字节码可能根本不执行,具体取决于逻辑和输入。有没有办法让我只能在java程序的生命周期中获得执行的那些字节码?

编辑:用例

我认为用例可能有所帮助。在程序的样本运行之后,我想计算执行的字节码指令的频率(例如,已经执行了10次)。是否有可用于此目的的分析器或任何其他工具?

1 个答案:

答案 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应用程序,还用于   只有字节码的那些,比如软件组件