一种代码动态分析的方法及装置制造方法及图纸

技术编号:9667795 阅读:61 留言:0更新日期:2014-02-14 06:06
本发明专利技术提供了一种代码动态分析的方法及装置,其中代码动态分析的方法包括:A.在代码的模块调用处插入监听器,其中所述监听器用于在该处的调用发生时输出与该次调用相关的日志信息;B.运行插入监听器后的代码,以输出由一条以上的日志信息构成的日志文件;C.根据所述日志文件确定所述代码的分析结果,其中所述代码的分析结果用于表示所述代码运行时的模块调用关系。通过上述方式,本发明专利技术可以有效地对代码运行时的模块调用状况进行监控,从而提高代码质量,降低代码维护的难度。

【技术实现步骤摘要】
一种代码动态分析的方法及装置
】本专利技术涉及代码分析的技术,特别涉及一种代码动态分析的方法及装置。【
技术介绍
】随着软件技术的发展,软件产品在为人们带来便利的同时,也变得越来越复杂,尤其是企业级的各种软件,其代码量巨大,这增加了开发人员掌握软件整体结构的难度,也使得软件中的缺陷产生的原因不容易被发现,从而导致了软件维护上的困难。为了更好地对软件进行监控和维护,现有技术提出了对软件代码进行静态分析的方法。通过对软件代码进行静态分析,虽然可以了解代码的模块之间的相互依赖关系,然而,这种静态分析方法无法对代码动态运行时的状况进行监控。可以理解,在软件系统的初始输入不同时,软件系统很可能运行不同的分支,而运行不同的分支会导致不同的结果,在有的程序分支下代码的运行或许是正常的,在有的程序分支下代码的运行有可能就会出现异常。这种由于代码动态运行时导致的错误不可能通过代码静态分析被发现,也就是说,现有的代码静态分析技术,无法有效掌握代码动态运行时发生的错误,增加了软件监控和维护的难度。【
技术实现思路
】本专利技术所要解决的技术问题是提供一种代码动态分析的方法及装置,以解决现有技术中存在的软件监控和维护困难的问题。本专利技术为解决技术问题而采用的技术方案是提供一种代码动态分析的方法,包括:A.在代码的模块调用处插入监听器,其中所述监听器用于在该处的调用发生时输出与该次调用相关的日志信息运行插入监听器后的代码,以输出由一条以上的日志信息构成的日志文件;C.根据所述日志文件确定所述代码的分析结果,其中所述代码的分析结果用于表示所述代码运行时的模块调用关系。根据本专利技术之一优选实施例,所述步骤C包括:根据所述日志文件中各条日志信息记录的主调模块与被调模块,绘制从主调模块到被调模块的连线,以得到所述代码在整个运行期间的模块调用关系图,并将所述模块调用关系图作为所述代码的分析结果。根据本专利技术之一优选实施例,所述步骤C包括:C1.根据所述日志文件中的各条日志信息,绘制所述代码在运行期间的每个关键时刻的调用进度图像帧;C2.利用每个关键时刻的调用进度图像帧,生成动态图像文档,并将所述动态图像文档作为所述代码的分析结果,其中所述动态图像文档描述了所述代码在多个运行时刻的模块调用进度。根据本专利技术之一优选实施例,所述步骤Cl包括:C11.提取各条日志信息中记录的调用的开始时刻和结束时刻中的至少一个时刻作为所`述代码在运行期间的关键时刻;C12.针对每个关键时刻,确定该关键时刻同时进行的调用,计算同时进行的调用中的每个调用在该关键时刻的进度,并依据每个调用的进度绘制该关键时刻的调用进度图像帧。根据本专利技术之一优选实施例,所述步骤C12中,确定关键时刻T同时进行的调用的步骤包括:判断各条日志信息中记录的调用的开始时刻和结束时刻构成的封闭区间是否覆盖T,如果是,则将覆盖T的封闭区间对应的调用提取出来作为在关键时刻T同时进行的调用中的一个。根据本专利技术之一优选实施例,所述步骤C12中,计算同时进行的调用中的每个调用在关键时刻T的进度的步骤包括:根据各条日志信息中记录的线程标识,确定同时进行的调用中的任意一个调用X在同一个线程中的所有子调用,将X在同一个线程中的所有子调用按照调用的时间顺序排列,得到X的子调用序列;利用X的子调用序列计算X在关键时刻T的进度,其中:当X的第一个子调用的开始时刻大于关键时刻T时,确定X属于去程调 kev time —X si ime用,且去程调用的进度采用下列公式计算:职=; y.——-,其中go表示去程 call., _ sume, - \ _、fmw调用的进度、key—time表示关键时刻T、x—stime表示X的开始时刻、calh—stime表示X的第一个子调用的开始时刻;当关键时刻T大于X的最后一个子调用的结束时刻时,确定X属 7 7 X etime - kev lime于返程调用,且返程调用的进度釆用下列公式计算—k 二 -y ~,其中 λ* eumc - call etrme —η back表示返程调用的进度、x_etime表示X的结束时刻、calln_etime表示X的最后一个子调用的结束时刻。根据本专利技术之一优选实施例,所述动态图像文档包括:幻灯片文档、动画文档或视频文档。根据本专利技术之一优选实施例,所述步骤A中,至少在以下类型之一的模块调用处插入监听器:服务访问型调用或事件通知型调用。本专利技术还提供了一种代码动态分析的装置,包括:插入单元,用于在代码的模块调用处插入监听器,其中所述监听器用于在该处的调用发生时输出与该次调用相关的日志信息;输出单元,用于运行插入监听器后的代码,以输出由一条以上的日志信息构成的日志文件;确定单元,用于根据所述日志文件确定所述代码的分析结果,其中所述代码的分析结果用于表示所述代码运行时的模块调用关系。根据本专利技术之一优选实施例,所述确定单元包括:图生成单元,用于根据所述日志文件中各条日志信息记录的主调模块与被调模块,绘制从主调模块到被调模块的连线,以得到所述代码在整个运行期间的模块调用关系图,并将所述模块调用关系图作为所述代码的分析结果。根据本专利技术之一优选实施例,所述确定单元包括:图像帧生成单元,用于根据所述日志文件中的各条日志信息,绘制所述代码在运行期间的每个关键时刻的调用进度图像帧;文档生成单元,用于利用每个关键时刻的调用进度图像帧,生成动态图像文档,并将所述动态图像文档作为所述代码的分析结果,其中所述动态图像文档描述了所述代码在多个运行时刻的模块调用进度。根据本专利技术之一优选实施例,所述图像帧生成单元包括:关键时刻确定单元,用于提取各条日志信息中记录的调用的开始时刻和结束时刻中的至少一个时刻作为所述代码在运行期间的关键时刻;进度绘制单元,用于针对每个关键时刻,确定该关键时刻同时进行的调用,计算同时进行的调用中每个调用在该关键时刻的进度,并依据每个调用的进度绘制该关键时刻的调用进度图像帧。根据本专利技术之一优选实施例,所述进度绘制单元确定关键时刻T同时进行的调用的方式包括:判断各条日志信息中记录的调用的开始时刻和结束时刻构成的封闭区间是否覆盖T,如果是,则将覆盖T的封闭区间对应的调用提取出来作为在关键时刻T同时进行的调用中的一个。根据本专利技术之一优选实施例,所述进度绘制单元计算同时进行的调用中的每个调用在关键时刻T的进度的方式包括:根据各条日志信息中记录的线程标识,确定同时进行的调用中的任意一个调用X在同一个线程中的所有子调用,将X在同一个线程中的所有子调用按照调用的时间顺序排列,得到X的子调用序列;利用X的子调用序列计算X在关键时刻T的进度,其中:当X的第一个子调用的开始时刻大于关键时刻T时,确定X属于去程调用,且去程调用的进度采用下列公式计算:本文档来自技高网...

【技术保护点】
一种代码动态分析的方法,包括:A.在代码的模块调用处插入监听器,其中所述监听器用于在该处的调用发生时输出与该次调用相关的日志信息;B.运行插入监听器后的代码,以输出由一条以上的日志信息构成的日志文件;C.根据所述日志文件确定所述代码的分析结果,其中所述代码的分析结果用于表示所述代码运行时的模块调用关系。

【技术特征摘要】
1.一种代码动态分析的方法,包括: A.在代码的模块调用处插入监听器,其中所述监听器用于在该处的调用发生时输出与该次调用相关的日志信息; B.运行插入监听器后的代码,以输出由一条以上的日志信息构成的日志文件; C.根据所述日志文件确定所述代码的分析结果,其中所述代码的分析结果用于表示所述代码运行时的模块调用关系。2.根据权利要求1所述的方法,其特征在于,所述步骤C包括: 根据所述日志文件中各条日志信息记录的主调模块与被调模块,绘制从主调模块到被调模块的连线,以得到所述代码在整个运行期间的模块调用关系图,并将所述模块调用关系图作为所述代码的分析结果。3.根据权利要求1所述的方法,其特征在于,所述步骤C包括: Cl.根据所述日志文件中的各条日志信息,绘制所述代码在运行期间的每个关键时刻的调用进度图像帧; C2.利用每个关键时刻的调用进度图像帧,生成动态图像文档,并将所述动态图像文档作为所述代码的分析结果,其中所述动态图像文档描述了所述代码在多个运行时刻的模块调用进度。4.根据权利要求3所述的方法,其特征在于,所述步骤Cl包括: Cll.提取各条日志信息中记录的调用的开始时刻和结束时刻中的至少一个时刻作为所述代码在运行期间的关键时刻; C12.针对每个关键时刻,确定该关键时刻同时进行的调用,计算同时进行的调用中的每个调用在该关键时刻的进度,并依据每个调用的进度绘制该关键时刻的调用进度图像帧。5.根据权利要求4所述的方法,其特征在于,所述步骤C12中,确定关键时刻T同时进行的调用的步骤包括: 判断各条日志信息中记录的调用的开始时刻和结束时刻构成的封闭区间是否覆盖T,如果是,则将覆盖T的封闭区间对应的调用提取出来作为在关键时刻T同时进行的调用中的一个。6.根据权利要求4所述的方法,其特征在于,所述步骤C12中,计算同时进行的调用中的每个调用在关键时刻T的进度的步骤包括: 根据各条日志信息中记录的线程标识,确定同时进行的调用中的任意一个调用X在同一个线程中的所有子调用,将X在同一个线程中的所有子调用按照调用的时间顺序排列,得到X的子调用序列; 利用X的子调用序列计算X在关键时刻T的进度,其中: 当X的第一个子调用的开始时刻大于关键时刻T时,确定X属于去程调用,且去程调kev lime.- x slime用的进度采用下列公式计算二,其中go表示去程调用的进度、 7.根据权利要求3所述的方法,其特征在于,所述动态图像文档包括:幻灯片文档、动画文档或视频文档。8.根据权利要求1所述的方法,其特征在于,所述步骤A中,至少在以下类型之一的模块调用处插入监听器:服务访问型调用或事件通知型调用。9.一种代码动...

【专利技术属性】
技术研发人员:栾涛
申请(专利权)人:百度在线网络技术北京有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1