分析.class文件

问题描述:

我想知道是否有方法可以获取对.class文件中某个特定方法的调用次数。分析.class文件

我搜索了一下,发现了像ASM和sonarqube这样的工具,但是我没有找到获取我需要的信息的方法。

谢谢

+1

你约达灵静态或动态的信息?你想知道'.class'本身提及的方法的频率,或者你想知道一个方法在执行时被调用了多少次? –

+1

您可以使用ASM访问代码并计算提及该方法的次数。如果您想在运行时了解这些信息,我建议使用面向方面的库来执行此操作。你可以像ASM一样(像这些库一样),但更高级的库会更容易。 –

+0

我正在尝试做静态分析。试图计算方法被提及的类的次数 – Nestor

字节代码注入

- >>>注射,你想监控的类中的计数的代码。

对于字节码注入,您可以使用ASM或JavaAssit。

http://java.dzone.com/articles/implementing-build-time

+0

非常感谢,但我认为我不会为我工作。 使用您的解决方案,我将看到在应用程序运行时调用该方法的次数,但我想进行静态分析。通过编译我的项目,我想了解一个方法被调用到类中的次数 – Nestor

You Problem Definition Right

解决方案: 尝试下面的代码,你会得到一个提示通过字节码遍历。如果仔细观察,您可以看到在代码中使用了多少次您的方法。为此你甚至可以使用Regex。

package com.cosmic.evaluate.asm; 
import java.io.FileInputStream; 
import java.io.PrintWriter; 
import org.objectweb.asm.ClassReader; 
import org.objectweb.asm.util.ASMifier; 
import org.objectweb.asm.util.TraceClassVisitor; 

public class TetsMain { 

public static void main(String[] args) throws Exception { 

String classPath =  "./target/classes/com/cosmic/evaluate/asm/TestClass.class"; 

    int flags = ClassReader.SKIP_DEBUG; 


    ClassReader cr; 

    if (classPath.endsWith(".class") || classPath.indexOf('\\') > -1 || classPath.indexOf('/') > -1) { 
     cr = new ClassReader(new FileInputStream(classPath)); 
    } else { 
     cr = new ClassReader(classPath); 
    } 

    cr.accept(new TraceClassVisitor(null, new ASMifier(), new PrintWriter(System.out)), flags); 

} 

} 

Maven的依赖二手 org.ow2.asm ASM-所有 5.0.3

链接 Tutorial for Regular Expression