CN113419795A - 调用关系的展示方法、装置、计算机设备及存储介质 - Google Patents
调用关系的展示方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN113419795A CN113419795A CN202110825837.XA CN202110825837A CN113419795A CN 113419795 A CN113419795 A CN 113419795A CN 202110825837 A CN202110825837 A CN 202110825837A CN 113419795 A CN113419795 A CN 113419795A
- Authority
- CN
- China
- Prior art keywords
- engineering
- engineering module
- module
- modules
- calling
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
- G06F16/285—Clustering or classification
- G06F16/287—Visualization; Browsing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请实施例公开了一种调用关系的展示方法、装置、计算机设备及存储介质;包括:从存储器中获取多个工程模块以及多个工程模块相互之间的调用关系;对每个入口工程模块,根据入口工程模块被触发的次数、全部入口工程模块被触发的次数,计算每个入口工程模块的得分值;对于每个非入口工程模块,根据非入口工程模块的递归调用次数、该非入口工程模块的父工程模块的得分值、父工程模块调用自身的多个子工程模块的调用次数,计算每个非入口工程模块的得分值;根据多个工程模块相互之间的调用关系、入口工程模块的得分值、以及非入口工程模块的得分值,生成调用关系的展示图。展示图便于开发人员方便快速理解工程模块的运行逻辑。
Description
技术领域
本申请涉及计算机技术领域,具体涉及调用关系的展示方法、装置、计算机设备及存储介质。
背景技术
一个计算机的应用程序往往是由大量的开发人员耗时多年共同完成。应用程序在发布后,会经历大量版本的迭代,每次迭代通常会涉及到应用程序的某些工程模块的代码变动。随着应用程序的迭代以及开发人员的更换,后来的开发人员理解应用程序的运行逻辑变得愈发困难。
现有技术中,为了便于后来的开发人员理解应用程序的运行逻辑,通常会采用如下做法:1.使用直观的、易理解的命名方式;2.使用注释对重要的代码块和接口进行备注说明;3.使用开发文档对重要的工程模块实现的功能进行介绍;4.在工程架构层面采用更优质的封装方案和拓展方案,以便于后期维护。然而,上述措施是否有效主要取决于前期开发者的个人水平和开发习惯,无法让后来的开发人员方便快速地理解应用程序的运行逻辑。
发明内容
本申请实施例提供一种调用关系的展示方法、装置、计算机设备及存储介质,可以使得后来的开发人员方便快速地理解应用程序的运行逻辑。
本申请实施例提供一种调用关系的展示方法,包括:从存储器中获取多个工程模块以及所述多个工程模块相互之间的调用关系,其中,所述工程模块由至少一行代码组成;在存在调用关系的两个工程模块中,被调用的工程模块为发起调用关系的工程模块的子工程模块,发起调用关系的工程模块为被调用的工程模块的父工程模块;对于所述多个工程模块中的每个入口工程模块,根据所述每个入口工程模块被触发的次数、全部的入口工程模块被触发的次数,计算所述每个入口工程模块的得分值,其中,所述入口工程模块为没有父工程模块且有至少一个子工程模块的工程模块;对于所述多个工程模块中的每个非入口工程模块,根据所述每个非入口工程模块的递归调用次数、该非入口工程模块的父工程模块的得分值、所述父工程模块调用自身的多个子工程模块的调用次数,计算所述每个非入口工程模块的得分值,其中,所述非入口工程模块为有至少一个父工程模块的工程模块;根据所述多个工程模块相互之间的调用关系、所述入口工程模块的得分值、以及非入口工程模块的得分值,生成调用关系的展示图。
本申请实施例提供一种工程模块调用关系的存储方法,包括:监控多个内存堆栈的栈顶;若存在至少一个内存堆栈的栈顶记录的函数方法发生更新,确定所述栈顶更新前的函数方法调用所述栈顶更新后的函数方法,将所述栈顶更新前的函数方法记为调用者,所述栈顶更新后的函数方法记为被调用者;获取所述调用者的名称、所述调用者所属的上级工程的名称、所述被调用者的名称以及所述被调用者所属的上级工程的名称,其中,所述调用者以及所述被调用者与所述调用者所属的上级工程以及所述被调用者所属的上级工程属于不同层级的工程模块;将所述调用者与被调用者之间的调用关系、所述调用者的名称、所述调用者所属的上级工程的名称、所述被调用者的名称、所述被调用者所属的上级工程的名称作为一条调用日志存入缓存;将缓存中存储的调用日志周期性地存入存储器。
在上述的实施方式中,可以实时监控多个内存堆栈的栈顶,若存在有内存堆栈的栈顶记录的函数方法发生更新,则可以确定该栈顶更新后的函数方法被调用,发起调用关系的是该栈顶更新前的函数方法。可以将栈顶更新后记录的函数方法记为被调用者;将栈顶更新前记录的函数方法记为调用者。因此,可获取并缓存调用者与被调用者之间的调用关系、调用者的名称、调用者所属的上级工程的名称、被调用者的名称、被调用者所属的上级工程的名称,并周期性地将缓存中存储的调用日志存储进存储器。其中,调用者以及被调用者与调用者所属的上级工程以及被调用者所属的上级工程属于不同层级的工程模块。通过监控多个内存堆栈的栈顶,可以获取在监控的时段内,存在调用关系的多个工程模块,并将这些工程模块以及工程模块之间的调用关系存储进存储器。上述获取调用关系以及存在调用关系的工程模块的过程可以自动执行,与现有技术由开发人员人工主动阅读源代码获取调用关系相比,节省了时间,提高了效率。
根据本申请的一个方面,本申请实施例还提供一种调用关系的展示装置,该装置包括:
调用关系获取单元,用于从存储器中获取多个工程模块以及所述多个工程模块相互之间的调用关系,其中,所述工程模块由至少一行代码组成;在存在调用关系的两个工程模块中,被调用的工程模块为发起调用关系的工程模块的子工程模块,发起调用关系的工程模块为被调用的工程模块的父工程模块;
第一得分值计算单元,用于对于所述多个工程模块中的每个入口工程模块,根据所述每个入口工程模块被触发的次数、全部的入口工程模块被触发的次数,计算所述每个入口工程模块的得分值,其中,所述入口工程模块为没有父工程模块且有至少一个子工程模块的工程模块;
第二得分值计算单元,用于对于所述多个工程模块中的每个非入口工程模块,根据所述每个非入口工程模块的递归调用次数、该非入口工程模块的父工程模块的得分值、所述父工程模块调用自身的多个子工程模块的调用次数,计算所述每个非入口工程模块的得分值,其中,所述非入口工程模块为有至少一个父工程模块的工程模块;
展示图生成单元,用于根据所述多个工程模块相互之间的调用关系、所述入口工程模块的得分值、以及非入口工程模块的得分值,生成调用关系的展示图。
可选地,第一得分值计算单元,具体用于对第一入口工程模块的被触发的次数进行对数运算得到第一对数运算结果,其中,第一入口工程模块为全部的入口工程模块中的任意一个入口工程模块;
对全部的入口工程模块中的每个入口工程模块的被触发的次数进行对数运算得到对应的对数运算结果,并计算所述每个入口工程模块对应的对数运算结果的加和,得到加和结果;
根据所述第一对数运算结果以及所述加和结果,计算所述第一入口工程模块的得分值。
可选地,第一得分值计算单元,还具体用于将所述第一对数运算结果与第一常数相加,得到第一加和;将所述加和结果与第二常数相加,得到第二加和;计算第一加和与所述第二加和的比值,所述比值为第一入口工程模块的得分值。
可选地,第二得分值计算单元,具体用于根据第一非入口工程模块的多个父工程模块中的每个父工程模块的得分值,以及每个所述父工程模块调用自身的多个子工程模块的调用次数,计算每个所述父工程模块所对应的得分分量,其中,第一非入口工程模块为多个非入口工程模块中的任意一个非入口工程模块;计算多个父工程模块的所述得分分量的加和,得到得分分量加和;对所述第一非入口工程模块的递归调用次数进行对数运算,得到递归对数运算结果;计算所述递归对数运算结果与所述得分分量加和的加和值,所述加和值为所述第一非入口工程模块的得分值。
可选地,第二得分值计算单元,还具体用于计算父工程模块和所述第一非入口工程模块之间的第一调用权重值与该父工程模块的得分值的乘积,其中,所述第一调用权重值与所述父工程模块调用所述第一非入口工程模块的调用次数存在第一预设关系;计算父工程模块与自身的多个子工程模块对应的多个调用权重值之间的权重值加和,其中,所述调用权重值与所述父工程模块调用对应的子工程模块的调用次数存在所述第一预设关系;计算所述乘积与所述权重值加和的比值,所述比值为所述父工程模块所对应的得分分量。
可选地,展示图生成单元,具体用于生成与所述入口工程模块以及非入口工程模块分别对应的节点;根据所述多个工程模块相互之间的调用关系,确定节点之间单向箭头的指向;根据入口工程模块以及所述非入口工程模块的得分值的多或少,确定对应节点的节点体积的大或小;或根据入口工程模块以及所述非入口工程模块的得分值的多或少,确定对应节点的节点颜色的深或浅。
可选地,所述调用关系的展示装置还包括:模块名获取单元,用于从存储器中获取全部工程模块的模块名;名称筛选单元,用于将所述模块名与存在调用关系的多个模块的模块名进行比对,筛选出不存在调用关系的模块;废弃模块展示单元,用于将所述不存在调用关系的模块呈现在所述展示图中的废弃模块展示区。
根据本申请的一个方面,本申请实施例还提供一种工程模块调用关系的存储装置,该装置包括:栈顶监控单元,用于监控多个内存堆栈的栈顶;调用关系确定单元,用于当存在至少一个内存堆栈的栈顶记录的函数方法发生更新时,确定所述栈顶更新前的函数方法调用所述栈顶更新后的函数方法,将所述栈顶更新前的函数方法记为调用者,所述栈顶更新后的函数方法记为被调用者;工程模块获取单元,用于获取所述调用者的名称、所述调用者所属的上级工程的名称、所述被调用者的名称以及所述被调用者所属的上级工程的名称,其中,所述调用者以及所述被调用者与所述调用者所属的上级工程以及所述被调用者所属的上级工程属于不同层级的工程模块;日志缓存单元,用于将所述调用者与被调用者之间的调用关系、所述调用者的名称、所述调用者所属的上级工程的名称、所述被调用者的名称、所述被调用者所属的上级工程的名称作为一条调用日志存入缓存;日志存储单元,用于将缓存中存储的调用日志周期性地存入存储器。
可选地,日志缓存单元,具体用于判断所述缓存中是否已存储有所述调用者的名称、所述调用者所属的上级工程的名称、所述被调用者的名称、所述被调用者所属的上级工程的名称均相同的调用日志;若是,将所述缓存中已存储的调用日志的调用次数信息加一;若否,在所述缓存中存储所述调用日志。
可选地,日志存储单元,具体用于当距上一次将缓存中存储的调用日志存入存储器超过预设时间长度时,或当缓存中新增的调用日志的数量超过预设阈值时,将缓存中存储的调用日志存入所述存储器。
本申请实施例还提供一种计算机设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现如上所述方法的步骤。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行实现如上所述方法的步骤。
本申请实施例提供的调用关系的展示方法可以从存储器获取多个工程模块以及工程模块之间的调用关系,并且分别计算入口工程模块的得分值以及非入口工程模块的得分值,其中,入口工程模块的得分值与该入口工程模块被触发的次数有关,非入口工程模块的得分值与该非入口工程模块的父工程模块调用自身的多个子工程模块的调用次数、以及父工程模块自身的得分值有关。根据多个工程模块相互之间的调用关系、入口工程模块的得分值、以及非入口工程模块的得分值,生成调用关系的展示图。展示图中可以直观地呈现各工程模块之间的调用关系以及形象地反映每个工程模块与其他工程模块相互调用次数的多或少,从而便于开发人员方便快速地理解应用程序中的多个工程模块的运行逻辑。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a是本申请实施例提供的调用关系的展示方法的流程示意图;
图1b示出了展示图的具体示意图;
图2a是本申请实施例提供的工程模块调用关系的存储方法的流程示意图;
图2b示出了本申请实施例存储方法与展示方法结合后共同示出的流程图;
图3是本申请实施例提供的调用关系的展示装置的一种结构示意图;
图4是本申请实施例提供的工程模块调用关系的存储装置的一种结构示意图;
图5是本申请实施例提供的计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供一种调用关系的展示方法、装置、计算机设备及存储介质。
其中,该调用关系的展示装置具体可以集成在电子设备中,该电子设备可以为终端、服务器等设备。其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、或者个人电脑(Personal Computer,PC)等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。
在一些实施例中,该调用关系的展示装置还可以集成在多个电子设备中,比如,调用关系的展示装置可以集成在多个服务器中,由多个服务器来实现本申请的调用关系的展示方法。
在一些实施例中,服务器也可以以终端的形式来实现。
以下分别进行详细说明。需说明的是,以下实施例的序号不作为对实施例优选顺序的限定。
在本实施例中,提供了一种调用关系的展示方法。如图1a所示,该展示方法的具体流程可以如下步骤110至步骤140:
110、从存储器中获取多个工程模块以及所述多个工程模块相互之间的调用关系。
其中,工程模块由至少一行代码组成,至少一行代码用于实现一个程序功能。每个工程模块均能够实现一个程序功能,工程模块通过相互之间的调用可以令程序功能组合起来,从而实现一系列功能,该一系列功能可以由用户通过操作触发。工程模块可以分为多个层级,例如,按照层级从大到小,依次为:文件级、类级以及函数方法级,文件级以及类级均为函数方法级的上级。
在存在调用关系的两个工程模块中,被调用的工程模块为发起调用关系的工程模块的子工程模块,发起调用关系的工程模块为被调用的工程模块的父工程模块,例如,不妨设工程模块A调用工程模块B,则工程模块A可称为工程模块B的父工程模块,工程模块B可称为工程模块A的子工程模块。
120、对于所述多个工程模块中的每个入口工程模块,根据所述每个入口工程模块被触发的次数、全部的入口工程模块被触发的次数,计算所述每个入口工程模块的得分值。
入口工程模块为没有父工程模块且有至少一个子工程模块的工程模块,即入口工程模块不会被其他工程模块调用,且会调用至少一个其他工程模块。被触发指的是因接收到预设操作而运行,该预设操作可以由用户执行,例如,用户点击实体按钮或显示界面上的按钮,或用户滑动实体滑块或显示界面上的滑块;该预设操作也可以由处理器执行,例如处理器发送预设指令。应当理解,预设操作的具体类型不应该理解为是对本申请的限制。
可选地,在一种具体实施方式中,步骤120可以包括如下步骤121至步骤123:
121、对第一入口工程模块的被触发的次数进行对数运算得到第一对数运算结果。
其中,第一入口工程模块为全部的入口工程模块中的任意一个入口工程模块。不妨设入口工程模块的数量为m个,第一入口工程模块为m个入口工程模块的任意一个,不妨记为a,其中,a∈[1,m],则第一入口工程模块的被触发的次数便记为Ma,第一对数运算结果便为log(Ma)。
122、对全部的入口工程模块中的每个入口工程模块的被触发的次数进行对数运算得到对应的对数运算结果,并计算所述每个入口工程模块对应的对数运算结果的加和,得到加和结果。
123、根据所述第一对数运算结果以及所述加和结果,计算所述第一入口工程模块的得分值。
在一种具体实施方式中,步骤123具体可以包括如下步骤:将所述第一对数运算结果与第一常数相加,得到第一加和;将所述加和结果与第二常数相加,得到第二加和;计算第一加和与所述第二加和的比值,所述比值为第一入口工程模块的得分值。
第一常数和第二常数均为正整数,将对数运算结果与正整数的常数相加,可以避免对数运算结果为0,在后续的运算过程中造成运算错误。
不妨设第一常数为1,第二常数为m,则第一入口工程模块的得分值CRa为:
应当理解,第一常数与第二常数也可以取其他的数值,在第一常数与第二常数均是正整数的情况下,其具体取值不应该理解为是对本申请的限制。
入口工程模块的得分值与自身被触发的次数呈正相关,反映了自身被触发的次数占全部入口工程模块被触发次数加和的比重。因此,可以通过得分值了解到一定时间内每个入口工程模块的重要度。通常来说,被触发的次数越多,重要度越高。
130、对于所述多个工程模块中的每个非入口工程模块,根据所述每个非入口工程模块的递归调用次数、该非入口工程模块的父工程模块的得分值、所述父工程模块调用自身的多个子工程模块的调用次数,计算所述每个非入口工程模块的得分值。
其中,所述非入口工程模块为有至少一个父工程模块的工程模块,即非入口工程模块被至少一个其他工程模块调用,非入口工程模块可以有子工程模块,也可以没有子工程模块,非入口工程模块是否有子工程模块不应该理解为是对本申请的限制。
可选地,在一种具体实施方式中,步骤130可以包括如下步骤131至步骤134:
131、根据第一非入口工程模块的多个父工程模块中的每个父工程模块的得分值,以及每个所述父工程模块调用自身的多个子工程模块的调用次数,计算每个所述父工程模块所对应的得分分量。
第一非入口工程模块为多个非入口工程模块中的任意一个非入口工程模块。对于第一非入口工程模块的多个父工程模块中的每个父工程模块,均需要计算其所对应的得分分量,计算过程具体可以包括如下步骤1311至步骤1313:
1311、计算父工程模块和所述第一非入口工程模块之间的第一调用权重值与该父工程模块的得分值的乘积,其中,所述第一调用权重值与所述父工程模块调用所述第一非入口工程模块的调用次数存在第一预设关系。
不妨设第一非入口工程模块记为p,第一非入口工程模块有n个父工程模块,本次计算的父工程模块为CR'i,父工程模块CR'i有ji个子工程模块,则第一非入口工程模块p为ji个子工程模块中的一个,p∈[1,ji]。
第一调用权重值为wip,将所述父工程模块调用所述第一非入口工程模块的调用次数记为L,则第一预设关系可以为对L进行对数运算,得到对数运算结果,并将对数运算结果与常数相加,例如:wip=log(L)+1。常数可以为1,也可以为其他数值。
第一调用权重值与该父工程模块的得分值的乘积为:wipCR'i。
该父工程模块的得分值的计算方式如下:
确定该父工程模块是入口工程模块还是非入口工程模块,若该父工程模块是入口工程模块,则可以按照步骤121至步骤123的过程进行运算;若该父工程模块是非入口工程模块,则按照步骤131至步骤134的过程进行运算。
也就是说,在进行工程模块的计算时,需要先计算出全部入口工程模块的得分值;然后对每个非入口工程模块,计算非入口工程模块中,全部的父工程模块的得分值均已知的非入口工程模块的得分值…依次类推,直到计算完全部的非入口工程模块的得分值。
1312、计算父工程模块与自身的多个子工程模块对应的多个调用权重值之间的权重值加和,其中,所述调用权重值与所述父工程模块调用对应的子工程模块的调用次数存在所述第一预设关系。
1313、计算所述乘积与所述权重值加和的比值,所述比值为所述父工程模块所对应的得分分量。
由上式可知,该父工程模块的得分分量与该父工程模块自身的得分值以及该父工程模块调用第一非入口工程模块的调用次数呈正相关。
132、计算多个父工程模块的所述得分分量的加和,得到得分分量加和。
133、对所述第一非入口工程模块的递归调用次数进行对数运算,得到递归对数运算结果。
不妨设第一非入口工程模块p的递归调用次数为N,则递归对数运算结果为log(N)。
134、计算所述递归对数运算结果与所述得分分量加和的加和值,所述加和值为所述第一非入口工程模块的得分值。
接上文的举例继续进行说明,第一非入口工程模块p的得分值为:
140、根据所述多个工程模块相互之间的调用关系、所述入口工程模块的得分值、以及非入口工程模块的得分值,生成调用关系的展示图。
可选地,步骤140具体可以包括如下步骤141至步骤143:
141、生成与所述入口工程模块以及非入口工程模块分别对应的节点。
142、根据所述多个工程模块相互之间的调用关系,确定节点之间单向箭头的指向。
入口工程模块与非入口工程模块均可以通过节点进行表示,节点之间单向箭头的指向可以反映工程模块之间的调用关系,例如,请参见图1b,节点1指向节点3可以理解为:节点1对应的工程模块调用节点3对应的工程模块。
143、根据入口工程模块以及所述非入口工程模块的得分值的多或少,确定对应节点的节点体积的大或小;或根据入口工程模块以及所述非入口工程模块的得分值的多或少,确定对应节点的节点颜色的深或浅。
在上述的实施方式中,可以利用节点体积的大或小表示节点对应的工程模块的得分值的多或少,例如,请参见图1b,体积越大,得分值越大;也可以利用节点颜色的深或浅表示节点对应的工程模块的得分值的多或少,例如,请参见图1b,颜色越深,得分值越大,颜色深浅可以通过饱和度值的大小来体现。应当理解,在展示图中体现工程模块的得分值的方式除了上述方式外,还可以包括其他方式,例如在节点的附近标示出得分值的数值,得分值的具体呈现方式不应该理解为是对本申请的限制。在展示图中,还可以将两个工程模块之间的调用总次数以及调用耗费的总时长标注在对应的两个节点的单向箭头处,请参见图1b。
可选地,在一种具体实施方式中,本申请实施例提供的调用关系的展示方法还可以包括:从存储器中获取全部工程模块的模块名;将所述模块名与存在调用关系的多个模块的模块名进行比对,筛选出不存在调用关系的模块;将所述不存在调用关系的模块呈现在所述展示图中的废弃模块展示区。
在上述的实施方式中,还可以获取存储器中存储的全部工程模块的模块名,并将全部的模块名与存在调用关系的模块的模块名进行比对,筛选出不存在调用关系的模块,可以将不存在调用关系的模块记为废弃模块,并将不存在调用关系的模块在展示图中的废弃区中呈现,详情请参见图1b。
本申请实施例提供的展示方法可以从存储器获取多个工程模块以及工程模块之间的调用关系,并且分别计算入口工程模块的得分值以及非入口工程模块的得分值,其中,入口工程模块的得分值与该入口工程模块被触发的次数有关,非入口工程模块的得分值与该非入口工程模块的父工程模块调用自身的多个子工程模块的调用次数、以及父工程模块自身的得分值有关。根据多个工程模块相互之间的调用关系、入口工程模块的得分值、以及非入口工程模块的得分值,生成调用关系的展示图。展示图中可以直观地呈现各工程模块之间的调用关系以及形象地反映每个工程模块与其他工程模块相互调用次数的多或少,从而便于开发人员方便快速地理解应用程序中的多个工程模块的运行逻辑。
借助展示图,可以帮助开发人员直观地辨认应用程序中的核心模块,以及核心模块与非核心模块之间的关系,也便于开发人员直观了解到修改某一模块的代码可能会对哪些工程模块产生影响;展示图还可以显示出废弃的工程模块。展示图通过展示工程模块之间的总调用时长,可以帮助开发人员辨别工程模块的性能瓶颈,从而对工程进行性能优化。
展示图可以通过任意一种前端展示方式进行展示,例如,可以是web应用、应用程序、图片等,具体的前端展示方式的形式不应该理解为是对本申请的限制。由于存储器中的工程模块以及工程模块之间的调用关系保持在更新,因此,上述的步骤110至步骤140可以周期性执行,从而使得展示图可以随着工程模块之间的调用关系的更新而更新。展示图也可以在用户的触发下,得到某一历史时间段的工程运行状态,实现工程运行状态的回溯。
本申请实施例还提供了一种工程模块调用关系的存储方法。如图2a所示,该展示方法的具体流程可以包括如下步骤210至步骤250:
210、监控多个内存堆栈的栈顶。
可以由工程工作日志采集模块(以下简称采集器)对多个内存堆栈的栈顶进行监控。可选地,应用程序有多个进程,每个进程均有对应的采集器,采集器可以对对应进程中的一个或多个线程进行监控,具体方法为:监控运行上述线程的内存堆栈的栈顶。
采集器可以通过函数装饰器的形式插入对应的进程,具体地,可以在不改变工程模块内部代码以及对外接口的情况下,在进程中设置一个采集数据的代码块。
220、若存在至少一个内存堆栈的栈顶记录的函数方法发生更新,确定所述栈顶更新前的函数方法调用所述栈顶更新后的函数方法,将所述栈顶更新前的函数方法记为调用者,所述栈顶更新后的函数方法记为被调用者。
若存在一内存堆栈的栈顶,其记录的函数方法发生更新,例如,由函数方法C更新为函数方法D,则说明函数方法C调用函数方法D,为便于描述,可以将栈顶更新前的函数方法记为调用者,将栈顶更新后的函数方法记为被调用者。
230、获取所述调用者的名称、所述调用者所属的上级工程的名称、所述被调用者的名称以及所述被调用者所属的上级工程的名称,其中,所述调用者以及所述被调用者与所述调用者所属的上级工程以及所述被调用者所属的上级工程属于不同层级的工程模块。
调用者所属的上级工程包括调用者所属的类、调用者所属的文件,被调用者所属的上级工程包括被调用者所属的类、被调用者所属的文件。其中,调用者与被调用者属于方法级的工程模块,调用者所属的类与被调用者所属的类属于类级的工程模块,调用者所属的文件与被调用者所属的文件属于文件级的工程模块。
在进行多个工程模块之间的调用关系的展示时,可以进行同一层级的工程模块之间的调用关系的展示,方便开发人员对同一层级的多个工程模块的重要度进行直观地了解,三种层级的调用关系的展示图可以便于开发人员得到不同层级的工程模块的不同视角的分析结果,使开发人员了解得更加全面,例如,要求类层级的调用关系的可视化,则将同一个类下的函数方法的调用日志进行聚合,以json键值对的格式向前端返回日志查询结果。其中,json的键为调用者-被调用者名称对,值为聚合得到的总调用时长,总调用次数以及各工程模块的得分值。
240、将所述调用者与被调用者之间的调用关系、所述调用者的名称、所述调用者所属的上级工程的名称、所述被调用者的名称、所述被调用者所属的上级工程的名称作为一条调用日志存入缓存。
调用日志可以通过哈希表的形式存入缓存中。可选地,步骤240具体可以包括如下步骤:判断所述缓存中是否已存储有所述调用者的名称、所述调用者所属的上级工程的名称、所述被调用者的名称、所述被调用者所属的上级工程的名称均相同的调用日志;若是,将所述缓存中已存储的调用日志的调用次数信息加一;若否,在所述缓存中存储所述调用日志。
在上述的实施方式中,可以根据调用者的名称、调用者所属的上级工程的名称、被调用者的名称、被调用者所属的上级工程的名称判断当前调用者是否是第一次调用当前的被调用者,若不是,则在缓存中已存储的调用日志中将调用次数加一;若是,则在缓存中新建一条调用日志。
缓存中的调用日志中在记录调用者和被调用者时,均可以按照:本体名-所属的类的名称-所属的文件的名称的形式进行记录。
可选地,调用日志除了存储上述信息外,还可以存储总调用时长、调用者的内存地址信息、以及被调用者的内存地址信息。总调用时长为同一调用者调用同一被调用者的调用时长的总和,其可以通过如下方式进行计算:
从某一内存堆栈的栈顶的方法函数更新为另一方法函数时,开始计时;当该内存堆栈的栈顶的方法函数恢复成更新前的方法函数时,停止计时,获得从开始计时至停止计时的时长,该时长为本次调用的时长。将每次相同的调用者调用相同的被调用者的调用时长进行累加,便可以得到总调用时长。
在缓存的调用日志中进行调用次数信息以及总调用时长的累加时,采集器可以先锁定其内容,不允许其他程序修改调用日志,直到采集器完成对调用次数信息以及总调用时长的累加后,再解除对调用日志的锁定。
可选地,在缓存中对调用日志进行缓存时,可以利用多线程共享内存空间的特性,对不同线程产生的调用日志进行合并,从而可以达到减少日志冗余的目的,节省缓存空间。
250、将缓存中存储的调用日志周期性地存入存储器。
调用日志存入存储器时,可以对哈希表的关键词部分构建多重查询索引。索引构建的层次依次为:调用者所属的文件、被调用者所属的文件、调用者所属的类、被调用者所属的类、调用者、被调用者。这种索引构建方法可以将同一层级中相同名称的工程模块聚合在一起,例如,将调用者所属的文件的文件名相同的调用日志聚合在一起;在此前提下,再将调用者所属的类的类名相同的调用日志聚合在一起;在此前提下,再将调用者的名称相同的调用日志聚合在一起……依次类推。这种索引构建方法利于提高日志查询的速度。
可选地,步骤240具体可以包括如下步骤:若距上一次将缓存中存储的调用日志存入存储器超过预设时间长度,或缓存中新增的调用日志的数量超过预设阈值,将缓存中存储的调用日志存入所述存储器。
在上述实施方式中,可以在以下两个条件:
距上一次将缓存中存储的调用日志存入存储器超过预设时间长度;
缓存中新增的调用日志的数量超过预设阈值;
任一条件发生时,将缓存中的调用日志存入存储器,从而可以提供存储器中存储的工程模块的调用关系的时效性。
在将缓存中存储的调用日志存入所述存储器,可以通过如下方式进行:
可以先对缓存中的全部调用日志进行锁定;此时,若有正处于读写状态的调用日志,则等待读写完毕后立刻对调用日志进行锁定。在完成对缓存中的全部调用日志的锁定之后,对上述的全部调用日志进行备份,并在备份完成后,解除对全部调用日志的锁定。
随后,再将备份的调用日志存入存储器;可以将调用日志存入数据库,也可以存入文件系统,调用日志的存储去向不应该理解为是对本申请的限制。在将备份存入存储器期间,缓存中的调用日志可以随着应用程序的运行而更新,备份则不做更新。在将备份的调用日志全部存入存储器后,将该备份删除。
可选地,在每次进行缓存中的调用日志的备份时,可以对缓存中的全部调用日志进行备份,这样可以保持数据的一致性,便于数据的追溯和恢复。
在本申请实施例提供的工程模块调用关系的存储方法中,通过监控多个内存堆栈的栈顶,可以获取在监控的时段内,存在调用关系的多个工程模块,并将这些工程模块以及工程模块之间的调用关系存储进存储器。上述获取调用关系以及存在调用关系的工程模块的过程可以自动执行,与现有技术由开发人员人工主动阅读源代码获取调用关系相比,节省了时间,提高了效率。
请参见图2b,在本申请实施例提供的方法中,可以由后端的采集器监控内存堆栈,从而实现调用日志的采集,并将调用日志存储在缓存中;通过备份并转存的方式,缓存中的调用日志可以被周期性地存储进存储器;随后处理器可以从存储器获取调用日志,并根据调用日志中的工程模块之间的调用关系,对工程模块进行得分值的计算,并依据存储器的调用日志以及工程模块的得分值,实现前端的可视化:展示图的生成并展示。
为了更好地实施以上方法,本申请实施例还提供一种调用关系的展示装置,该调用关系的展示装置具体可以集成在电子设备中,该电子设备可以为终端、服务器等设备。其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、个人电脑等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。
例如,如图3所示,该调用关系的展示装置可以包括:
调用关系获取单元310,用于从存储器中获取多个工程模块以及所述多个工程模块相互之间的调用关系,其中,所述工程模块由至少一行代码组成;在存在调用关系的两个工程模块中,被调用的工程模块为发起调用关系的工程模块的子工程模块,发起调用关系的工程模块为被调用的工程模块的父工程模块。
第一得分值计算单元320,用于对于所述多个工程模块中的每个入口工程模块,根据所述每个入口工程模块被触发的次数、全部的入口工程模块被触发的次数,计算所述每个入口工程模块的得分值,其中,所述入口工程模块为没有父工程模块且有至少一个子工程模块的工程模块。
第二得分值计算单元330,用于对于所述多个工程模块中的每个非入口工程模块,根据所述每个非入口工程模块的递归调用次数、该非入口工程模块的父工程模块的得分值、所述父工程模块调用自身的多个子工程模块的调用次数,计算所述每个非入口工程模块的得分值,其中,所述非入口工程模块为有至少一个父工程模块的工程模块。
展示图生成单元340,用于根据所述多个工程模块相互之间的调用关系、所述入口工程模块的得分值、以及非入口工程模块的得分值,生成调用关系的展示图。
可选地,第一得分值计算单元320,具体用于对第一入口工程模块的被触发的次数进行对数运算得到第一对数运算结果,其中,第一入口工程模块为全部的入口工程模块中的任意一个入口工程模块;
对全部的入口工程模块中的每个入口工程模块的被触发的次数进行对数运算得到对应的对数运算结果,并计算所述每个入口工程模块对应的对数运算结果的加和,得到加和结果;
根据所述第一对数运算结果以及所述加和结果,计算所述第一入口工程模块的得分值。
可选地,第一得分值计算单元320,还具体用于将所述第一对数运算结果与第一常数相加,得到第一加和;
将所述加和结果与第二常数相加,得到第二加和;
计算第一加和与所述第二加和的比值,所述比值为第一入口工程模块的得分值。
可选地,第二得分值计算单元330,具体用于根据第一非入口工程模块的多个父工程模块中的每个父工程模块的得分值,以及每个所述父工程模块调用自身的多个子工程模块的调用次数,计算每个所述父工程模块所对应的得分分量,其中,第一非入口工程模块为多个非入口工程模块中的任意一个非入口工程模块;
计算多个父工程模块的所述得分分量的加和,得到得分分量加和;
对所述第一非入口工程模块的递归调用次数进行对数运算,得到递归对数运算结果;
计算所述递归对数运算结果与所述得分分量加和的加和值,所述加和值为所述第一非入口工程模块的得分值。
可选地,第二得分值计算单元330,还具体用于计算父工程模块和所述第一非入口工程模块之间的第一调用权重值与该父工程模块的得分值的乘积,其中,所述第一调用权重值与所述父工程模块调用所述第一非入口工程模块的调用次数存在第一预设关系;
计算父工程模块与自身的多个子工程模块对应的多个调用权重值之间的权重值加和,其中,所述调用权重值与所述父工程模块调用对应的子工程模块的调用次数存在所述第一预设关系;
计算所述乘积与所述权重值加和的比值,所述比值为所述父工程模块所对应的得分分量。
可选地,展示图生成单元,具体用于生成与所述入口工程模块以及非入口工程模块分别对应的节点;
根据所述多个工程模块相互之间的调用关系,确定节点之间单向箭头的指向;
根据入口工程模块以及所述非入口工程模块的得分值的多或少,确定对应节点的节点体积的大或小;或根据入口工程模块以及所述非入口工程模块的得分值的多或少,确定对应节点的节点颜色的深或浅。
可选地,所述调用关系的展示装置还包括:
模块名获取单元,用于从存储器中获取全部工程模块的模块名;
名称筛选单元,用于将所述模块名与存在调用关系的多个模块的模块名进行比对,筛选出不存在调用关系的模块;
废弃模块展示单元,用于将所述不存在调用关系的模块呈现在所述展示图中的废弃模块展示区。
具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。
为了更好地实施以上方法,本申请实施例还提供一种工程模块调用关系的存储装置,该工程模块调用关系的存储装置具体可以集成在电子设备中,该电子设备可以为终端、服务器等设备。其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、个人电脑等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。
例如,如图4所示,该工程模块调用关系的存储装置可以包括:
栈顶监控单元410,用于监控多个内存堆栈的栈顶。
调用关系确定单元420,用于当存在至少一个内存堆栈的栈顶记录的函数方法发生更新时,确定所述栈顶更新前的函数方法调用所述栈顶更新后的函数方法,将所述栈顶更新前的函数方法记为调用者,所述栈顶更新后的函数方法记为被调用者。
工程模块获取单元430,用于获取所述调用者的名称、所述调用者所属的上级工程的名称、所述被调用者的名称以及所述被调用者所属的上级工程的名称,其中,所述调用者以及所述被调用者与所述调用者所属的上级工程以及所述被调用者所属的上级工程属于不同层级的工程模块。
日志缓存单元440,用于将所述调用者与被调用者之间的调用关系、所述调用者的名称、所述调用者所属的上级工程的名称、所述被调用者的名称、所述被调用者所属的上级工程的名称作为一条调用日志存入缓存。
日志存储单元450,用于将缓存中存储的调用日志周期性地存入存储器。
可选地,日志缓存单元440,具体用于判断所述缓存中是否已存储有所述调用者的名称、所述调用者所属的上级工程的名称、所述被调用者的名称、所述被调用者所属的上级工程的名称均相同的调用日志;若是,将所述缓存中已存储的调用日志的调用次数信息加一;若否,在所述缓存中存储所述调用日志。
可选地,日志存储单元450,具体用于当距上一次将缓存中存储的调用日志存入存储器超过预设时间长度时,或当缓存中新增的调用日志的数量超过预设阈值时,将缓存中存储的调用日志存入所述存储器。
具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。
相应的,本申请实施例还提供一种计算机设备,该计算机设备可以为终端或服务器,该终端可以为智能手机、平板电脑、笔记本电脑、触控屏幕、游戏机、个人计算机、个人数字助理(Personal Digital Assistant,PDA)等终端设备。
如图5所示,图5为本申请实施例提供的计算机设备的结构示意图,该计算机设备500包括有一个或者一个以上处理核心的处理器501、有一个或一个以上计算机可读存储介质的存储器502及存储在存储器502上并可在处理器上运行的计算机程序。其中,处理器501与存储器502电性连接。本领域技术人员可以理解,图中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
处理器501是计算机设备500的控制中心,利用各种接口和线路连接整个计算机设备500的各个部分,通过运行或加载存储在存储器502内的软件程序和/或模块,以及调用存储在存储器502内的数据,执行计算机设备500的各种功能和处理数据,从而对计算机设备500进行整体监控。
在本申请实施例中,计算机设备500中的处理器501会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器502中,并由处理器501来运行存储在存储器502中的应用程序,从而实现各种功能:
从存储器中获取多个工程模块以及所述多个工程模块相互之间的调用关系,其中,所述工程模块由至少一行代码组成;在存在调用关系的两个工程模块中,被调用的工程模块为发起调用关系的工程模块的子工程模块,发起调用关系的工程模块为被调用的工程模块的父工程模块;对于所述多个工程模块中的每个入口工程模块,根据所述每个入口工程模块被触发的次数、全部的入口工程模块被触发的次数,计算所述每个入口工程模块的得分值,其中,所述入口工程模块为没有父工程模块且有至少一个子工程模块的工程模块;对于所述多个工程模块中的每个非入口工程模块,根据所述每个非入口工程模块的递归调用次数、该非入口工程模块的父工程模块的得分值、所述父工程模块调用自身的多个子工程模块的调用次数,计算所述每个非入口工程模块的得分值,其中,所述非入口工程模块为有至少一个父工程模块的工程模块;根据所述多个工程模块相互之间的调用关系、所述入口工程模块的得分值、以及非入口工程模块的得分值,生成调用关系的展示图。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
可选的,如图5所示,计算机设备500还包括:触控显示屏503、射频电路504、音频电路505、输入单元506以及电源507。其中,处理器501分别与触控显示屏503、射频电路504、音频电路505、输入单元506以及电源507电性连接。本领域技术人员可以理解,图5中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
触控显示屏503可用于显示图形用户界面以及接收用户作用于图形用户界面产生的操作指令。触控显示屏503可以包括显示面板和触控面板。其中,显示面板可用于显示由用户输入的信息或提供给用户的信息以及计算机设备的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。可选的,可以采用液晶显示器(LCD,Liquid Crystal Display)、有机发光二极管(OLED,Organic Light-EmittingDiode)等形式来配置显示面板。触控面板可用于收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并生成相应的操作指令,且操作指令执行对应程序。可选的,触控面板可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器501,并能接收处理器501发来的命令并加以执行。触控面板可覆盖显示面板,当触控面板检测到在其上或附近的触摸操作后,传送给处理器501以确定触摸事件的类型,随后处理器501根据触摸事件的类型在显示面板上提供相应的视觉输出。在本申请实施例中,可以将触控面板与显示面板集成到触控显示屏503而实现输入和输出功能。但是在某些实施例中,触控面板与触控面板可以作为两个独立的部件来实现输入和输出功能。即触控显示屏503也可以作为输入单元506的一部分实现输入功能。
射频电路504可用于收发射频信号,以通过无线通信与网络设备或其他计算机设备建立无线通讯,与网络设备或其他计算机设备之间收发信号。
音频电路505可以用于通过扬声器、传声器提供用户与计算机设备之间的音频接口。音频电路505可将接收到的音频数据转换后的电信号,传输到扬声器,由扬声器转换为声音信号输出;另一方面,传声器将收集的声音信号转换为电信号,由音频电路505接收后转换为音频数据,再将音频数据输出处理器501处理后,经射频电路504以发送给比如另一计算机设备,或者将音频数据输出至存储器502以便进一步处理。音频电路505还可能包括耳塞插孔,以提供外设耳机与计算机设备的通信。
输入单元506可用于接收输入的数字、字符信息或用户特征信息(例如指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
电源507用于给计算机设备500的各个部件供电。可选的,电源507可以通过电源管理系统与处理器501逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源507还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管图5中未示出,计算机设备500还可以包括摄像头、传感器、无线保真模块、蓝牙模块等,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本申请实施例所提供的任一种调用关系的展示方法中的步骤。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该存储介质中所存储的计算机程序,可以执行本申请实施例所提供的任一种调用关系的展示方法中的步骤,因此,可以实现本申请实施例所提供的任一种调用关系的展示方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
以上对本申请实施例所提供的一种调用关系的展示方法、装置、存储介质及计算机设备进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (14)
1.一种调用关系的展示方法,其特征在于,所述方法包括:
从存储器中获取多个工程模块以及所述多个工程模块相互之间的调用关系,其中,在存在调用关系的两个工程模块中,被调用的工程模块为发起调用关系的工程模块的子工程模块,发起调用关系的工程模块为被调用的工程模块的父工程模块;
对于所述多个工程模块中的每个入口工程模块,根据所述每个入口工程模块被触发的次数、全部的入口工程模块被触发的次数,计算所述每个入口工程模块的得分值,其中,所述入口工程模块为没有父工程模块且有至少一个子工程模块的工程模块;
对于所述多个工程模块中的每个非入口工程模块,根据所述每个非入口工程模块的递归调用次数、该非入口工程模块的父工程模块的得分值、所述父工程模块调用自身的多个子工程模块的调用次数,计算所述每个非入口工程模块的得分值,其中,所述非入口工程模块为有至少一个父工程模块的工程模块;
根据所述多个工程模块相互之间的调用关系、所述入口工程模块的得分值、以及非入口工程模块的得分值,生成调用关系的展示图。
2.如权利要求1所述的方法,其特征在于,所述根据所述每个入口工程模块被触发的次数、全部的入口工程模块被触发的次数,计算所述每个入口工程模块的得分值,包括:
对第一入口工程模块的被触发的次数进行对数运算得到第一对数运算结果,其中,第一入口工程模块为全部的入口工程模块中的任意一个入口工程模块;
对全部的入口工程模块中的每个入口工程模块的被触发的次数进行对数运算得到对应的对数运算结果,并计算所述每个入口工程模块对应的对数运算结果的加和,得到加和结果;
根据所述第一对数运算结果以及所述加和结果,计算所述第一入口工程模块的得分值。
3.如权利要求2所述的方法,其特征在于,所述根据所述第一对数运算结果以及所述加和结果,计算所述第一入口工程模块的得分值,包括:
将所述第一对数运算结果与第一常数相加,得到第一加和;
将所述加和结果与第二常数相加,得到第二加和;
计算第一加和与所述第二加和的比值,所述比值为第一入口工程模块的得分值。
4.如权利要求1所述的方法,其特征在于,所述根据所述每个非入口工程模块的递归调用次数、该非入口工程模块的父工程模块的得分值、所述父工程模块调用自身的多个子工程模块的调用次数,计算所述每个非入口工程模块的得分值,包括:
根据第一非入口工程模块的多个父工程模块中的每个父工程模块的得分值,以及每个所述父工程模块调用自身的多个子工程模块的调用次数,计算每个所述父工程模块所对应的得分分量,其中,第一非入口工程模块为多个非入口工程模块中的任意一个非入口工程模块;
计算多个父工程模块的所述得分分量的加和,得到得分分量加和;
对所述第一非入口工程模块的递归调用次数进行对数运算,得到递归对数运算结果;
计算所述递归对数运算结果与所述得分分量加和的加和值,所述加和值为所述第一非入口工程模块的得分值。
5.如权利要求4所述的方法,其特征在于,所述根据第一非入口工程模块的多个父工程模块中的每个父工程模块的得分值,以及每个所述父工程模块调用自身的多个子工程模块的调用次数,计算每个所述父工程模块所对应的得分分量,包括:
计算父工程模块和所述第一非入口工程模块之间的第一调用权重值与该父工程模块的得分值的乘积,其中,所述第一调用权重值与所述父工程模块调用所述第一非入口工程模块的调用次数存在第一预设关系;
计算父工程模块与自身的多个子工程模块对应的多个调用权重值之间的权重值加和,其中,所述调用权重值与所述父工程模块调用对应的子工程模块的调用次数存在所述第一预设关系;
计算所述乘积与所述权重值加和的比值,所述比值为所述父工程模块所对应的得分分量。
6.如权利要求1所述的方法,其特征在于,所述根据所述多个工程模块相互之间的调用关系、所述入口工程模块的得分值、以及非入口工程模块的得分值,生成调用关系的展示图,包括:
生成与所述入口工程模块以及非入口工程模块分别对应的节点;
根据所述多个工程模块相互之间的调用关系,确定节点之间单向箭头的指向;
根据入口工程模块以及所述非入口工程模块的得分值的多或少,确定对应节点的节点体积的大或小;或
根据入口工程模块以及所述非入口工程模块的得分值的多或少,确定对应节点的节点颜色的深或浅。
7.如权利要求1所述的方法,其特征在于,所述方法还包括:
从存储器中获取全部工程模块的模块名;
将所述模块名与存在调用关系的多个模块的模块名进行比对,筛选出不存在调用关系的模块;
将所述不存在调用关系的模块呈现在所述展示图中的废弃模块展示区。
8.一种工程模块调用关系的存储方法,其特征在于,所述方法包括:
监控多个内存堆栈的栈顶;
若存在至少一个内存堆栈的栈顶记录的函数方法发生更新,确定所述栈顶更新前的函数方法调用所述栈顶更新后的函数方法,将所述栈顶更新前的函数方法记为调用者,所述栈顶更新后的函数方法记为被调用者;
获取所述调用者的名称、所述调用者所属的上级工程的名称、所述被调用者的名称以及所述被调用者所属的上级工程的名称,其中,所述调用者以及所述被调用者与所述调用者所属的上级工程以及所述被调用者所属的上级工程属于不同层级的工程模块;
将所述调用者与被调用者之间的调用关系、所述调用者的名称、所述调用者所属的上级工程的名称、所述被调用者的名称、所述被调用者所属的上级工程的名称作为一条调用日志存入缓存;
将缓存中存储的调用日志周期性地存入存储器。
9.如权利要求8所述的方法,其特征在于,所述将所述调用者与被调用者之间的调用关系、所述调用者的名称、所述调用者所属的上级工程的名称、所述被调用者的名称、所述被调用者所属的上级工程的名称作为一条调用日志存入缓存,包括:
判断所述缓存中是否已存储有所述调用者的名称、所述调用者所属的上级工程的名称、所述被调用者的名称、所述被调用者所属的上级工程的名称均相同的调用日志;
若是,将所述缓存中已存储的调用日志的调用次数信息加一;
若否,在所述缓存中存储所述调用日志。
10.如权利要求8所述的方法,其特征在于,所述将缓存中存储的调用日志周期性地存入存储器,包括:
若距上一次将缓存中存储的调用日志存入存储器超过预设时间长度,或缓存中新增的调用日志的数量超过预设阈值,将缓存中存储的调用日志存入所述存储器。
11.一种调用关系的展示装置,其特征在于,所述装置包括:
调用关系获取单元,用于从存储器中获取多个工程模块以及所述多个工程模块相互之间的调用关系,其中,所述工程模块由至少一行代码组成;在存在调用关系的两个工程模块中,被调用的工程模块为发起调用关系的工程模块的子工程模块,发起调用关系的工程模块为被调用的工程模块的父工程模块;
第一得分值计算单元,用于对于所述多个工程模块中的每个入口工程模块,根据所述每个入口工程模块被触发的次数、全部的入口工程模块被触发的次数,计算所述每个入口工程模块的得分值,其中,所述入口工程模块为没有父工程模块且有至少一个子工程模块的工程模块;
第二得分值计算单元,用于对于所述多个工程模块中的每个非入口工程模块,根据所述每个非入口工程模块的递归调用次数、该非入口工程模块的父工程模块的得分值、所述父工程模块调用自身的多个子工程模块的调用次数,计算所述每个非入口工程模块的得分值,其中,所述非入口工程模块为有至少一个父工程模块的工程模块;
展示图生成单元,用于根据所述多个工程模块相互之间的调用关系、所述入口工程模块的得分值、以及非入口工程模块的得分值,生成调用关系的展示图。
12.一种工程模块调用关系的存储装置,其特征在于,所述装置包括:
栈顶监控单元,用于监控多个内存堆栈的栈顶;
调用关系确定单元,用于当存在至少一个内存堆栈的栈顶记录的函数方法发生更新时,确定所述栈顶更新前的函数方法调用所述栈顶更新后的函数方法,将所述栈顶更新前的函数方法记为调用者,所述栈顶更新后的函数方法记为被调用者;
工程模块获取单元,用于获取所述调用者的名称、所述调用者所属的上级工程的名称、所述被调用者的名称以及所述被调用者所属的上级工程的名称,其中,所述调用者以及所述被调用者与所述调用者所属的上级工程以及所述被调用者所属的上级工程属于不同层级的工程模块;
日志缓存单元,用于将所述调用者与被调用者之间的调用关系、所述调用者的名称、所述调用者所属的上级工程的名称、所述被调用者的名称、所述被调用者所属的上级工程的名称作为一条调用日志存入缓存;
日志存储单元,用于将缓存中存储的调用日志周期性地存入存储器。
13.一种计算机设备,其特征在于,包括处理器和存储器,所述存储器存储有多条指令;所述处理器从所述存储器中加载指令,以执行如权利要求1~10任一项所述的调用关系的展示方法中的步骤。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行如权利要求1~10任一项所述的调用关系的展示方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110825837.XA CN113419795B (zh) | 2021-07-21 | 2021-07-21 | 调用关系的展示方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110825837.XA CN113419795B (zh) | 2021-07-21 | 2021-07-21 | 调用关系的展示方法、装置、计算机设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113419795A true CN113419795A (zh) | 2021-09-21 |
CN113419795B CN113419795B (zh) | 2022-05-03 |
Family
ID=77718000
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110825837.XA Active CN113419795B (zh) | 2021-07-21 | 2021-07-21 | 调用关系的展示方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113419795B (zh) |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1535150A2 (en) * | 2002-03-18 | 2005-06-01 | Sun Microsystems, Inc. | Method and apparatus for deployment of high integrity software using initialization order and calling order constraints |
US20140109070A1 (en) * | 2012-10-11 | 2014-04-17 | Tata Consultancy Services Limited | System and method for configurable entry points generation and aiding validation in a software application |
CN104899016A (zh) * | 2014-03-07 | 2015-09-09 | 腾讯科技(深圳)有限公司 | 调用堆栈关系获取方法及装置 |
US20170161038A1 (en) * | 2014-09-18 | 2017-06-08 | Facebook, Inc. | Code placement using a dynamic call graph |
US20170255544A1 (en) * | 2016-03-01 | 2017-09-07 | Sap Se | Assessing vulnerability impact using call graphs |
US20170286253A1 (en) * | 2016-03-31 | 2017-10-05 | International Business Machines Corporation | Optimization for application runtime monitoring |
CN108920618A (zh) * | 2018-06-28 | 2018-11-30 | 泰康保险集团股份有限公司 | 一种对象调用关系的保存方法、装置、介质及电子设备 |
US20190087453A1 (en) * | 2017-09-20 | 2019-03-21 | Kabushiki Kaisha Toshiba | Data search system, data search method, and program product |
CN110489219A (zh) * | 2019-08-05 | 2019-11-22 | 北京字节跳动网络技术有限公司 | 一种调度功能对象的方法、装置、介质和电子设备 |
US20200074080A1 (en) * | 2018-08-28 | 2020-03-05 | AlienVault, Inc. | Malware clustering based on function call graph similarity |
CN111443902A (zh) * | 2020-03-20 | 2020-07-24 | 杭州有赞科技有限公司 | 函数调用树生成方法、系统、计算机设备及可读存储介质 |
CN111913764A (zh) * | 2020-08-07 | 2020-11-10 | 掌阅科技股份有限公司 | 服务依赖分析方法、电子设备及存储介质 |
CN112364107A (zh) * | 2020-11-10 | 2021-02-12 | 平安普惠企业管理有限公司 | 系统分析可视化方法、装置、电子设备及计算机可读存储介质 |
CN112540808A (zh) * | 2019-09-23 | 2021-03-23 | 腾讯科技(深圳)有限公司 | 一种程序行为层级调用关系的记录方法及相关设备 |
-
2021
- 2021-07-21 CN CN202110825837.XA patent/CN113419795B/zh active Active
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1535150A2 (en) * | 2002-03-18 | 2005-06-01 | Sun Microsystems, Inc. | Method and apparatus for deployment of high integrity software using initialization order and calling order constraints |
US20140109070A1 (en) * | 2012-10-11 | 2014-04-17 | Tata Consultancy Services Limited | System and method for configurable entry points generation and aiding validation in a software application |
CN104899016A (zh) * | 2014-03-07 | 2015-09-09 | 腾讯科技(深圳)有限公司 | 调用堆栈关系获取方法及装置 |
US20170161038A1 (en) * | 2014-09-18 | 2017-06-08 | Facebook, Inc. | Code placement using a dynamic call graph |
US20170255544A1 (en) * | 2016-03-01 | 2017-09-07 | Sap Se | Assessing vulnerability impact using call graphs |
US20170286253A1 (en) * | 2016-03-31 | 2017-10-05 | International Business Machines Corporation | Optimization for application runtime monitoring |
US20190087453A1 (en) * | 2017-09-20 | 2019-03-21 | Kabushiki Kaisha Toshiba | Data search system, data search method, and program product |
CN108920618A (zh) * | 2018-06-28 | 2018-11-30 | 泰康保险集团股份有限公司 | 一种对象调用关系的保存方法、装置、介质及电子设备 |
US20200074080A1 (en) * | 2018-08-28 | 2020-03-05 | AlienVault, Inc. | Malware clustering based on function call graph similarity |
CN110489219A (zh) * | 2019-08-05 | 2019-11-22 | 北京字节跳动网络技术有限公司 | 一种调度功能对象的方法、装置、介质和电子设备 |
CN112540808A (zh) * | 2019-09-23 | 2021-03-23 | 腾讯科技(深圳)有限公司 | 一种程序行为层级调用关系的记录方法及相关设备 |
CN111443902A (zh) * | 2020-03-20 | 2020-07-24 | 杭州有赞科技有限公司 | 函数调用树生成方法、系统、计算机设备及可读存储介质 |
CN111913764A (zh) * | 2020-08-07 | 2020-11-10 | 掌阅科技股份有限公司 | 服务依赖分析方法、电子设备及存储介质 |
CN112364107A (zh) * | 2020-11-10 | 2021-02-12 | 平安普惠企业管理有限公司 | 系统分析可视化方法、装置、电子设备及计算机可读存储介质 |
Non-Patent Citations (5)
Title |
---|
DAVID GROVE: "Call graph construction in object-oriented languages", 《HTTPS://DL.ACM.ORG/DOI/10.1145/263700.264352》 * |
ROBOTCODE俱乐部: "函数调用之堆栈原理(一)", 《HTTPS://ZHUANLAN.ZHIHU.COM/P/54855274 3/》 * |
人月聊IT: "再谈服务调用关系可视化实现(12.4)", 《BLOG.SINA.COM.CN/S/BLOG_493A84550102YJTC.HTML》 * |
城市里的元: "【分布式系统篇】链路追踪之Jaeger安装&使用入门", 《HTTPS://BLOG.CSDN.NET/SC_LILEI/ARTICLE/DETAILS/107834597》 * |
姚一号: "微服务间服务(接口)调用关系你还在手工记录吗", 《HTTPS://BLOG.CSDN.NET/MINGLIANGNIWO/ARTICLE/DETAILS/104871874》 * |
Also Published As
Publication number | Publication date |
---|---|
CN113419795B (zh) | 2022-05-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10459779B2 (en) | Alert dashboard system and method from event clustering | |
CN109284261B (zh) | 应用查找方法、装置、存储介质及电子设备 | |
US10146851B2 (en) | Decomposing events from managed infrastructures using graph entropy | |
US10237119B2 (en) | Decomposing events from managed infrastructures using graph entropy | |
WO2019024646A1 (zh) | 应用管控方法、装置及电子设备 | |
CN113419874A (zh) | 接口请求的触发方法、装置、存储介质及计算机设备 | |
CN112231144A (zh) | 一种数据处理方法、装置及电子设备 | |
US10554479B2 (en) | Alert dashboard system with situation room | |
CN112235629B (zh) | 一种弹幕屏蔽方法、装置、计算机设备和存储介质 | |
CN112817582A (zh) | 代码处理方法、装置、计算机设备和存储介质 | |
CN113419795B (zh) | 调用关系的展示方法、装置、计算机设备及存储介质 | |
US11159364B2 (en) | System in communication with a managed infrastructure | |
CN112463626B (zh) | 内存泄漏定位方法、装置、计算机设备及存储介质 | |
CN115469937A (zh) | 插件运行方法、装置、电子设备及存储介质 | |
CN113485600A (zh) | 歌单的分享方法、装置和电子设备 | |
CN112783860B (zh) | 构造镜像数据库的方法、装置、存储介质及计算机设备 | |
CN113961585A (zh) | 数据处理方法、装置、电子设备和存储介质 | |
US10572277B2 (en) | Alert dashboard system with situation room | |
US11888709B2 (en) | Alert dashboard system with situation room | |
CN112905563A (zh) | 签到数据的处理方法、装置、存储介质及计算机设备 | |
CN114691145A (zh) | 代码处理方法、装置、计算机设备和存储介质 | |
CN116186333A (zh) | 用户事件索引方法、装置、电子设备和存储介质 | |
CN112316416A (zh) | 数据搜索方法、装置、计算机设备及存储介质 | |
CN116383053A (zh) | 软件代码缺陷检测方法、装置、介质及设备 | |
CN115202909A (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 |