CN103577304A - 一种代码动态分析的方法及装置 - Google Patents
一种代码动态分析的方法及装置 Download PDFInfo
- Publication number
- CN103577304A CN103577304A CN201210285223.8A CN201210285223A CN103577304A CN 103577304 A CN103577304 A CN 103577304A CN 201210285223 A CN201210285223 A CN 201210285223A CN 103577304 A CN103577304 A CN 103577304A
- Authority
- CN
- China
- Prior art keywords
- calling
- code
- progress
- calls
- crucial moment
- 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
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种代码动态分析的方法及装置,其中代码动态分析的方法包括:A.在代码的模块调用处******,其中所述***用于在该处的调用发生时输出与该次调用相关的日志信息;B.运行******后的代码,以输出由一条以上的日志信息构成的日志文件;C.根据所述日志文件确定所述代码的分析结果,其中所述代码的分析结果用于表示所述代码运行时的模块调用关系。通过上述方式,本发明可以有效地对代码运行时的模块调用状况进行监控,从而提高代码质量,降低代码维护的难度。
Description
【技术领域】
本发明涉及代码分析的技术,特别涉及一种代码动态分析的方法及装置。
【背景技术】
随着软件技术的发展,软件产品在为人们带来便利的同时,也变得越来越复杂,尤其是企业级的各种软件,其代码量巨大,这增加了开发人员掌握软件整体结构的难度,也使得软件中的缺陷产生的原因不容易被发现,从而导致了软件维护上的困难。为了更好地对软件进行监控和维护,现有技术提出了对软件代码进行静态分析的方法。通过对软件代码进行静态分析,虽然可以了解代码的模块之间的相互依赖关系,然而,这种静态分析方法无法对代码动态运行时的状况进行监控。可以理解,在软件***的初始输入不同时,软件***很可能运行不同的分支,而运行不同的分支会导致不同的结果,在有的程序分支下代码的运行或许是正常的,在有的程序分支下代码的运行有可能就会出现异常。这种由于代码动态运行时导致的错误不可能通过代码静态分析被发现,也就是说,现有的代码静态分析技术,无法有效掌握代码动态运行时发生的错误,增加了软件监控和维护的难度。
【发明内容】
本发明所要解决的技术问题是提供一种代码动态分析的方法及装置,以解决现有技术中存在的软件监控和维护困难的问题。
本发明为解决技术问题而采用的技术方案是提供一种代码动态分析的方法,包括:A.在代码的模块调用处******,其中所述***用于在该处的调用发生时输出与该次调用相关的日志信息;B.运行******后的代码,以输出由一条以上的日志信息构成的日志文件;C.根据所述日志文件确定所述代码的分析结果,其中所述代码的分析结果用于表示所述代码运行时的模块调用关系。
根据本发明之一优选实施例,所述步骤C包括:根据所述日志文件中各条日志信息记录的主调模块与被调模块,绘制从主调模块到被调模块的连线,以得到所述代码在整个运行期间的模块调用关系图,并将所述模块调用关系图作为所述代码的分析结果。
根据本发明之一优选实施例,所述步骤C包括:C1.根据所述日志文件中的各条日志信息,绘制所述代码在运行期间的每个关键时刻的调用进度图像帧;C2.利用每个关键时刻的调用进度图像帧,生成动态图像文档,并将所述动态图像文档作为所述代码的分析结果,其中所述动态图像文档描述了所述代码在多个运行时刻的模块调用进度。
根据本发明之一优选实施例,所述步骤C1包括:C11.提取各条日志信息中记录的调用的开始时刻和结束时刻中的至少一个时刻作为所述代码在运行期间的关键时刻;C12.针对每个关键时刻,确定该关键时刻同时进行的调用,计算同时进行的调用中的每个调用在该关键时刻的进度,并依据每个调用的进度绘制该关键时刻的调用进度图像帧。
根据本发明之一优选实施例,所述步骤C12中,确定关键时刻T同时进行的调用的步骤包括:判断各条日志信息中记录的调用的开始时刻和结束时刻构成的封闭区间是否覆盖T,如果是,则将覆盖T的封闭区间对应的调用提取出来作为在关键时刻T同时进行的调用中的一个。
根据本发明之一优选实施例,所述步骤C12中,计算同时进行的调用中的每个调用在关键时刻T的进度的步骤包括:根据各条日志信息中记录的线程标识,确定同时进行的调用中的任意一个调用X在同一个线程中的所有子调用,将X在同一个线程中的所有子调用按照调用的时间顺序排列,得到X的子调用序列;利用X的子调用序列计算X在关键时刻T的进度,其中:当X的第一个子调用的开始时刻大于关键时刻T时,确定X属于去程调用,且去程调用的进度采用下列公式计算:其中go表示去程调用的进度、key_time表示关键时刻T、x_stime表示X的开始时刻、call1_stime表示X的第一个子调用的开始时刻;当关键时刻T大于X的最后一个子调用的结束时刻时,确定X属于返程调用,且返程调用的进度采用下列公式计算:其中back表示返程调用的进度、x_etime表示X的结束时刻、calln_etime表示X的最后一个子调用的结束时刻。
根据本发明之一优选实施例,所述动态图像文档包括:幻灯片文档、动画文档或视频文档。
根据本发明之一优选实施例,所述步骤A中,至少在以下类型之一的模块调用处******:服务访问型调用或事件通知型调用。
本发明还提供了一种代码动态分析的装置,包括:***单元,用于在代码的模块调用处******,其中所述***用于在该处的调用发生时输出与该次调用相关的日志信息;输出单元,用于运行******后的代码,以输出由一条以上的日志信息构成的日志文件;确定单元,用于根据所述日志文件确定所述代码的分析结果,其中所述代码的分析结果用于表示所述代码运行时的模块调用关系。
根据本发明之一优选实施例,所述确定单元包括:图生成单元,用于根据所述日志文件中各条日志信息记录的主调模块与被调模块,绘制从主调模块到被调模块的连线,以得到所述代码在整个运行期间的模块调用关系图,并将所述模块调用关系图作为所述代码的分析结果。
根据本发明之一优选实施例,所述确定单元包括:图像帧生成单元,用于根据所述日志文件中的各条日志信息,绘制所述代码在运行期间的每个关键时刻的调用进度图像帧;文档生成单元,用于利用每个关键时刻的调用进度图像帧,生成动态图像文档,并将所述动态图像文档作为所述代码的分析结果,其中所述动态图像文档描述了所述代码在多个运行时刻的模块调用进度。
根据本发明之一优选实施例,所述图像帧生成单元包括:关键时刻确定单元,用于提取各条日志信息中记录的调用的开始时刻和结束时刻中的至少一个时刻作为所述代码在运行期间的关键时刻;进度绘制单元,用于针对每个关键时刻,确定该关键时刻同时进行的调用,计算同时进行的调用中每个调用在该关键时刻的进度,并依据每个调用的进度绘制该关键时刻的调用进度图像帧。
根据本发明之一优选实施例,所述进度绘制单元确定关键时刻T同时进行的调用的方式包括:判断各条日志信息中记录的调用的开始时刻和结束时刻构成的封闭区间是否覆盖T,如果是,则将覆盖T的封闭区间对应的调用提取出来作为在关键时刻T同时进行的调用中的一个。
根据本发明之一优选实施例,所述进度绘制单元计算同时进行的调用中的每个调用在关键时刻T的进度的方式包括:根据各条日志信息中记录的线程标识,确定同时进行的调用中的任意一个调用X在同一个线程中的所有子调用,将X在同一个线程中的所有子调用按照调用的时间顺序排列,得到X的子调用序列;利用X的子调用序列计算X在关键时刻T的进度,其中:当X的第一个子调用的开始时刻大于关键时刻T时,确定X属于去程调用,且去程调用的进度采用下列公式计算:其中go表示去程调用的进度、key_time表示关键时刻T、x_stime表示X的开始时刻、call1_stime表示X的第一个子调用的开始时刻;当关键时刻T大于X的最后一个子调用的结束时刻时,确定X属于返程调用,且返程调用的进度采用下列公式计算:其中back表示返程调用的进度、x_etime表示X的结束时刻、calln_etime表示X的最后一个子调用的结束时刻。
根据本发明之一优选实施例,所述动态图像文档包括:幻灯片文档、动画文档或视频文档。
根据本发明之一优选实施例,所述***单元至少在以下类型之一的模块调用处******:服务访问型调用或事件通知型调用。
由以上技术方案可以看出,本发明中通过在代码的模块调用处******,可以在代码完整运行后得到与代码运行中发生的模块调用相关的日志文件,通过该日志文件,可以得到反映代码运行时模块调用关系的代码分析结果,通过本发明得到的代码分析结果,可以有效地对代码运行时的模块调用状况进行监控,有助于相关技术人员及时发现代码的质量缺陷,从而提高代码质量,降低代码维护的难度。
【附图说明】
图1为本发明中代码动态分析的方法的流程示意图;
图2为本发明中的模块调用关系图的一个示意图;
图3为本发明中的调用进度图像帧的一个实施例的示意图;
图4为本发明中的调用进度图像帧的另一个实施例的示意图;
图5为本发明中代码动态分析的装置的结构示意框图;
图6为本发明中确定单元的一个实施例的结构示意框图;
图7为本发明中确定单元的另一个实施例的结构示意框图;
图8为本发明中图像帧生成单元的实施例的结构示意框图。
【具体实施方式】
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
请参考图1,图1为本发明中代码动态分析的方法的流程示意图。如图1所示,该方法包括:
步骤S101:在代码的模块调用处******,该***用于在该处的调用发生时输出与该次调用相关的日志信息。
步骤S102:运行******后的代码,以输出由一条以上的日志信息构成的日志文件。
步骤S103:根据日志文件确定代码的分析结果,其中代码的分析结果用于表示代码运行时的模块调用关系。
下面通过具体的实施例对上述步骤进行说明。
实施例一:
作为本领域技术人员应该理解,模块是对功能的抽象,一个模块可以理解为一定功能的封装,模块可以以不同的粒度划分,例如从比较小的粒度上理解,实现了一定功能的函数就是一个模块。一个程序的功能,是通过代码中各个模块的相互调用实现的。在本发明中,为了获取到代码在动态运行中发生的模块调用信息,步骤S101中需要在代码的模块调用处******,本领域技术人员应该理解,所谓***就是实现了监听逻辑的代码,本发明中,需要监听的事件是模块调用,当该事件发生时,***会输出与这次调用相关的日志信息。在代码中******,可通过各种现有技术实现,例如借助微软的detours技术,就可以很容易地在代码中******,当然通过其他的技术手段也可以实现在代码中******,本说明书在此不再赘述。
在步骤S102中,运行******后的代码,在此过程中,每次发生模块调用就会输出一条与该次调用相关的日志信息,因此,在代码运行结束后,会得到一个由日志信息构成的日志文件。
步骤S103中,通过对日志文件进行处理,就能够确定代码的分析结果。在本实施例中,代码的分析结果是模块调用关系图。为了方便理解,下面结合一种日志信息的示意结构对步骤S103进行说明,应该理解,这并不构成对本发明中日志信息涵盖的日志项的限制。
本实施例中,一条日志信息表示为(调用标识、主调模块、被调模块),其中调用标识用于表示该条日志信息表示的调用关系,而主调模块与被调模块分别表示该次调用的发起者和接受者。例如一条日志信息表示为(5、count、rank),其含义是标号为5的调用,是由count模块发起的对rank模块的调用。
根据上述的日志信息,在本实施例中,步骤S103具体地包括:根据日志文件中各条日志信息记录的主调模块与被调模块,绘制从主调模块到被调模块的连线,得到代码在整个运行期间的模块调用关系图。请参考图2,图2为本发明中的模块调用关系图的一个示意图。
从图2中可以看出,在这次代码运行中,发生了模块A到模块D、B、C的调用,其中在模块A到模块B的调用中还发生了从模块B到模块E、F的调用。图2中连线箭头方向表示了主调到被调的关系,但是应该理解,这只是一种示意,实际上主调和被调的关系也可以用其他方式如文字、颜色等进行区分,不应将此作为对本发明的限制。
对代码进行静态分析,不能反映出代码在运行期间实际发生的模块调用关系,而本发明对代码进行动态分析的方法,能够很好地反映出代码在运行期间发生的调用关系。作为本领域技术人员应该理解,程序的静态代码中,可能存在多个逻辑分支,在代码的实际执行当中,根据不同的初始输入值,发生的模块调用很可能是不同的,例如图2所示的图表示的程序代码中,可能还存在模块A对模块G的调用逻辑,但在代码的该次实际运行中,却并未发生这样的调用,可见,通过本发明对代码进行动态分析的方法,可以根据不同的初始输入值,得到有可能不同的、与该次初始输入值相关的模块调用关系,这更有助于相关人员对代码进行监控,当代码存在缺陷时,相关人员更容易发现,因此本发明的方法有助于提高代码质量。
实施例二:
在本实施例中,步骤S101与步骤S102的实施方式与实施例一基本相同,但是在步骤S103中得到的代码分析结果,为一个动态图像文档,该动态图像文档描述了代码在多个运行时刻的模块调用进度。
具体地,步骤S103包括:
步骤S1031:根据日志文件中的各条日志信息,绘制代码在运行期间的每个关键时刻的调用进度图像帧。
步骤S1032:利用每个关键时刻的调用进度图像帧,生成动态图像文档。
同样为了方便理解,下面结合另一种日志信息的示意结构对步骤S1031和S1032进行说明。同样的,这种示意并不构成对本发明中日志信息涵盖的日志项的限制。
在本实施例中,一条日志信息表示为(调用标识、调用所在线程标识、主调模块、被调模块、调用开始时刻、调用结束时刻),其中调用所在线程标识用于表示执行调用的线程代号,调用开始时刻和调用结束时刻分别表示该次调用发生的起止时刻。例如一条日志信息表示为(5、TRD3、count、rank、3:12:34、3:12:45),其含义是标号为5的调用,发生时所在线程号为TRD3,是由count模块发起对rank模块的调用,调用的开始时刻与结束时刻分别为3:12:34和3:12:45。
结合上述日志信息的示意结构,具体地,步骤S1031包括:
步骤S1031_1:提取各条日志信息中记录的调用的开始时刻和结束时刻中的至少一个时刻作为代码在运行期间的关键时刻。
步骤S1031_2:针对每个关键时刻,确定该关键时刻同时进行的调用,计算同时进行的调用中的每个调用在该关键时刻的进度,并依据每个调用的进度绘制该关键时刻的调用进度图像帧。
每条日志信息均记录了两个时刻,分别是该条日志信息对应调用的开始时刻和结束时刻,在本实施例中,确定关键时刻的策略为:将每条日志信息的开始时刻或结束时刻中的至少一个时刻提取出来,提取出来的这些时刻均可作为本发明中的关键时刻,依靠这些关键时刻,可以在步骤S1031_2中得到每个关键时刻的调用进度图像帧。可以理解,关键时刻的确定策略还可以有其他方式,例如将开始时刻与结束时刻中间的那个时刻也提取出来作为关键时刻等等,本说明书不再赘述。作为优选的,本实施例中将各条日志信息中记录的调用的开始时刻和结束时刻均提取出来作为代码在运行期间的关键时刻。
步骤S1031_2中,一个关键时刻同时进行的调用,通过各条日志信息中记录的开始时刻和结束时刻就可以判断。具体地,确定关键时刻T同时进行的调用的步骤包括:
判断各条日志信息中记录的调用的开始时刻和结束时刻构成的封闭区间是否覆盖T,如果是,则将覆盖T的封闭区间对应的调用提取出来作为在关键时刻T同时进行的调用中的一个。例如对关键时刻3:12:20,一条日志信息的开始时刻与结束时刻分别为3:12:10和3:12:50,由于[3:12:10,3:12:50]覆盖了3:12:20,所以[3:12:10,3:12:50]所对应的调用就是和关键时刻所对应的调用同时进行的调用(因为关键时刻T就是某个调用的开始时刻或结束时刻)。可以理解,由于计算机有并发执行的能力,因此多个调用可以运行在不同的线程中,从而可能出现在同一时刻有多个同时进行的调用的情况。
步骤S1031_2中,在得到关键时刻T同时进行的调用后,还需要计算同时进行的若干个调用中的每个调用在关键时刻T的进度。具体地,可以采用下列方式实现:
根据各条日志信息中记录的线程标识,确定同时进行的调用中的任意一个调用X在同一个线程中的所有子调用,将X在同一个线程中的所有子调用按照调用的时间顺序排列,得到X的子调用序列;利用X的子调用序列计算X在关键时刻T的进度,其中:
当X的第一个子调用的开始时刻大于关键时刻T时,确定X属于去程调用,且去程调用的进度采用下列公式计算:其中go表示去程调用的进度、key_time表示关键时刻T、x_stime表示X的开始时刻、call1_stime表示X的第一个子调用的开始时刻;当关键时刻T大于X的最后一个子调用的结束时刻时,确定X属于返程调用,且返程调用的进度采用下列公式计算:其中back表示返程调用的进度、x_etime表示X的结束时刻、calln_etime表示X的最后一个子调用的结束时刻。
结合前面所举的日志信息的示意结构,可以看出,每条日志信息对应的调用均记录了一个所在线程的标识,对日志信息进行遍历,可以确定与X(即同时进行的调用中的任意一个调用)属于同一线程的所有调用,这些调用中,由X引起的调用即为X的子调用。例如调用X为模块A到B的调用,在该调用中又发生了由模块B到C的调用(该调用为Y),则认为Y为X的子调用。如果在同一个线程中,X依时间顺序依次发起的调用为Y、Z、W,则调用Y、Z、W就构成了X的子调用序列。
可以理解,一个模块对另一个模块的调用,应该从发出调用信号开始,到接收到调用返回信号结束。例如模块A到模块B的调用,从模块A向模块B发出调用信号开始,到模块A接收到模块B的调用返回信号结束。其中模块A向模块B发出调用信号属于调用的去程,模块B向模块A返回调用信号属于调用的返程,去程调用和返程调用反映了调用所处阶段,具体地,采用上述的进度算法,还可以得到在关键时刻T,去程调用或返程调用的进度。
如果在关键时刻T,同时进行的调用有X(模块A到模块B的调用)、Y(模块C到模块D的调用)、Z(模块E到模块F的调用),且调用X的去程调用进度为0(表示该调用刚开始),调用Y的去程调用进度为0.5,调用Z的去程调用进度为0.7,则可以绘制关键时刻T的调用进度图像帧如图3所示。在图3中,箭头所处位置代表了调用进度,随着关键时刻的变化,得到的每个与关键时刻相关的调用进度图像帧中箭头的位置也会变化,应该理解,这只是一种示意性的说明,实际当中还可以采用不同的颜色、线条粗细等方式来对调用进度进行标识。作为另一种实施方式,图3所示的图像还可以与实施例一中的模块调用关系图结合起来作为调用进度图像帧,请参考图4,图4为本发明中的调用进度图像帧的另一个实施例的示意图。在图4所示的代码的本次执行中,共发生了模块A到B、模块C到D、模块E到F、模块F到G、模块G到H的调用,但是在关键时刻T,正在进行的调用只有模块A到B的调用、模块C到D的调用以及模块E到F的调用。
在得到每个关键时刻的调用进度图像帧之后,在步骤S1032中即可利用每个关键时刻的调用进度图像帧生成动态图像文档。在本实施例中,动态图像文档可以是视频文档,例如采用视频平滑技术,利用相邻的关键时刻的调用进度图像帧生成过渡帧,然后将关键时刻的调用进度图像帧与过渡帧依次连接起来,就可以得到动态的视频文档。此外,本实施例中的动态图像文档还可以是幻灯片文档或动画文档,如PPT文档或Flash文档,这种方式下只需要将关键时刻得到的调用进度图像帧依次连接起来就能够得到动态图像文档了。
通过实施例二,本发明得到的分析结果不仅反映了代码在运行时的模块调用关系,而且还反映了代码在多个运行时刻的模块调用进度,能够更好地反映代码的动态执行情况,与静态的代码分析方法相比,本发明具有很好的代码监控能力,可以有效帮助开发人员提高代码质量,或者帮助代码维护人员对代码进行维护。
值得特别说明的是,无论是在实施例一还是实施例二中,步骤S101中均可以在服务访问型模块调用或事件通知型模块调用中的至少一种类型调用处******。其中服务访问型模块调用,指的是一个模块对另一个模块的调用是为了实现另一个模块的功能,例如函数A中对函数B的调用,就是为了实现函数B的功能,而事件通知型模块调用,指的是一个模块发出事件通知,从而触发关心该事件的模块进行相应处理,也就实现了通知模块对被通知模块的调用。
采用本发明的方法,可以只对上述两种类型的模块调用中的一种单独进行分析或者是对两种类型的模块调用均进行分析。在对服务访问型模块调用和事件通知型模块调用同时进行分析的情况下,只需要在日志信息中加入与调用类型相关的日志项,就能够在最终得到的分析结果中对以上两种类型的模块调用进行区分,以更好地反映代码运行中的状况。
请参考图5,图5为本发明中代码动态分析的装置的结构示意框图。如图5所示,代码动态分析的装置200包括:***单元201、输出单元202、确定单元203。
其中***单元201,用于在代码的模块调用处******,其中***用于在该处的调用发生时输出与该次调用相关的日志信息。在本发明中,***单元201至少在以下类型之一的模块调用处******:服务访问型调用或事件通知型调用。
输出单元202,用于运行******后的代码,以输出由一条以上的日志信息构成的日志文件。
确定单元203,用于根据日志文件确定代码的分析结果,其中代码的分析结果用于表示代码运行时的模块调用关系。
请参考图6,图6为本发明中确定单元的一个实施例的结构示意框图。在该实施例中,确定单元203包含图生成单元2031,图生成单元2031用于根据日志文件中各条日志信息记录的主调模块与被调模块,绘制从主调模块到被调模块的连线,以得到代码在整个运行期间的模块调用关系图,并将模块调用关系图作为代码的分析结果。
请参考图7,图7为本发明中确定单元的另一个实施例的结构示意框图。在该实施例中,确定单元203包括图像帧生成单元203a和文档生成单元203b。其中图像帧生成单元203a用于根据日志文件中的各条日志信息,绘制代码在运行期间的每个关键时刻的调用进度图像帧。文档生成单元203b用于利用每个关键时刻的调用进度图像帧,生成动态图像文档,并将动态图像文档作为代码的分析结果,其中动态图像文档描述了代码在多个运行时刻的模块调用进度。在本发明中,动态图像文档包括:幻灯片文档、动画文档或视频文档。
请参考图8,图8为本发明中图像帧生成单元的实施例的结构示意框图。如图8所示,图像帧生成单元203a包括:关键时刻确定单元203a_1和进度绘制单元203a_2。其中关键时刻确定单元203a_1用于提取各条日志信息中记录的调用的开始时刻和结束时刻中的至少一个时刻作为代码在运行期间的关键时刻。进度绘制单元203a_2用于针对每个关键时刻,确定该关键时刻同时进行的调用,计算同时进行的调用中的每个调用在该关键时刻的进度,并依据每个调用的进度绘制该关键时刻的调用进度图像帧。
在本实施例中,进度绘制单元203a_2确定关键时刻T同时进行的调用的方式包括:
判断各条日志信息中记录的调用的开始时刻和结束时刻构成的封闭区间是否覆盖T,如果是,则将覆盖T的封闭区间对应的调用提取出来作为在关键时刻T同时进行的调用中的一个。
在本实施例中,进度绘制单元203a_2计算同时进行的调用中的每个调用在关键时刻T的进度的方式包括:
根据各条日志信息中记录的线程标识,确定同时进行的调用中的任意一个调用X在同一个线程中的所有子调用,将X在同一个线程中的所有子调用按照调用的时间顺序排列,得到X的子调用序列;
利用X的子调用序列计算X在关键时刻T的进度,其中:
当X的第一个子调用的开始时刻大于关键时刻T时,确定X属于去程调用,且去程调用的进度采用下列公式计算:其中go表示去程调用的进度、key_time表示关键时刻T、x_stime表示X的开始时刻、call1_stime表示X的第一个子调用的开始时刻;当关键时刻T大于X的最后一个子调用的结束时刻时,确定X属于返程调用,且返程调用的进度采用下列公式计算:其中back表示返程调用的进度、x_etime表示X的结束时刻、calln_etime表示X的最后一个子调用的结束时刻。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (16)
1.一种代码动态分析的方法,包括:
A.在代码的模块调用处******,其中所述***用于在该处的调用发生时输出与该次调用相关的日志信息;
B.运行******后的代码,以输出由一条以上的日志信息构成的日志文件;
C.根据所述日志文件确定所述代码的分析结果,其中所述代码的分析结果用于表示所述代码运行时的模块调用关系。
2.根据权利要求1所述的方法,其特征在于,所述步骤C包括:
根据所述日志文件中各条日志信息记录的主调模块与被调模块,绘制从主调模块到被调模块的连线,以得到所述代码在整个运行期间的模块调用关系图,并将所述模块调用关系图作为所述代码的分析结果。
3.根据权利要求1所述的方法,其特征在于,所述步骤C包括:
C1.根据所述日志文件中的各条日志信息,绘制所述代码在运行期间的每个关键时刻的调用进度图像帧;
C2.利用每个关键时刻的调用进度图像帧,生成动态图像文档,并将所述动态图像文档作为所述代码的分析结果,其中所述动态图像文档描述了所述代码在多个运行时刻的模块调用进度。
4.根据权利要求3所述的方法,其特征在于,所述步骤C1包括:
C11.提取各条日志信息中记录的调用的开始时刻和结束时刻中的至少一个时刻作为所述代码在运行期间的关键时刻;
C12.针对每个关键时刻,确定该关键时刻同时进行的调用,计算同时进行的调用中的每个调用在该关键时刻的进度,并依据每个调用的进度绘制该关键时刻的调用进度图像帧。
5.根据权利要求4所述的方法,其特征在于,所述步骤C12中,确定关键时刻T同时进行的调用的步骤包括:
判断各条日志信息中记录的调用的开始时刻和结束时刻构成的封闭区间是否覆盖T,如果是,则将覆盖T的封闭区间对应的调用提取出来作为在关键时刻T同时进行的调用中的一个。
6.根据权利要求4所述的方法,其特征在于,所述步骤C12中,计算同时进行的调用中的每个调用在关键时刻T的进度的步骤包括:
根据各条日志信息中记录的线程标识,确定同时进行的调用中的任意一个调用X在同一个线程中的所有子调用,将X在同一个线程中的所有子调用按照调用的时间顺序排列,得到X的子调用序列;
利用X的子调用序列计算X在关键时刻T的进度,其中:
7.根据权利要求3所述的方法,其特征在于,所述动态图像文档包括:幻灯片文档、动画文档或视频文档。
8.根据权利要求1所述的方法,其特征在于,所述步骤A中,至少在以下类型之一的模块调用处******:服务访问型调用或事件通知型调用。
9.一种代码动态分析的装置,包括:
***单元,用于在代码的模块调用处******,其中所述***用于在该处的调用发生时输出与该次调用相关的日志信息;
输出单元,用于运行******后的代码,以输出由一条以上的日志信息构成的日志文件;
确定单元,用于根据所述日志文件确定所述代码的分析结果,其中所述代码的分析结果用于表示所述代码运行时的模块调用关系。
10.根据权利要求9所述的装置,其特征在于,所述确定单元包括:
图生成单元,用于根据所述日志文件中各条日志信息记录的主调模块与被调模块,绘制从主调模块到被调模块的连线,以得到所述代码在整个运行期间的模块调用关系图,并将所述模块调用关系图作为所述代码的分析结果。
11.根据权利要求9所述的装置,其特征在于,所述确定单元包括:
图像帧生成单元,用于根据所述日志文件中的各条日志信息,绘制所述代码在运行期间的每个关键时刻的调用进度图像帧;
文档生成单元,用于利用每个关键时刻的调用进度图像帧,生成动态图像文档,并将所述动态图像文档作为所述代码的分析结果,其中所述动态图像文档描述了所述代码在多个运行时刻的模块调用进度。
12.根据权利要求11所述的装置,其特征在于,所述图像帧生成单元包括:
关键时刻确定单元,用于提取各条日志信息中记录的调用的开始时刻和结束时刻中的至少一个时刻作为所述代码在运行期间的关键时刻;
进度绘制单元,用于针对每个关键时刻,确定该关键时刻同时进行的调用,计算同时进行的调用中每个调用在该关键时刻的进度,并依据每个调用的进度绘制该关键时刻的调用进度图像帧。
13.根据权利要求12所述的装置,其特征在于,所述进度绘制单元确定关键时刻T同时进行的调用的方式包括:
判断各条日志信息中记录的调用的开始时刻和结束时刻构成的封闭区间是否覆盖T,如果是,则将覆盖T的封闭区间对应的调用提取出来作为在关键时刻T同时进行的调用中的一个。
14.根据权利要求12所述的装置,其特征在于,所述进度绘制单元计算同时进行的调用中的每个调用在关键时刻T的进度的方式包括:
根据各条日志信息中记录的线程标识,确定同时进行的调用中的任意一个调用X在同一个线程中的所有子调用,将X在同一个线程中的所有子调用按照调用的时间顺序排列,得到X的子调用序列;
利用X的子调用序列计算X在关键时刻T的进度,其中:
15.根据权利要求11所述的装置,其特征在于,所述动态图像文档包括:幻灯片文档、动画文档或视频文档。
16.根据权利要求9所述的装置,其特征在于,所述***单元至少在以下类型之一的模块调用处******:服务访问型调用或事件通知型调用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210285223.8A CN103577304B (zh) | 2012-08-10 | 2012-08-10 | 一种代码动态分析的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210285223.8A CN103577304B (zh) | 2012-08-10 | 2012-08-10 | 一种代码动态分析的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103577304A true CN103577304A (zh) | 2014-02-12 |
CN103577304B CN103577304B (zh) | 2018-11-09 |
Family
ID=50049132
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210285223.8A Active CN103577304B (zh) | 2012-08-10 | 2012-08-10 | 一种代码动态分析的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103577304B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104615919A (zh) * | 2015-02-10 | 2015-05-13 | 北京润科通用技术有限公司 | 一种文件源代码License控制方法及装置 |
CN107122426A (zh) * | 2017-04-11 | 2017-09-01 | 上海众开信息科技有限公司 | 基于数据库的操作日志信息的监听获取方法及装置 |
CN107733710A (zh) * | 2017-10-17 | 2018-02-23 | 平安科技(深圳)有限公司 | 链路调用关系的构建方法、装置、计算机设备及存储介质 |
CN109359028A (zh) * | 2018-08-22 | 2019-02-19 | 平安科技(深圳)有限公司 | 代码质量监控方法、装置、计算机设备及存储介质 |
CN111954058A (zh) * | 2020-08-13 | 2020-11-17 | 北京达佳互联信息技术有限公司 | 图像处理方法、装置、电子设备以及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5313616A (en) * | 1990-09-18 | 1994-05-17 | 88Open Consortium, Ltd. | Method for analyzing calls of application program by inserting monitoring routines into the executable version and redirecting calls to the monitoring routines |
CN101320350A (zh) * | 2008-07-17 | 2008-12-10 | 金蝶软件(中国)有限公司 | 一种性能监控方法及装置 |
CN101788949A (zh) * | 2010-03-10 | 2010-07-28 | 中兴通讯股份有限公司 | 一种实现嵌入式***函数监控的方法及装置 |
CN101876938A (zh) * | 2009-11-11 | 2010-11-03 | 北京神州泰岳软件股份有限公司 | 一种基于消息队列的应用软件响应时间测量方法 |
CN102053906A (zh) * | 2009-10-30 | 2011-05-11 | 国际商业机器公司 | 用于收集程序运行时信息的***和方法 |
CN102360328A (zh) * | 2011-09-29 | 2012-02-22 | 用友软件股份有限公司 | 程序监控装置和程序监控方法 |
CN102521543A (zh) * | 2011-12-23 | 2012-06-27 | 中国人民解放军国防科学技术大学 | 一种基于动态污点分析进行消息语义解析的方法 |
-
2012
- 2012-08-10 CN CN201210285223.8A patent/CN103577304B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5313616A (en) * | 1990-09-18 | 1994-05-17 | 88Open Consortium, Ltd. | Method for analyzing calls of application program by inserting monitoring routines into the executable version and redirecting calls to the monitoring routines |
CN101320350A (zh) * | 2008-07-17 | 2008-12-10 | 金蝶软件(中国)有限公司 | 一种性能监控方法及装置 |
CN102053906A (zh) * | 2009-10-30 | 2011-05-11 | 国际商业机器公司 | 用于收集程序运行时信息的***和方法 |
CN101876938A (zh) * | 2009-11-11 | 2010-11-03 | 北京神州泰岳软件股份有限公司 | 一种基于消息队列的应用软件响应时间测量方法 |
CN101788949A (zh) * | 2010-03-10 | 2010-07-28 | 中兴通讯股份有限公司 | 一种实现嵌入式***函数监控的方法及装置 |
CN102360328A (zh) * | 2011-09-29 | 2012-02-22 | 用友软件股份有限公司 | 程序监控装置和程序监控方法 |
CN102521543A (zh) * | 2011-12-23 | 2012-06-27 | 中国人民解放军国防科学技术大学 | 一种基于动态污点分析进行消息语义解析的方法 |
Non-Patent Citations (1)
Title |
---|
杜晓东: "面向嵌入式***的测试工具研究", 《中国优秀硕士学位论文全文数据库信息科技辑》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104615919A (zh) * | 2015-02-10 | 2015-05-13 | 北京润科通用技术有限公司 | 一种文件源代码License控制方法及装置 |
CN104615919B (zh) * | 2015-02-10 | 2017-09-29 | 北京润科通用技术有限公司 | 一种文件源代码License控制方法及装置 |
CN107122426A (zh) * | 2017-04-11 | 2017-09-01 | 上海众开信息科技有限公司 | 基于数据库的操作日志信息的监听获取方法及装置 |
CN107733710A (zh) * | 2017-10-17 | 2018-02-23 | 平安科技(深圳)有限公司 | 链路调用关系的构建方法、装置、计算机设备及存储介质 |
CN109359028A (zh) * | 2018-08-22 | 2019-02-19 | 平安科技(深圳)有限公司 | 代码质量监控方法、装置、计算机设备及存储介质 |
CN109359028B (zh) * | 2018-08-22 | 2024-05-03 | 平安科技(深圳)有限公司 | 代码质量监控方法、装置、计算机设备及存储介质 |
CN111954058A (zh) * | 2020-08-13 | 2020-11-17 | 北京达佳互联信息技术有限公司 | 图像处理方法、装置、电子设备以及存储介质 |
CN111954058B (zh) * | 2020-08-13 | 2023-11-21 | 北京达佳互联信息技术有限公司 | 图像处理方法、装置、电子设备以及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103577304B (zh) | 2018-11-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103577304A (zh) | 一种代码动态分析的方法及装置 | |
CN105474125B (zh) | 用于跟踪唤醒锁定使用的技术 | |
US11502930B2 (en) | Method and system for generating alerts using parameter based network monitoring for alert conditions | |
US8358842B2 (en) | Electronic device with function of separating panels of digital comic strip and method thereof | |
CN108805047A (zh) | 一种活体检测方法、装置、电子设备和计算机可读介质 | |
CN107209825A (zh) | 经由存储器监测的数据流跟踪 | |
CN111985504B (zh) | 基于人工智能的翻拍检测方法、装置、设备及介质 | |
CN103714290B (zh) | 一种软件行为获取、监控与验证方法 | |
CN111538852B (zh) | 多媒体资源处理方法、装置、存储介质及设备 | |
CN106528281A (zh) | 卫星遥测数据离线统一快速处理*** | |
CN113468168A (zh) | 一种起重机械多源异构数据高速采集与处理软控制方法 | |
CN115952544A (zh) | 一种基于大数据的智能存储*** | |
CN113806183B (zh) | 应用卡顿处理方法、装置、设备、存储介质和程序产品 | |
CN109167979A (zh) | 多路监控视频人工智能分析的处理方法及*** | |
CN201707722U (zh) | 智能高效人流疏导*** | |
CN112101191A (zh) | 基于边框注意力网络的表情识别方法、装置、设备及介质 | |
CN116361791A (zh) | 基于api分组重构与图像表示的恶意软件检测方法 | |
CN115471215A (zh) | 一种业务流程处理方法及装置 | |
CN105516793A (zh) | 延迟监测方法及装置 | |
CN114039279A (zh) | 轨道交通站内的控制柜监控方法及*** | |
CN115100161A (zh) | 一种电池顶盖缺陷检测方法、装置、电子设备及存储介质 | |
CN105117323B (zh) | 一种终端及其cpu或内存的状态检测方法 | |
CN113691390A (zh) | 一种云端协同的边缘节点报警***及方法 | |
CN113449037A (zh) | 基于ai的sql引擎调用方法、装置、设备及介质 | |
CN113255456A (zh) | 非主动活体检测方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |