一种函数调用跟踪系统和跟踪方法

文档序号:6610930阅读:184来源:国知局
专利名称:一种函数调用跟踪系统和跟踪方法
技术领域
本发明涉及软件系统跟踪和系统运行监视技术。
背景技术
现代软件系统所要解决的问题越来越复杂,其规模和复杂度亦越来越高。目前,应用系统开发普遍采用模块化的设计方法。一个软件系统由各功能模块构成,每个子功能模块完成相对单一的特定功能,每个功能模块的功能点的实现由一系列的函数(方法)调用完成,函数(方法)是子功能模块的最小组成单元。子模块需要实现的功能非常专一,子模块的设计实现也相对简单,这样的设计方法有利于简便地设计,也便于多人协同开发。同时,通过精心设计模块间的接口,使某一功能模块的改变对其他模块的影响降低到最低程度,这有效降低了将来系统升级改进的工作量和出错可能性。
单独的子功能模块是没有实际意义的,系统的各子功能必须分工协作以实现软件系统所需要完成的工作,这就需要他们之间互相调用,这样各子模块间的耦合不可避免,每个子模块总要携带部分和其核心功能无关的额外部分。现代程序设计人员的主要工作之一就是寻找各种方法将功能模块间的耦合度降至最低限度。
在现代应用系统中,设计人员需要完全掌握系统的运行流程、运行状态和运行参数,要达到这样的目的,需要在系统的关注点处加入跟踪器。当该关注点激活时,跟踪器会按照希望的方式,将设计人员需要关注的运行参数以期望的格式输出到指定的位置。在一个采用模块化设计思想设计的系统中,现有技术的实现方式是将包括输出信息的格式化、输出位置、输出动作本身等组织到一个功能模块中,该模块可以称为跟踪模块。它对外仅提供一个入口点,即跟踪器的‘跟踪’动作。该跟踪模块设置在系统内部的关注点处。这种方案的缺点如下
1、需要在每个关注点处都引用跟踪模块,如果关注点很多,则设计开发的工作量很大;2、在每个关注点处,跟踪器的设置动作是重复的,若跟踪模块的入口实现发生变化,则需要修改系统中每处的跟踪器设置。关注点很多时,修改的工作量很大。若以设置跟踪的次数衡量业务模块和跟踪模块的耦合度,可以看出即便采用模块化设计,耦合度也会随关注点的增加而线性增加。换言之,跟踪功能随关注点的增加而扩散了。
3、为配合跟踪模块工作,业务模块需要设置在何处以及如何输出运行参数到指定位置,因而,在业务模块中,会有和其核心功能无关的功能实现存在。
如何解决上述缺陷,是本发明的目的。

发明内容
本发明提出一种函数调用跟踪系统和跟踪方法,对功能模块最小单元的函数(方法)的调用进行跟踪。本发明无需在业务功能内部设置跟踪器,从而解决现有技术的上述缺陷。
本发明提供一种函数调用跟踪系统,该系统主要包括如下的模块输出模块,用于按照指定的级别和格式输出信息;配置模块,用于配置各关注点的信息以及需要输出的信息和输出级别;控制模块,用于根据所述配置模块配置的关注点信息设置跟踪器,根据所述配置模块配置的需要输出的信息设置输出格式,将信息传递到所述输出模块。
进一步地,所述控制模块包括拦截器,用于登记需跟踪的函数名称,并在需跟踪的函数被调用前,通知所述控制模块。
本发明还提供一种利用上述系统进行函数调用跟踪的方法,包括以下步骤步骤1,设置配置模块的配置文件,登记关注点,包括需要被跟踪的函数名称及其所属的对象,输出级别。关注点可以有多个。
步骤2,设置输出模块的配置文件,指定输出级别和输出位置。
步骤3,运行控制模块,在调用被跟踪函数时,按照跟踪参数输出系统信息。
进一步地,所述函数调用跟踪方法,所述步骤1具体包括以下步骤步骤11,对于特定关注点,读入对象名称;步骤12,根据对象名称在所述拦截器列表中查找;步骤13,如找到已存在的拦截器,则在拦截器中注册对象名称;如没有找到已存在的拦截器,则根据对象名称创建拦截器,并加入到拦截器列表中。
进一步地,所述函数调用跟踪方法,所述步骤3具体包括以下步骤步骤31,所述拦截器在函数调用发生时被激活;步骤32,判断是否需要输出参数,若需要则进行步骤33,否则进行步骤34;步骤33,采集函数的参数信息,组织格式输出;步骤34,判断是否需要输出返回值,若需要则进行步骤35,否则进行步骤36;步骤35,检查当前函数是否具有返回值,若有则组织格式输出,否则不输出返回值的信息;步骤36,判断当前是否有输出信息,若有则进行步骤37,否则进行步骤39,本次拦截结束;步骤37,从来自所述配置模块的关注点配置信息中读取特定于本关注点的输出级别信息;步骤38,将输出级别信息和输出信息传递给输出模块;步骤39,本次拦截结束,等待下一次的激活。
与现有技术相比较,本发明无需在业务功能内部设置跟踪器,即能实现对函数或者方法调用、运行参数等系统运行状态进行跟踪,可以将业务功能模块和跟踪模块的耦合度保持在恒定值,不随关注点的增加而改变,显著降低了系统业务模块和跟踪模块之间的耦合程度,提高了系统的可维护性,使系统架构更加清晰。


图1是本发明跟踪系统的应用示意图;图2是本发明的控制模块拦截器建立流程图;图3是本发明的控制模块生成输出信息的流程图。
具体实施例方式
下面将结合附图及实施例对本发明的技术方案进行更详细的说明。
图1为本发明跟踪系统的应用示意图,其中实心方框为跟踪系统的内部模块,虚圆为外部单元。其中配置模块11读取配置文件10,获取配置信息,包括关注点所在的对象名称,关注点函数(方法)名称,输出信息级别,是否输出参数,是否输出返回值。若存在多个关注点,则将所有关注点信息数据结构顺序排放,传递给控制模块。
控制模块12和配置模块11连接,获取关注点信息并登记。根据对象名称建立函数拦截器,在拦截器中登记函数名称。若某一对象有多个关注点,仅需要建立一个拦截器即可。拦截器的功能是在特定的方法调用前,通知控制模块12,控制模块12根据登记的函数名称以及关注点信息决定是否输出以及怎样输出跟踪信息。
控制模块12和输出模块13连接,将输出信息以及输出级别传递给它,输出模块根据其配置决定输出信息到文件和/或屏幕。
输出模块13,支持按照级别过滤输出,这样可以选择输出跟踪信息,经过适当设定,保证控制模块传递的重要数据及时输出,一些不重要的输出信息被屏蔽。输出模块还负责配置输出目的地,支持输出到屏幕,或者输出到文件,或者两者同时输出。为了方便分析输出信息,可在最终的输出信息前加入输出时间,输出信息的序号。本实施例选择定制后Log4j软件包作为输出模块。它包括三个部分优先级、输出目的地和输出格式。优先级是指该输出信息的重要程度,可以配置,由高到低包括ERROR(错误),WARN(警告),INFO(信息),DEBUG(调试信息)四种,输出目的地指定了将跟踪信息打印到控制台还是文件,输出格式用来控制输出信息组织形式。
控制模块是本系统的核心部分,它包括两个主要的处理逻辑,一个是根据配置模块传递的关注点配置信息针对业务对象生成关注点的拦截器,另一个是在拦截器中生成输出信息。下面结合分析本函数调用跟踪系统的控制模块的流程,详细解释本发明的跟踪方法。
在设置好配置模块和输出模块后,运行控制模块,首先将创建拦截器。
图2是生成拦截器的过程。
步骤21,进入控制模块入口点;步骤22,判断条件,检索关注点信息,是否还有未处理的关注点信息,若条件为真,则进行步骤23,否则进行步骤28,拦截器创建结束;步骤23,读入对象名称;步骤24,根据对象名称在当前的对象拦截器列表中查找;步骤25,判断条件,是否找到已存在的拦截器,若条件为真,则进行步骤27,否则进行步骤26;步骤26,根据对象名称创建拦截器,并加入到拦截器列表中;步骤27,在拦截器中注册函数名称,进行步骤22;步骤28,创建拦截器结束。
图3是生成输出信息的过程。
步骤301,拦截器在函数调用发生时被激活;步骤302,判断条件,当前函数是否需要跟踪,若为真则进行步骤303,否则进行步骤310,本次拦截结束;步骤303,判断条件,是否需要输出参数,若为真则进行步骤304,否则进行步骤305;步骤304,采集函数的参数信息,组织格式输出;步骤305,判断条件,是否需要输出返回值,若为真则进行步骤306,否则进行步骤307;步骤306,检查当前函数是否具有返回值,若有则组织格式输出,否则不输出返回值的信息;步骤307,判断条件,检查当前是否有输出信息,若有进行步骤308,否则进行步骤310,本次拦截结束;
步骤308,从来自配置模块的关注点配置信息中读取本关注点特定的输出级别信息;步骤309,和输出模块连接,将输出级别信息和输出信息传递给输出模块;步骤310,本次拦截结束,等待下一次的激活。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
权利要求
1.一种函数调用跟踪系统,其特征在于,包括以下模块输出模块,用于按照指定的级别和格式输出信息;配置模块,用于配置各关注点的信息以及需要输出的信息和输出级别;控制模块,用于根据所述配置模块配置的关注点信息设置跟踪器,根据所述配置模块配置的需要输出的信息设置输出格式,将信息传递到所述输出模块。
2.如权利要求1所述的跟踪系统,其特征在于,所述控制模块包括拦截器,用于登记需跟踪的函数名称,并在需跟踪的函数被调用前,通知所述控制模块。
3.一种利用权利要求1或2所述系统进行函数调用跟踪的方法,其特征在于,包括以下步骤步骤1,设置配置模块的配置文件,登记关注点,包括需要被跟踪的函数名称及其所属的对象,输出级别;步骤2,设置输出模块的配置文件,指定输出级别和输出位置;步骤3,运行控制模块,在调用被跟踪函数时,按照跟踪参数输出系统信息。
4.如权利要求3所述的函数调用跟踪方法,其特征在于,所述步骤1具体包括以下步骤步骤11,对于特定关注点,读入对象名称;步骤12,根据对象名称在所述拦截器列表中查找;步骤13,如找到已存在的拦截器,则在拦截器中注册对象名称;如没有找到已存在的拦截器,则根据对象名称创建拦截器,并加入到拦截器列表中。
5.如权利要求4所述的函数调用跟踪方法,其特征在于,所述步骤3具体包括以下步骤步骤31,所述拦截器在函数调用发生时被激活;步骤32,判断是否需要输出参数,若需要则进行步骤33,否则进行步骤34;步骤33,采集函数的参数信息,组织格式输出;步骤34,判断是否需要输出返回值,若需要则进行步骤35,否则进行步骤36;步骤35,检查当前函数是否具有返回值,若有则组织格式输出,否则不输出返回值的信息;步骤36,判断当前是否有输出信息,若有则进行步骤37,否则进行步骤39,本次拦截结束;步骤37,从来自所述配置模块的关注点配置信息中读取特定于本关注点的输出级别信息;步骤38,将输出级别信息和输出信息传递给输出模块;步骤39,本次拦截结束,等待下一次的激活。
全文摘要
本发明为一种函数调用跟踪系统和跟踪方法,涉及软件系统跟踪和系统运行监视技术,系统包括输出模块,用于输出信息,配置模块,用于配置各关注点的信息、输出信息和输出级别,控制模块,用于根据关注点信息设置跟踪器,根据输出信息设置输出格式,将信息传递到所述输出模块;方法包括以下步骤设置配置模块的配置文件,登记关注点;指定输出级别和输出位置;按照跟踪参数输出系统信息。本发明无需在业务功能内部设置跟踪器,可以将业务功能模块和跟踪模块的耦合度保持在恒定值,不随关注点的增加而改变,显著降低了系统业务模块和跟踪模块之间的耦合程度,提高了系统的可维护性,使系统架构更加清晰。
文档编号G06F11/36GK101089827SQ200710128950
公开日2007年12月19日 申请日期2007年7月27日 优先权日2007年7月27日
发明者王大勇, 孙振伟, 何谦 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1