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

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

  1. java方法名的重载

    方法的重载:方法名相同,参数不同,按照参数类型进行匹配 创建一个Simple 类,然后定义了两个方法 package cuteSnow; public class Simple { // 方法的重载, ...

  2. java方法里面生成js弹出框

    核心代码:方法参数要有response response.setContextType("text/html;charset=UTF-8"); PrintWrite out = r ...

  3. Android C代码回调java方法

    本文将讲述下列三种C代码回调java方法 1.c代码回调java空方法 2.c代码回调java int类型参数方法 3.c代码回调javaString类型参数方法 方法都差不多,先看c代码回调java ...

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

    今天,看朋友编写程序,打印日志时,需要记录当前类的类名以及当前方法的方法名,我发现 TA 将类名或者方法名直接写死在了代码中...虽说这样可以实现记录类名和方法名,但是当有特殊情况需要修改类名或者方法 ...

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

    上文讲述了如何获取类名和方法名,敬请参阅: Java学习-024-获取当前类名或方法名二三文 . 通常在应用开发中,调试或查看是哪个文件中的方法调用了当前文件的此方法,因而在实际的应用中需要获取相应的 ...

  6. Monkey 生成报告方法

    Monkey 命令简介 Monkey 是 SDK 中附带的一个小工具,用来进行压力测试.进行压力测试之前,首先要进行安装 SDK ,并配置环境变量: 1.安装 Java JDK 并配置环境变量(计算机 ...

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

    前文讲述了类名或方法的应用之一调试源码,具体请参阅:Java学习-025-类名或方法名应用之一 -- 调试源码 此文主要讲述类名或方法应用之二统计分析,通过在各个方法中插桩(调用桩方法),获取方法的调 ...

  8. java中由类名和方法名字符串实现其调用【反射机制】

    js里通过eval()函数,在知道某个方法名是可以实现调用该方法,那么在java里边又怎么实现的呢? java里边是通过反射机制来实现,代码如下: import java.lang.reflect.M ...

  9. java反射拼接方法名动态执行方法

    近期由于负责项目的一个模块,该模块下有很多分类,每个分类都有一个编码code,这个值是作为一个参数携带过来的.但是每个code确实对应一个方法的. code的值有很多个,自己又不想做ifelse或者s ...

随机推荐

  1. 【Java例题】7.6文件题3-文本文件统计

    6.文本文件统计.已有一个文本文件文件,请统计数字.大写字母.小写字母.汉字及其它字符出现的次数:然后将这些次数由大到小写到另一个文件之中.说明:将次数为零的过滤掉排序 package chapter ...

  2. 保存localStorage并访问

    将用户的输入保存至localStorage对象的属性中,这些属性在再次访问时还会继续保持在原位置. 如果你在浏览器中按照fil://URL的方式直接打开本地文件,则文法在某些浏览器中使用存储功能(比如 ...

  3. CSS:抗锯齿 font-smoothing

    本文引自:http://www.cnblogs.com/sunshq/p/4595673.html -webkit-font-smoothing 这个属性可以使页面上的字体抗锯齿,使用后字体看起来会更 ...

  4. 跟着大彬读源码 - Redis 10 - 对象编码之整数集合

    [TOC] 整数集合是 Redis 集合键的底层实现之一.当一个集合只包含整数值元素,并且元素数量不多时,Redis 就会使用整数集合作为集合键的底层实现. 1 整数集合的实现 整数集合是 Redis ...

  5. SonarQube系列二、分析dotnet core/C#代码

    [前言] 本系列主要讲述sonarqube的安装部署以及如何集成jenkins自动化分析.netcore项目.目录如下: SonarQube系列一.Linux安装与部署 SonarQube系列二.分析 ...

  6. myeclipse源码相关操作

    做web开发经常要看别人的jar里的源码才能搞懂别人的想法,但是源码有的时候需要单独下载很麻烦,甚至有的新的jar根本就是没有源码的,那么我们能不能自己制作源码呢. 从jar中提取源码 说白了,提取源 ...

  7. sql存储过程中循环批量插入

    前几天有一个需求很头痛,部门是有上下级关系的,在给部门的经理赋予角色和权限的时候,通常我们都会认为假如经理A的部门是1,那么我给了他部门1 的管理权限,那么1的下级部门101,102,103 &quo ...

  8. django报错信息解决方法

    You have 17 unapplied migration(s). Your project may not work properly until you apply the migration ...

  9. ABP 配置全局数据过滤器

    ABP官方数据过滤的地址:https://aspnetboilerplate.com/Pages/Documents/Data-Filters 中文可以看这个:https://aspnetboiler ...

  10. linux后台运行的几种方式

    1.nohup将程序以忽略挂起信号的方式运行起来 补充说明nohup命令 可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端.无论是否将 nohup 命令的输出重定向到终端 ...