CN111008022B - 关系图生成方法、装置、计算机设备和存储介质 - Google Patents

关系图生成方法、装置、计算机设备和存储介质 Download PDF

Info

Publication number
CN111008022B
CN111008022B CN201911224310.0A CN201911224310A CN111008022B CN 111008022 B CN111008022 B CN 111008022B CN 201911224310 A CN201911224310 A CN 201911224310A CN 111008022 B CN111008022 B CN 111008022B
Authority
CN
China
Prior art keywords
byte code
target
code file
implementation method
relation
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201911224310.0A
Other languages
English (en)
Other versions
CN111008022A (zh
Inventor
牟文尧
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang Dasou Vehicle Software Technology Co Ltd
Original Assignee
Zhejiang Dasou Vehicle Software Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhejiang Dasou Vehicle Software Technology Co Ltd filed Critical Zhejiang Dasou Vehicle Software Technology Co Ltd
Priority to CN201911224310.0A priority Critical patent/CN111008022B/zh
Publication of CN111008022A publication Critical patent/CN111008022A/zh
Application granted granted Critical
Publication of CN111008022B publication Critical patent/CN111008022B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请涉及一种关系图生成方法、装置、计算机设备和存储介质。所述方法包括:获取待分析项目的字节码文件集合,字节码文件集合包括至少一个字节码文件;对字节码文件集合进行过滤得到目标字节码文件集合;对目标字节码文件集合中的字节码文件进行分析得到目标对象,对目标对象的继承关系进行分析得到继承关系集合;根据继承关系集合获取目标对象的实现类;对实现类对应的字节码文件进行解析得到目标实现方法集合;对目标实现方法集合进行分析得到目标实现方法集合中目标实现方法的调用关系;根据目标实现方法和调用关系生成方法调用关系图,对方法调用关系图进行展示。采用本方法能够提高用户的查看效率。

Description

关系图生成方法、装置、计算机设备和存储介质
技术领域
本申请涉及计算机技术领域,特别是涉及一种关系图生成方法、装置、计算机设备和存储介质。
背景技术
随着计算机技术的发展,软件系统的规模和复杂度不断提高。对于软件开发人员,基于开发需求,需要快速了解系统的结构和代码的组织逻辑。
目前,使用IntelliJ IDEA(Java编程语言开发的集成环境)工具可以查看Java代码中的方法调用图。但是使用IntelliJ IDEA只能查看Java代码中所有方法的调用关系图,开发人员还需要在复杂的调用关系图中查找需要的方法和对应的调用关系,从而导致查看效率低下。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高查看效率的关系图生成方法、装置、计算机设备和存储介质。
一种关系图生成方法,该方法包括:
获取待分析项目的字节码文件集合,字节码文件集合包括至少一个字节码文件;
对字节码文件集合进行过滤得到目标字节码文件集合;
对目标字节码文件集合中的字节码文件进行分析得到目标对象,对目标对象的继承关系进行分析得到继承关系集合;
根据继承关系集合获取目标对象的实现类;
对实现类对应的字节码文件进行解析得到目标实现方法集合;
对目标实现方法集合进行分析得到目标实现方法集合中目标实现方法的调用关系;
根据目标实现方法和调用关系生成方法调用关系图,对方法调用关系图进行展示。
一种关系图生成装置,该装置包括:
字节码文件集合获取模块,用于获取待分析项目的字节码文件集合,字节码文件集合包括至少一个字节码文件;
过滤模块,用于对字节码文件集合进行过滤得到目标字节码文件集合;
继承关系分析模块,用于对目标字节码文件集合中的字节码文件进行分析得到目标对象,对目标对象的继承关系进行分析得到继承关系集合;
实现类获取模块,用于根据继承关系集合获取所述目标对象的实现类;
字节码文件解析模块,用于对实现类对应的字节码文件进行解析得到目标实现方法集合;
调用关系获取模块,用于对目标实现方法集合进行分析得到目标实现方法集合中目标实现方法的调用关系;
方法调用关系图生成模块,用于根据目标实现方法和调用关系生成方法调用关系图,对方法调用关系图进行展示。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取待分析项目的字节码文件集合,字节码文件集合包括至少一个字节码文件;
对字节码文件集合进行过滤得到目标字节码文件集合;
对目标字节码文件集合中的字节码文件进行分析得到目标对象,对目标对象的继承关系进行分析得到继承关系集合;
根据继承关系集合获取目标对象的实现类;
对实现类对应的字节码文件进行解析得到目标实现方法集合;
对目标实现方法集合进行分析得到目标实现方法集合中目标实现方法的调用关系;
根据目标实现方法和调用关系生成方法调用关系图,对方法调用关系图进行展示。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取待分析项目的字节码文件集合,字节码文件集合包括至少一个字节码文件;
对字节码文件集合进行过滤得到目标字节码文件集合;
对目标字节码文件集合中的字节码文件进行分析得到目标对象,对目标对象的继承关系进行分析得到继承关系集合;
根据继承关系集合获取目标对象的实现类;
对实现类对应的字节码文件进行解析得到目标实现方法集合;
对目标实现方法集合进行分析得到目标实现方法集合中目标实现方法的调用关系;
根据目标实现方法和调用关系生成方法调用关系图,对方法调用关系图进行展示。
上述关系图生成方法、装置、计算机设备和存储介质,将获取到的待分析项目的字节码文件集合过滤得到目标字节码文件集合,对目标字节码文件集合中的字节码文件进行分析得到目标对象,对目标对象的继承关系进行分析得到继承关系集合,根据继承关系集合获取目标对象的实现类,对实现类对应的字节码文件进行解析得到目标实现方法集合,再对目标实现方法集合进行分析得到目标实现方法集合中目标实现方法的调用关系,根据目标实现方法和调用关系生成方法调用关系图,进而对方法调用关系图进行展示。因此,对字节码文件集合过滤掉不关心的字节码文件,进而得到目标字节码文件集合,再对目标字节码文件集合中实现类对应的字节码文件分析得到目标实现方法和目标实现方法的调用关系,最后根据目标实现方法和调用关系生成方法调用关系图,最终的方法调用关系图只包括由关心的字节码文件分析得到的实现方法和实现方法的调用关系,进而提高了用户的查看效率。
附图说明
图1为一个实施例中关系图生成方法的应用环境图;
图2为一个实施例中关系图生成方法的流程示意图;
图3为一个实施例中获取待分析项目的字节码文件集合步骤的流程示意图;
图4为一个实施例中根据目标实现方法和调用关系生成方法调用关系图步骤的流程示意图;
图5为一个实施例中对字节码文件集合进行过滤得到目标字节码文件集合步骤的流程示意图;
图6为一个实施例中对实现类对应的字节码文件进行解析得到目标实现方法集合步骤的流程示意图;
图7为另一个实施例中关系图生成方法的流程示意图;
图8为一个实施例中关系图生成装置的结构框图;
图9为一个实施例中计算机设备的内部结构图;
图10为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的关系图生成方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104通过网络进行通信。终端102具体可以是台式终端或移动终端,移动终端具体可以手机、平板电脑、笔记本电脑等中的至少一种。服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
具体地,终端102可从服务器104上获取待分析项目,再对待分析项目分析得到待分析项目的字节码文件集合,终端102对字节码文件集合进行过滤得到目标字节码文件集合,再对目标字节码文件集合中的字节码文件进行分析得到目标对象。终端102对目标对象的继承关系进行分析得到继承关系集合,根据继承关系集合获取目标对象的实现类,对实现类对应的字节码文件进行解析得到目标实现方法集合,再对目标实现方法集合进行分析得到目标实现方法集合中目标实现方法的调用关系,根据目标实现方法和调用关系生成方法调用关系图,并在终端102上展示该方法调用关系图。
具体地,服务器104也可以从数据库中获取待分析项目,再对待分析项目分析得到待分析项目的字节码文件集合,服务器104对字节码文件集合进行过滤得到目标字节码文件集合,再对目标字节码文件集合中的字节码文件进行分析得到目标对象。服务器104对目标对象的继承关系进行分析得到继承关系集合,根据继承关系集合获取目标对象的实现类,对实现类对应的字节码文件进行解析得到目标实现方法集合,再对目标实现方法集合进行分析得到目标实现方法集合中目标实现方法的调用关系,根据目标实现方法和调用关系生成方法调用关系图。服务器104将该方法调用关系图发送至终端102,在终端102上展示该方法调用关系图。
本领域技术人员可以理解,图1中示出的应用环境,仅仅是与本申请方案相关的部分场景,并不构成对本申请方案应用环境的限定。
在一个实施例中,如图2所示,提供了一种关系图生成方法,以该方法应用于图1中的终端为例进行说明,包括以下步骤:
S202,获取待分析项目的字节码文件集合,字节码文件集合包括至少一个字节码文件。
其中,字节码文件是Java语言编写的原程序文件经过编译后的字节码文件。字节码文件集合中包括一个或者多个字节码文件。一个字节码文件集合中包括一个软件项目的所有字节码文件。
具体地,想要生成待分析项目的方法调用关系图,终端需先获取待分析项目的所有字节码文件。通常,待分析项目包括多个字节码文件夹,终端需从所有的字节码文件夹中获取全部的字节码文件,并将字节码文件加入字节码文件集合中。
在一个实施例中,终端可以在本地获取待分析项目。终端也可以从其他终端获取待分析项目。具体可以是终端A向其他终端发送待分析项目获取请求,其他终端根据待分析项目获取请求查找对应的待分析项目,再将查找到的待分析项目发送给终端A。也可以是其他终端主动向终端A发送待分析项目,终端A对待分享项目进行分析。
在一个实施例中,终端可以从服务器获取待分析项目。具体可以是终端向服务器发送待分析项目获取请求,服务器根据待分析项目获取请求在数据库中查找对应的待分析项目,再将查找到的待分析项目发送给终端。
S204,对字节码文件集合进行过滤得到目标字节码文件集合。
其中,终端对字节码文件集合进行过滤得到目标字节码文件集合的具体过滤规则设置为根据字节码文件名过滤,这里的过滤规则是用于从字节码文件集合中过滤得到目标字节码文件集合的。具体地,用户在控制界面输入需要过滤的字节码文件名,终端在字节码文件集合中查找该字节码文件名对应的字节码文件,进而从字节码文件集合中删除该字节码文件,得到目标字节码文件集合。
S206,对目标字节码文件集合中的字节码文件进行分析得到目标对象,对目标对象的继承关系进行分析得到继承关系集合。
其中,目标对象是Java虚拟机中的对象,一个字节码文件对应一个目标对象,使用forname方法可以得到目标对象。继承关系集合中包括多个具有继承关系的目标对象。
继承是面向对象的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能拓展新的能力。继承是子类继承父类的特征和行为,使得子类对象(实现类)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。继承分为单继承和多重继承。单继承是指一个子类只能有一个父类。多重继承是一个子类可以有两个以上的父类。
目标对象按照类型可以分为接口、抽象类和实现类。接口是方法特征的集合。实现类是具体的实现方法。抽象类是包括抽象方法的类。接口支持多继承,抽象类支持单继承,实现类支持单继承。接口可以相互继承,抽象类可以相互继承,抽象类可以继承接口,实现类可以实现接口,实现类可以继承抽象类。
继承关系是传递的,但是,继承关系传递到最后一定是实现类。使用isAssignableFrom方法可以得到两个目标对象之间的继承关系。
具体地,在终端使用forname方法得到目标字节码文件集合中的字节码文件的目标对象,再使用isAssignableFrom方法对目标对象进行分析,得到目标对象之间的继承关系。将所有的目标对象通过分析得到的继承关系组成继承关系集合。
S208,根据继承关系集合获取目标对象的实现类。
具体地,实现类可以实例化对象,抽象类和接口不可以实例化对象。终端在继承关系集合中先根据代码关键字查找接口和实现类。接口的代码关键字为interface,抽象类的代码关键字为abstract class。查找完接口和实现类之后,继承关系集合中剩下的就是实现类。
S210,对实现类对应的字节码文件进行解析得到目标实现方法集合。
其中,实现方法是一段代码,可以通过实现方法的名字进行调用。一个字节码文件经过解析可以得到至少一个实现方法。不同字节码文件经过解析得到的实现方法是不同的。
具体地,终端查找到实现类后,对该实现类对应的字节码文件进行解析,也就是对该实现类对应的字节码文件进行反编译。终端可使用apache(网页服务器)提供的ClassParser工具对字节码文件进行解析得到字节码文件的所有实现方法,将所有实现方法组成实现方法集合,对实现方法集合中的实现方法进行过滤得到目标实现方法集合。
其中,高级编程语言源程序经过编译变成可执行文件,反编译就是逆过程。apache是网页服务器软件,可以运行在计算机平台上,具有可跨平台使用和安全性较好的特点。ClassParser是针对Java编程语言的解析器,可以解析给定的字节码文件,得到字节码文件的实现方法。
S212,对目标实现方法集合进行分析得到目标实现方法集合中目标实现方法的调用关系。
具体地,终端使用ClassParser工具分析上述步骤得到的目标实现方法集合。使用ClassParser工具可以先得到目标实现方法调用的子目标实现方法,再使用ClassParser工具分析子目标实现方法得到孙目标实现方法。使用ClassParser工具遍历所有的目标实现方法,得到每个目标实现方法调用的子目标实现方法,进而得到所有目标实现方法之间的调用关系。
S214,根据目标实现方法和调用关系生成方法调用关系图,对方法调用关系图进行展示。
具体地,为了方便用户查看,需图形化展示目标实现方法和目标实现方法之间的调用关系。终端可以使用图像化展示数据的工具将目标实现方法和目标实现方法之间的调用关系生成方法调用关系图。图像化展示数据的工具可以是Echart。
其中,Echart是一个使用JavaScript实现的开源可视化库,可以流畅地运行在个人计算机和移动设备上,可提供直观、交互丰富、可高度个性化定制的数据可视化图表。
在一个实施例中,根据目标实现方法和调用关系生成方法调用关系图的步骤具体包括:根据目标实现方法生成对应的节点,节点携带方法标识;根据调用关系建立节点之间的连接关系,调用关系携带调用的目标实现方法的方法标识;根据节点和连接关系生成方法调用关系图。
上述关系图生成方法中,终端将获取到的待分析项目的字节码文件集合过滤得到目标字节码文件集合,对目标字节码文件集合中的字节码文件进行分析得到目标对象,对目标对象的继承关系进行分析得到继承关系集合,根据继承关系集合获取目标对象的实现类,对实现类对应的字节码文件进行解析得到目标实现方法集合,再对目标实现方法集合进行分析得到目标实现方法集合中目标实现方法的调用关系,根据目标实现方法和调用关系生成方法调用关系图,进而对方法调用关系图进行展示。因此,对字节码文件集合过滤掉不关心的字节码文件,进而得到目标字节码文件集合,再对目标字节码文件集合中实现类对应的字节码文件分析得到目标实现方法和目标实现方法的调用关系,最后根据目标实现方法和调用关系生成方法调用关系图,最终的方法调用关系图只包括由关心的字节码文件分析得到的实现方法和实现方法的调用关系,进而提高了用户的查看效率。
在另一个实施例中,可由服务器将获取到的待分析项目的字节码文件集合过滤得到目标字节码文件集合,对目标字节码文件集合中的字节码文件进行分析得到目标对象,对目标对象的继承关系进行分析得到继承关系集合,根据继承关系集合获取目标对象的实现类,对实现类对应的字节码文件进行解析得到目标实现方法集合,再对目标实现方法集合进行分析得到目标实现方法集合中目标实现方法的调用关系,根据目标实现方法和调用关系生成方法调用关系图,进而将该方法调用关系图发送至终端,在终端对该方法调用关系图进行展示。
如图3所示,在一个实施例中,步骤S202,即获取待分析项目的字节码文件集合的步骤可以包括:
S302,获取待分析项目的根目录路径,根据根目录路径创建文件对象。
S304,通过文件对象获取根目录路径下的子文件对象。
S306,遍历子文件对象得到各个字节码文件,将各个字节码文件组成字节码文件集合。
其中,待分析项目是软件项目。待分析项目是使用Java编程语言编写的,待分析项目包括至少一个字节码文件。文件对象是Java文件管理对象,用于获取待分析项目根目录下的文件。
具体地,可由终端获取待分析项目的根目录路径,根据该根目录路径创建文件对象,通过该文件对象使用listfile方法获取该根目录路径下的子文件对象。若子文件对象是文件夹,那么还需要获取文件夹里的文件。因此,终端需要遍历所有子文件对象,得到所有的字节码文件,组成字节码文件集合。字节码文件集合中不包括文件夹。一个待分析项目对应一个字节码文件集合。
在一个实施例中,可由服务器获取待分析项目的根目录路径,根据该根目录路径创建文件对象,通过该文件对象使用listfile方法获取该根目录路径下的子文件对象。遍历所有子文件对象,得到所有的字节码文件,组成字节码文件集合。
上述实施例中,将待分析项目拆分得到字节码文件集合,后续再对字节码文件集合进行分析,进而得到待分析项目的方法调用关系图。
如图4所示,在一个实施例中,步骤S214中根据实现方法和调用关系生成方法调用关系图可以包括:
S402,根据目标实现方法生成对应的节点,节点携带方法标识。
S404,根据调用关系建立节点之间的连接关系,调用关系携带调用的目标实现方法的方法标识。
S406,根据节点和连接关系生成方法调用关系图。
其中,方法调用关系图包括节点和连接节点的箭头。方法标识是一种标识,用于唯一标识目标实现方法,具体可以包括字母、数字和符号中至少一种字符的字符串。
具体地,终端可使用图像化展示数据的工具将目标实现方法集合中的目标实现方法生成节点,一个目标实现方法对应一个节点。由于,节点携带目标实现方法标识,目标实现方法的调用关系携带调用的目标实现方法的方法标识,终端可使用图像化展示数据的工具根据调用关系建立节点与节点之间的连接关系。连接关系用箭头表示,箭头是由被调用的节点指向另一节点。例如,终端使用ClassParser工具可以得到目标实现方法A调用的子目标实现方法B,再使用Echart将目标实现方法A生成节点A,将目标实现方法B生成节点B,由于目标实现方法B是目标实现方法A的子目标实现方法,所以目标实现方法B和目标实现方法A存在调用关系,调用关系为目标实现方法B调用目标实现方法A。因此,用箭头连接节点A和节点B,箭头由节点A指向节点B。按照上述方法遍历所有的目标实现方法,可得到对应的节点和节点之间的连接关系,最终将所有节点和所有节点之间的连接关系组成方法调用关系图。方法调用关系图清晰展示了待分析项目中用户关心的实现方法和该实现方法之间的调用关系,便于用户查看。
在一个实施例中,可由服务器使用图像化展示数据的工具将目标实现方法集合中的目标实现方法生成节点,根据调用关系建立节点与节点之间的连接关系,最终将所有节点和所有节点之间的连接关系组成方法调用关系图。
如图5所示,在一个实施例中,步骤S204,即对字节码文件集合进行过滤得到目标字节码文件集合可以包括:
S204A,获取用户在控制界面录入的字节码文件信息。
S204B,根据字节码文件信息从字节码文件集合中删除对应的字节码文件,得到目标字节码文件集合。
其中,控制界面是一个图形用户界面,用户可以在该界面上输入信息。字节码文件信息是字节码文件名。一个待分析项目中的所有字节码文件的字节码文件名都是不同的,因此根据字节码文件名可以唯一确定一个字节码文件。
具体地,用户可以在控制界面上输入想要过滤的字节码文件的字节码文件名。终端获取用户在控制界面录入的字节码文件名,根据字节码文件名从字节码文件集合中删除以该字节码文件名命名的字节码文件,进而得到目标字节码文件集合。
在一个实施例中,可由服务器获取用户在终端的控制界面录入的字节码文件名,根据字节码文件名从字节码文件集合中删除以该字节码文件名命名的字节码文件,进而得到目标字节码文件集合。
上述实施例中,可以根据用户录入的字节码文件信息对字节码文件集合进行过滤得到目标字节码文件集合。用户可以根据自身需要录入字节码文件名,也就是用户每次录入的字节码文件名可以不同,因此,针对不同的待分析项目可以灵活过滤字节码文件。
如图6所示,在一个实施例中,步骤S210,即对实现类对应的字节码文件进行解析得到目标实现方法集合可以包括:
S210A,对实现类对应的字节码文件进行解析得到实现方法集合。
S210B,获取用户在控制界面录入的方法信息。
S210C,根据方法信息从实现方法集合中删除对应的实现方法,得到目标实现方法集合。
其中,方法信息是实现方法的名称。
具体地,可使用apache(网页服务器)提供的ClassParser工具对字节码文件进行解析得到字节码文件的所有实现方法,将所有实现方法组成实现方法集合。用户可以在控制界面上输入想要过滤的实现方法名称。终端获取用户在控制界面录入的实现方法名称,根据实现方法名称从实现方法集合中删除以该实现方法名称命名的实现方法,进而得到目标实现方法集合。
在一个实施例中,可由服务器获取用户在终端的控制界面录入的实现方法名称,根据实现方法名称从实现方法集合中删除以该实现方法名称命名的实现方法,进而得到目标实现方法集合。
上述实施例中,可以根据用户录入的实现方法名称对实现方法集合进行过滤得到目标实现方法集合。用户可以根据自身需要录入实现方法名称,也就是用户每次录入的实现方法名称可以不同,因此,针对不同的待分析项目可以灵活过滤实现方法。
在一个实施例中,关系图生成方法还包括:
方法调用关系图包括至少两个节点,获取对节点的操作指令,根据操作指令对节点进行相应操作,包括至少以下一种:获取对节点的打开指令,根据打开指令打开该节点对应的目标实现方法所在的字节码文件;获取对节点的忽略指令,根据忽略指令隐藏节点和对应该节点的连接关系。
具体地,一个方法调用图中包括至少两个节点。当用户对一个节点触发打开指令时,终端可以根据打开指令打开该节点对应的目标实现方法所在的字节码文件。进一步的,可以跳到该节点对应的目标实现方法在字节码文件中对应的行号。
在一个实施例中,用户可以通过单击一个节点触发打开指令,终端再根据打开指令打开该节点对应的目标实现方法所在的字节码文件。
具体地,当用户对一个节点触发忽略指令时,终端可以根据忽略指令在方法调用图中隐藏该节点和与该节点有关的连接关系。
在一个实施例中,用户可以通过双击一个节点触发忽略指令,终端再根据忽略指令在方法调用图中隐藏该节点和与该节点有关的连接关系。
在一个实施例中,当用户把鼠标定位在一个节点上时,可以弹出选框让用户选择,选框中包括打开和忽略两个控件。当用户选择打开控件时,可以打开该节点对应的目标实现方法所在的字节码文件。进一步的,可以跳到该节点对应的目标实现方法在字节码文件中对应的行号。当用户选择忽略控件时,可以在方法调用图中隐藏该节点和与该节点有关的连接关系。
上述实施例中,根据打开指令打开该节点对应的目标实现方法所在的字节码文件可以让用户查看详细代码。根据忽略指令隐藏节点和对应该节点的连接关系可以进一步简化方法调用关系图,进一步提高查看效率。
如图7所示,在一个具体的实施例中,关系图生成方法包括以下步骤:
S702,获取待分析项目的根目录路径,根据根目录路径创建文件对象。
S704,通过文件对象获取根目录路径下的子文件对象。
S706,遍历子文件对象得到各个字节码文件,将各个字节码文件组成字节码文件集合。
S708,获取用户在控制界面录入的字节码文件信息。
S710,根据字节码文件信息从字节码文件集合中删除对应的字节码文件,得到目标字节码文件集合。
S712,对目标字节码文件集合中的字节码文件进行分析得到目标对象,对目标对象的继承关系进行分析得到继承关系集合。
S714,根据继承关系集合获取目标对象的实现类。
S716,对实现类对应的字节码文件进行解析得到实现方法集合。
S718,获取用户在控制界面录入的方法信息。
S720,根据方法信息从实现方法集合中删除对应的实现方法,得到目标实现方法集合。
S722,根据目标实现方法生成对应的节点,节点携带方法标识。
S724,根据调用关系建立节点之间的连接关系,调用关系携带调用的目标实现方法的方法标识。
S726,根据节点和连接关系生成方法调用关系图。
S728,对方法调用关系图进行展示。
S730,方法调用关系图包括至少两个节点,获取对节点的操作指令,根据操作指令对节点进行相应操作,包括至少以下一种:获取对节点的打开指令,根据打开指令打开该节点对应的目标实现方法所在的字节码文件;获取对节点的忽略指令,根据忽略指令隐藏节点和对应该节点的连接关系。
上述关系图生成方法中,终端将获取到的待分析项目的字节码文件集合过滤得到目标字节码文件集合,对目标字节码文件集合中的字节码文件进行分析得到目标对象,对目标对象的继承关系进行分析得到继承关系集合,根据继承关系集合获取目标对象的实现类,对实现类对应的字节码文件进行解析得到目标实现方法集合,再对目标实现方法集合进行分析得到目标实现方法集合中目标实现方法的调用关系,根据目标实现方法和调用关系生成方法调用关系图,进而对方法调用关系图进行展示。因此,对字节码文件集合过滤掉不关心的字节码文件,进而得到目标字节码文件集合,再对目标字节码文件集合中实现类对应的字节码文件分析得到目标实现方法和目标实现方法的调用关系,最后根据目标实现方法和调用关系生成方法调用关系图,最终的方法调用关系图只包括由关心的字节码文件分析得到的实现方法和实现方法的调用关系,进而提高了用户的查看效率。
应该理解的是,虽然本申请实施例的各个流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,本申请实施例的各个流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图8所示,提供了一种关系图生成装置,包括:字节码文件集合获取模块802、过滤模块804、继承关系分析模块806、实现类获取模块808、字节码文件解析模块810、调用关系获取模块812和方法调用关系图生成模块814,其中:
字节码文件集合获取模块802,用于获取待分析项目的字节码文件集合,字节码文件集合包括至少一个字节码文件。
过滤模块804,用于对字节码文件集合进行过滤得到目标字节码文件集合。
继承关系分析模块806,用于对目标字节码文件集合中的字节码文件进行分析得到目标对象,对目标对象的继承关系进行分析得到继承关系集合。
实现类获取模块808,用于根据继承关系集合获取目标对象的实现类。
字节码文件解析模块810,用于对实现类对应的字节码文件进行解析得到目标实现方法集合。
调用关系获取模块812,用于对目标实现方法集合进行分析得到目标实现方法集合中实现方法的调用关系。
方法调用关系图生成模块814,用于根据实现方法和调用关系生成方法调用关系图,对方法调用关系图进行展示。
在一个实施例中,字节码文件集合获取模块802还用于获取待分析项目的根目录路径,根据根目录路径创建文件对象;通过文件对象获取根目录路径下的子文件对象;遍历子文件对象得到各个字节码文件,将各个字节码文件组成字节码文件集合。
在一个实施例中,方法调用关系图生成模块814还用于根据目标实现方法生成对应的节点,节点携带节点标识;根据调用关系建立节点之间的连接关系,调用关系携带调用节点的节点标识;根据节点和连接关系生成方法调用关系图。
在一个实施例中,过滤模块804还用于获取用户在控制界面录入的字节码文件信息;根据字节码文件信息从字节码文件集合中删除对应的字节码文件,得到目标字节码文件集合。
在一个实施例中,字节码文件解析模块810还用于对实现类对应的字节码文件进行解析得到实现方法集合;获取用户在控制界面录入的方法信息;根据方法信息从实现方法集合中删除对应的实现方法,得到目标实现方法集合。
在一个实施例中,关系图生成装置还包括:
操作指令获取模块,用于方法调用关系图包括至少两个节点,获取对节点的操作指令,根据操作指令对节点进行相应操作,包括至少以下一种:获取对节点的打开指令,根据打开指令打开该节点对应的目标实现方法所在的字节码文件;获取对节点的忽略指令,根据忽略指令隐藏节点和对应该节点的连接关系。
上述关系图生成装置,终端将获取到的待分析项目的字节码文件集合过滤得到目标字节码文件集合,对目标字节码文件集合中的字节码文件进行分析得到目标对象,对目标对象的继承关系进行分析得到继承关系集合,根据继承关系集合获取目标对象的实现类,对实现类对应的字节码文件进行解析得到目标实现方法集合,再对目标实现方法集合进行分析得到目标实现方法集合中目标实现方法的调用关系,根据目标实现方法和调用关系生成方法调用关系图,进而对方法调用关系图进行展示。因此,对字节码文件集合过滤掉不关心的字节码文件,进而得到目标字节码文件集合,再对目标字节码文件集合中实现类对应的字节码文件分析得到目标实现方法和目标实现方法的调用关系,最后根据目标实现方法和调用关系生成方法调用关系图,最终的方法调用关系图只包括由关心的字节码文件分析得到的实现方法和实现方法的调用关系,进而提高了用户的查看效率。
关于关系图生成装置的具体限定可以参见上文中对于关系图生成方法的限定,在此不再赘述。上述关系图生成装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图9所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种关系图生成方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图10所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储待分析项目。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种关系图生成方法。
本领域技术人员可以理解,图9和图10中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述关系图生成方法的步骤。此处关系图生成方法的步骤可以是上述各个实施例的关系图生成方法中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述关系图生成方法的步骤。此处关系图生成方法的步骤可以是上述各个实施例的关系图生成方法中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (10)

1.一种关系图生成方法,所述方法包括:
获取待分析项目的字节码文件集合,所述字节码文件集合包括至少一个字节码文件;
基于用户录入的字节码文件名,对所述字节码文件集合进行过滤得到目标字节码文件集合;
对所述目标字节码文件集合中的字节码文件进行分析得到目标对象,对所述目标对象的继承关系进行分析得到继承关系集合;所述目标对象包括接口、抽象类和实现类,一个字节码文件对应一个目标对象;
根据预设代码关键字从所述继承关系集合中过滤接口和抽象类,得到实现类;
对所述实现类对应的字节码文件进行反编译得到实现方法集合,基于用户录入的实现方法名,对所述实现方法集合进行过滤得到目标实现方法集合;
对所述目标实现方法集合进行分析得到所述目标实现方法集合中目标实现方法的调用关系;
根据所述目标实现方法和所述调用关系生成方法调用关系图,对所述方法调用关系图进行展示。
2.根据权利要求1所述的方法,其特征在于,所述获取待分析项目的字节码文件集合,包括:
获取待分析项目的根目录路径,根据所述根目录路径创建文件对象;
通过所述文件对象获取所述根目录路径下的子文件对象;
遍历所述子文件对象得到各个字节码文件,将所述各个字节码文件组成所述字节码文件集合。
3.根据权利要求1所述的方法,其特征在于,根据所述目标实现方法和所述调用关系生成方法调用关系图,包括:
根据所述目标实现方法生成对应的节点,所述节点携带方法标识;
根据所述调用关系建立所述节点之间的连接关系,所述调用关系携带调用的目标实现方法的方法标识;
根据所述节点和所述连接关系生成方法调用关系图。
4.根据权利要求1所述的方法,其特征在于,所述基于用户录入的字节码文件名,对所述字节码文件集合进行过滤得到目标字节码文件集合,包括:
获取用户在控制界面录入的字节码文件信息;所述字节码文件信息为字节码文件名;
根据所述字节码文件信息从字节码文件集合中删除对应的字节码文件,得到目标字节码文件集合。
5.根据权利要求1所述的方法,其特征在于,所述基于用户录入的实现方法名,对所述实现方法集合进行过滤得到目标实现方法集合,包括:
获取用户在控制界面录入的方法信息;所述方法信息为实现方法名;
根据所述方法信息从所述实现方法集合中删除对应的实现方法,得到所述目标实现方法集合。
6.根据权利要求3所述的方法,其特征在于,所述方法还包括:
所述方法调用关系图包括至少两个节点,获取对所述节点的操作指令,根据所述操作指令对所述节点进行相应操作,包括至少以下一种:
获取对所述节点的打开指令,根据所述打开指令打开所述节点对应的目标实现方法所在的字节码文件;
获取对所述节点的忽略指令,根据所述忽略指令隐藏所述节点和对应所述节点的连接关系。
7.一种关系图生成装置,其特征在于,所述装置包括:
字节码文件集合获取模块,用于获取待分析项目的字节码文件集合,所述字节码文件集合包括至少一个字节码文件;
过滤模块,用于基于用户录入的字节码文件名,对所述字节码文件集合进行过滤得到目标字节码文件集合;
继承关系分析模块,用于对所述目标字节码文件集合中的字节码文件进行分析得到目标对象,对所述目标对象的继承关系进行分析得到继承关系集合;所述目标对象包括接口、抽象类和实现类,一个字节码文件对应一个目标对象;
实现类获取模块,用于根据预设代码关键字从所述继承关系集合中过滤接口和抽象类,得到实现类;
字节码文件解析模块,用于对所述实现类对应的字节码文件进行反编译得到实现方法集合,基于用户录入的实现方法名,对所述实现方法集合进行过滤得到目标实现方法集合;
调用关系获取模块,用于对所述目标实现方法集合进行分析得到所述目标实现方法集合中目标实现方法的调用关系;
方法调用关系图生成模块,用于根据所述目标实现方法和所述调用关系生成方法调用关系图,对所述方法调用关系图进行展示。
8.根据权利要求7所述的装置,其特征在于,所述方法调用关系图生成模块还用于根据所述目标实现方法生成对应的节点,所述节点携带方法标识;根据所述调用关系建立所述节点之间的连接关系,所述调用关系携带调用的目标实现方法的方法标识;根据所述节点和所述连接关系生成方法调用关系图。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。
CN201911224310.0A 2019-12-04 2019-12-04 关系图生成方法、装置、计算机设备和存储介质 Active CN111008022B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911224310.0A CN111008022B (zh) 2019-12-04 2019-12-04 关系图生成方法、装置、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911224310.0A CN111008022B (zh) 2019-12-04 2019-12-04 关系图生成方法、装置、计算机设备和存储介质

Publications (2)

Publication Number Publication Date
CN111008022A CN111008022A (zh) 2020-04-14
CN111008022B true CN111008022B (zh) 2023-12-12

Family

ID=70113964

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911224310.0A Active CN111008022B (zh) 2019-12-04 2019-12-04 关系图生成方法、装置、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN111008022B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112612556B (zh) * 2020-12-24 2022-07-15 江苏满运物流信息有限公司 中台执行链路生成方法、系统、设备及存储介质
CN112783720B (zh) * 2021-01-05 2023-05-19 广州品唯软件有限公司 拓扑结构图生成方法、装置、计算机设备和展示系统
CN113326184B (zh) * 2021-05-11 2022-05-17 前海飞算云智软件科技(深圳)有限公司 接口测试方法、装置、存储介质及电子设备
CN114003317B (zh) * 2021-10-29 2024-09-20 北京达佳互联信息技术有限公司 内联实现方法及装置、电子设备、存储介质及程序产品

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6804686B1 (en) * 2002-04-29 2004-10-12 Borland Software Corporation System and methodology for providing fixed UML layout for an object oriented class browser
CN103713909A (zh) * 2014-01-22 2014-04-09 扬州大学 一种生成包图的Java程序包概要化方法
WO2016130542A1 (en) * 2015-02-10 2016-08-18 The Trustees Of Columbia University In The City Of New York Code relatives detection
CN106095748A (zh) * 2016-06-06 2016-11-09 东软集团股份有限公司 一种生成事件关系图谱的方法及装置
CN107506299A (zh) * 2017-08-09 2017-12-22 平安科技(深圳)有限公司 一种代码分析方法及终端设备
CN109815239A (zh) * 2019-01-25 2019-05-28 山东浪潮商用系统有限公司 一种结合ECharts创建关系图谱的方法
CN109901841A (zh) * 2019-03-01 2019-06-18 太仓市同维电子有限公司 一种查看java字节码时显示方法调用关系图的方法
CN110007920A (zh) * 2018-01-04 2019-07-12 阿里巴巴集团控股有限公司 一种获取代码依赖关系的方法、装置及电子设备
US10409560B1 (en) * 2015-11-18 2019-09-10 Amazon Technologies, Inc. Acceleration techniques for graph analysis programs

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9665849B2 (en) * 2015-02-26 2017-05-30 Red Hat, Inc. Employing dependency graph in software build projects
WO2017134665A1 (en) * 2016-02-03 2017-08-10 Cocycles System for organizing, functionality indexing and constructing of a source code search engine and method thereof
US11170179B2 (en) * 2017-06-30 2021-11-09 Jpmorgan Chase Bank, N.A. Systems and methods for natural language processing of structured documents

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6804686B1 (en) * 2002-04-29 2004-10-12 Borland Software Corporation System and methodology for providing fixed UML layout for an object oriented class browser
CN103713909A (zh) * 2014-01-22 2014-04-09 扬州大学 一种生成包图的Java程序包概要化方法
WO2016130542A1 (en) * 2015-02-10 2016-08-18 The Trustees Of Columbia University In The City Of New York Code relatives detection
US10409560B1 (en) * 2015-11-18 2019-09-10 Amazon Technologies, Inc. Acceleration techniques for graph analysis programs
CN106095748A (zh) * 2016-06-06 2016-11-09 东软集团股份有限公司 一种生成事件关系图谱的方法及装置
CN107506299A (zh) * 2017-08-09 2017-12-22 平安科技(深圳)有限公司 一种代码分析方法及终端设备
CN110007920A (zh) * 2018-01-04 2019-07-12 阿里巴巴集团控股有限公司 一种获取代码依赖关系的方法、装置及电子设备
CN109815239A (zh) * 2019-01-25 2019-05-28 山东浪潮商用系统有限公司 一种结合ECharts创建关系图谱的方法
CN109901841A (zh) * 2019-03-01 2019-06-18 太仓市同维电子有限公司 一种查看java字节码时显示方法调用关系图的方法

Also Published As

Publication number Publication date
CN111008022A (zh) 2020-04-14

Similar Documents

Publication Publication Date Title
CN111008022B (zh) 关系图生成方法、装置、计算机设备和存储介质
CN108932122B (zh) 接口文档生成方法、装置、计算机设备和存储介质
CN109032662B (zh) 代码文件生成方法、装置、计算机设备和存储介质
CN110244942B (zh) 一种页面生成方法、装置及系统
CN109814854B (zh) 项目框架生成方法、装置、计算机设备和存储介质
CN111427561A (zh) 业务代码的生成方法、装置、计算机设备和存储介质
CN111061475B (zh) 软件代码生成方法、装置、计算机设备和存储介质
CN111414350B (zh) 一种服务生成方法及装置
US10084819B1 (en) System for detecting source code security flaws through analysis of code history
CN108614702B (zh) 字节码优化方法及装置
CN111124872A (zh) 基于差异代码分析的分支检测方法、装置及存储介质
CN115794202A (zh) 一种数据配置方法及引擎、档案系统、计算机存储介质
CN113282799A (zh) 节点的操作方法、装置、计算机设备和存储介质
CN111159301A (zh) 一种基于智能合约的数据创建方法、装置、设备及存储介质
CN111552503A (zh) 工程文件处理方法、装置、计算机设备及存储介质
JP7318704B2 (ja) テスト装置、テスト方法及びプログラム
CN113918198B (zh) 一种模型-代码同步方法
CN112889026A (zh) 用户界面资源文件优化
Tiwari et al. Demand-driven Information Flow Analysis of WebView in Android Hybrid Apps
CN116048609A (zh) 配置文件更新方法、装置、计算机设备和存储介质
CN110286894B (zh) 脚本生成方法、装置、计算机设备和存储介质
Alvin et al. StaticGen: static generation of UML sequence diagrams
CN109871214B (zh) 程序代码生成方法、装置、计算机设备和存储介质
CN111737964A (zh) 表格动态处理方法、设备及介质
CN111857782A (zh) 界面更新方法、装置、计算机设备和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant