基于soot的java方法名生成报告

0.生成XML格式文件

笔者使用soot将java文件解析生成xml格式文档,具体操作流程不再赘述。本文讨论执行结果的用途。笔者第一次采用的java文件如下:文件名为test.java

用soot解析后,生成如下所示的XML文件:

   1.用xsl样式表链接XML文档

大家很容易看到上文是一个常见的xml文件,然后我使用Altova XMLSpy工具,编写XML文件对应的XSL文件,把 XSL 样式表链接到 XML 文档。即可生成如下所示的方法名列表,文件以HTML格式的方式预览:

 

 

2.第二组实例测试

笔者紧接着按这种方法测试另外一个java文件,与上个不同的是,这个java文件中有三个类

接下来将该java文件转化成xml文件时,笔者意外的发现生成的xml文件不是一个而是三个:

接下来笔者随意挑选一个XML文件提取方法名,以第一个mycode.forst.xml为例,结果如下:

可以看到这几组方法都归属于同一类即mycode.first

而第二个XML文件也是这样:

   3.0总结

从上面两个例子可以看到soot在解析java文件时,是将整个java文件分成类来分别解析的。每个类文件中再解析方法。由于笔者的知识所限和XML文件的局限型,方法之间的关系很难通过xml文件解析出来。但是,经过自己的查询和尝试,特总结出以下几点对自己工作不足之处的解决办法。

  3.1总结

  java是由类封装而成的,类与类之间的关系,在以上实例中,没有很好地反映类与类之间的关系,而将类之间的依赖关系转化出来的一个好的办法就是UML图。如下:

3.2总结

在上面的实例中,使用soot将java源码转化成XML文件不能很好地反应类中各个内部的调用情况,解决这个问题的一个方法是:采用soot生成CFGs即控制流图。以上文的test.java为例,使用soot.jar将文件解析成控制流图,如下所示,这样就很好地反映出函数类部的调用路径:

3.3总结

下一步工作和方向:

在以上成果的基础上,笔者会进一步丰富自己的用例。然后找到java类中各个方法之间的关系。思路就不再赘述了。

如果图片不清晰的话大家可以下载PDF格式的:

链接: https://pan.baidu.com/s/1mhXUCac 密码: sq27

时间: 2024-07-30 13:44:34

基于soot的java方法名生成报告的相关文章

java方法里面生成js弹出框

核心代码:方法参数要有response response.setContextType("text/html;charset=UTF-8"); PrintWrite out = response.getWrite(); out.write("<script type='text/javascript'>alert('这是一个弹出框!');window.close();</script>"); out.flush(); out.close();

Android C代码回调java方法

本文将讲述下列三种C代码回调java方法 1.c代码回调java空方法 2.c代码回调java int类型参数方法 3.c代码回调javaString类型参数方法 方法都差不多,先看c代码回调java空方法,其他两种类似: ① 找到字节码对象 //jclass (*FindClass)(JNIEnv*, const char*); //第二个参数 要回调的java方法所在的类的路径 "com/itheima/callbackjava/JNI" ② 通过字节码对象找到方法对象 //jme

Java学习-024-获取当前类名或方法名二三文

今天,看朋友编写程序,打印日志时,需要记录当前类的类名以及当前方法的方法名,我发现 TA 将类名或者方法名直接写死在了代码中...虽说这样可以实现记录类名和方法名,但是当有特殊情况需要修改类名或者方法名时,源码中涉及类名或者方法名的地方必须同步变更,若修改的地方比较多,难免可能发生有遗漏的地方,那么后续通过日志查看分析原因时,就会找不到相应的地方,导致无法分析,查找原因. 为何要获取类名? 调试源码 记录日志 生成报告 统计分析,对调用比例占比大的方法,增强单元测试 构建系统调用关系链,对主要关

Java学习-025-类名或方法名应用之一 -- 调试源码

上文讲述了如何获取类名和方法名,敬请参阅: Java学习-024-获取当前类名或方法名二三文 . 通常在应用开发中,调试或查看是哪个文件中的方法调用了当前文件的此方法,因而在实际的应用中需要获取相应的包名.类名.方法名.行数,从而快速定位,及统计方法被调用的次数,生成类方法关系链. 相信爱钻研的小主们,通过上篇文章,已经懂得了,如何获取主调方法.从调方法.那我直接上码了,敬请各位小主参阅,若有不足之处,敬请各位大神指正,不胜感激! GetClassMethodName.java 源码内容如下所示

Java学习-025-类名或方法名应用之二 -- 统计分析基础

前文讲述了类名或方法的应用之一调试源码,具体请参阅:Java学习-025-类名或方法名应用之一 -- 调试源码 此文主要讲述类名或方法应用之二统计分析,通过在各个方法中插桩(调用桩方法),获取方法的调用关系.通过调用关系,我们可以统计出被调用次数比较多的方法,同时也可以构建全系统调用关系链:通过操作重要业务流程,可以统计组成重要业务流程的主要方法,加强相应的单元测试.功能.安全.性能等方面的测试.对于软件产品质量控制存在非凡的意义. 下面构建的演示示例调用关系如下所示: GetClassMeth

Java中获取文件名、类名、方法名、行号的方法

??在C语言中,可以通过宏FILE.LINE来获取文件名和行号,在Java语言中,则可以通过StackTraceElement类来获取文件名.类名.方法名.行号,具体代码如下: public static int getLineNumber( ){ StackTraceElement[] stackTrace = new Throwable().getStackTrace(); return stackTrace[1].getLineNumber( ); } public static Stri

java反射机制,通过类名获取对象,通过方法名和参数调

try {//得到对象Class c = Class.forName("完整类名");Object yourObj = c.newInstance();//得到方法Method methlist[] = cls.getDeclaredMethods();for (int i = 0; i < methlist.length; i++) {Method m = methlist[i];}//获取到方法对象,假设方法的参数是一个int,method名为setAgeMethod sAg

代码声明的JNI方法自动生成成在Eclipse里利用javah把java

阿萨德法国染色阿城v In Eclipse, open Run | External Tools | External Tools Configurations- Name: MyProject javah Location: ${system_path:javah} Working Directory: ${project_loc}/jni Arguments: -classpath "${project_classpath}; ${env_var:ANDROID_SDK_HOME}/plat

9-Unittest+HTMLTestRunner不能生成报告解决方法

1.问题现象 在使用HTMLTestRunner生成测试报告时,出现程序运行不报错,但不能生成报告的情况. 刚开始找了很久没发现问题,后来加上打印信息,发现根本没执行生成报告这部分代码.最后网上找到原因:pycharm 在运行测试用例的时候 默认是以unittest 框架来运行的,所以不能生成测试报告. if __name__ == '__main__': print '开始执行main' # 创建文件,用来存放测试报告 filepath = '..\htmlreport\htmlreport.