CN103777930B - 程序内部信息的输出方法、获取方法、监测方法及其装置 - Google Patents
程序内部信息的输出方法、获取方法、监测方法及其装置 Download PDFInfo
- Publication number
- CN103777930B CN103777930B CN201210401744.5A CN201210401744A CN103777930B CN 103777930 B CN103777930 B CN 103777930B CN 201210401744 A CN201210401744 A CN 201210401744A CN 103777930 B CN103777930 B CN 103777930B
- Authority
- CN
- China
- Prior art keywords
- information
- program internal
- program
- internal information
- mark
- 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
Links
Landscapes
- Debugging And Monitoring (AREA)
- Storage Device Security (AREA)
Abstract
本申请公开了一种程序内部信息的输出方法、获取方法、监测方法及其装置;其中,所述输出方法包括:得到程序内部信息;针对所述程序内部信息添加一个或者多个标记;针对添加了所述一个或者多个标记的所述程序内部信息进行处理生成信息块;以及向程序信息集合输出所述信息块。本申请能够低代价且可靠地输出或让外部获取/监测程序内部信息。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种程序内部信息的输出方法、获取方法、监测方法及其装置。
背景技术
目前获取程序(包括进程、线程等)在执行过程中的内部信息的方式主要包括两类:
第一类技术方案如图1所示:在服务程序中添加API(ApplicationProgrammingInterface,应用程序编程接口),监控程序/测试用例通过调用API获取程序内部信息。
第二类技术方案如图2所示:服务程序将程序内部信息以Log(日志)/共享内存的方式给出,监控程序/测试用例通过读取Log/共享内存来获取程序内部信息。
前述第一类方案中添加API的方式一般需要增加很多的设计和编码工作:对外,通常需要添加独立或者共享的服务接口,以API的方式对外提供查询服务;同时,其内部通常还涉及到使用多线程技术,甚至涉及维护线程池,以这样的方式支持外部查询者查询程序内部信息;同时为了解决脏读问题,即读线程正在读取的信息被其他进程、线程改写从而造成所读信信息不正确,还需要涉及到锁技术。这种方案实现成本很高,而且会增加服务程序的复杂度,使得维护成本升高。这样的方案通常应用在不吝惜成本的大型服务程序或者操作系统的驱动程序中,对于一般性程序完全不适用。
而前述第二类方案中以Log的形式/共享内存的方式给出程序内部信息的成本通常是很低的,也不会明显增加服务程序的复杂度,但是服务程序在给出这些程序内部信息时,Log文件/共享内存通常只有一份,这些程序内部信息会和其他Log\共享内存信息掺杂在一起,监控程序/测试用例很难把这些程序内部信息从所有信息中过滤出来,或者需要付出很高的成本才能做到:高成本主要体现在需要编写很多Parser,并且维护这些Parser;而且容易出错,特别是在添加新的输出Log、写共享内存的代码时,或者修改了已有输出Log、写共享内存的代码时,错误更加容易产生,且不易被察觉到;
Log文件/共享内存只有一份,而服务程序有可能是多线程的,所以不同线程给出的程序内部信息也会掺杂在一起,很难分辨,容易出错,或者成本很高;
任何程序都可能发生错误,所以以Log/共享内存形式给出的程序内部信息可能是不完整的,或者被错误的修改了,在现有技术中,这些错误都无法被检测到。
发明内容
本申请要解决的技术问题是如何低代价且可靠地输出程序内部信息。
为了解决上述问题,本申请提供了一种程序内部信息的输出方法,包括:
得到程序内部信息;
针对所述程序内部信息添加一个或者多个标记;
针对添加了所述一个或者多个标记的所述程序内部信息进行处理生成信息块;以及
向程序信息集合输出所述信息块。
进一步地,针对所述程序内部信息添加一个或者多个标记的步骤包括:
在程序内部信息的首部、或结尾、或约定位置添加标记。
进一步地,所述标记包括:
约定的字符串、约定的通用唯一识别码、进程标识、线程标识。
进一步地,所述针对添加了所述一个或者标记的所述程序内部信息进行处理生成信息块的步骤包括:
针对添加了所述一个或者多个标记的所述程序内部信息进行封装,得到信息块。
进一步地,所述针对添加了所述一个或者标记的所述程序内部信息进行处理生成信息块的步骤还包括:
针对所述程序内部信息计算哈希值;以及
将所述哈希值添加到信息块中。
进一步地,所述针对添加了所述一个或者标记的所述程序内部信息进行封装的步骤包括:
对添加了所述一个或者多个标记的所述程序内部信息进行压缩;以及
对经压缩的程序内部信息进行封装。
进一步地,所述程序信息集合包括以软件形式存在、可以存储一定量信息的信息集合,包括:
日志;共享内存;注册表;数据库。
本申请还提供了一种程序内部信息的获取方法,包括:
读取程序信息集合,得到信息块;
还原所述信息块;
根据标记,筛选出添加了标记的所述程序内部信息;以及
去除所述标记,得到所述程序内部信息。
进一步地,所述标记包括:
约定的字符串、约定的通用唯一识别码、进程标识、线程标识。
进一步地,所述还原所述信息块的步骤包括:
如果所述信息块是经过封装的,则针对所述信息块进行解封装。
进一步地,所述还原所述信息块的步骤包括:
如果所述信息块是包含哈希值的,则根据所述哈希值对还原得到的程序内部信息进行校验。
进一步地,所述还原所述信息块的步骤包括:
如果所述信息块中的程序内部信息是经过压缩的,则针对所述经压缩的程序内部信息进行解压缩。
本申请要解决的又一技术问题是如何低代价且可靠地让外部获取程序内部信息。
为了解决上述问题,本申请提供了一种程序内部信息的输出装置,包括:
信息获取器,用于得到程序内部信息;
信息标记器,用于针对所述程序内部信息添加一个或者多个标记;
信息处理器,用于针对添加了所述一个或者多个标记的所述程序内部信息进行处理生成信息块;以及
信息输出器,用于向程序信息集合输出所述信息块。
进一步地,所述信息标记器针对所述程序内部信息添加一个或者多个标记是指:
所述信息标记器在程序内部信息的首部、或结尾、或约定位置添加标记。
进一步地,所述标记包括:
约定的字符串、约定的通用唯一识别码、进程标识、线程标识。
进一步地,所述信息处理器针对添加了所述一个或者标记的所述程序内部信息进行处理生成信息块是指:
所述信息处理器针对添加了所述一个或者多个标记的所述程序内部信息进行封装,得到信息块。
进一步地,所述信息处理器针对添加了所述一个或者标记的所述程序内部信息进行处理生成信息块时,还用于针对所述程序内部信息计算哈希值,以及将所述哈希值添加到所述信息块中。
进一步地,所述信息处理器对添加了所述一个或者多个标记的所述程序内部信息进行封装是指,对添加了所述一个或者多个标记的所述程序内部信息进行压缩,将经压缩的程序内部信息进行封装。
进一步地,所述程序信息集合包括以软件形式存在、能够存储一定量信息的信息集合,包括:
日志;共享内存;注册表;数据库。
本申请还提供一种程序内部信息的获取装置,包括:
信息读取器,用于读取程序信息集合,得到信息块;
信息还原器,用于还原所述信息块;
信息过滤器,用于根据标记,筛选出添加了标记的所述程序内部信息;以及
标记清除器,用于去除所述标记,得到所述程序内部信息。
进一步地,所述标记包括:
约定的字符串、约定的通用唯一识别码、进程标识、线程标识。
进一步地,所述信息还原器还原所述信息块是指:
所述信息还原器当所述信息块是经过封装的时,针对所述信息块进行解封装。
进一步地,所述信息还原器还用于当所述信息块包含哈希值时,根据所述哈希值对还原得到的程序内部信息进行校验。
进一步地,所述信息还原器还用于当所述信息块中的程序内部信息是经过压缩的时,针对所述经压缩的程序内部信息进行解压缩。
本申请要解决的又一技术问题是如何低代价且可靠地让外部监测程序内部信息。
为了解决上述问题,本申请提供了一种监测程序内部信息的方法,包括:
得到程序内部信息;
针对所述程序内部信息添加一个或者多个标记;
针对添加了所述一个或者多个标记的所述程序内部信息进行处理生成信息块;以及
向程序信息集合输出所述信息块;
读取程序信息集合,得到信息块;
还原所述信息块;
根据标记,筛选出添加了标记的所述程序内部信息;以及
去除所述标记,并将去除所述标记后的程序内部信息发送至外部监测装置。
本申请还提供了一种监测程序内部信息的装置,包括:
信息获取器,用于得到程序内部信息;
信息标记器,用于针对所述程序内部信息添加一个或者多个标记;
信息处理器,用于针对添加了所述一个或者多个标记的所述程序内部信息进行处理生成信息块;以及
信息输出器,用于向程序信息集合输出所述信息块;
信息读取器,用于读取程序信息集合,得到信息块;
信息还原器,用于还原所述信息块;
信息过滤器,用于根据标记,筛选出添加了标记的所述程序内部信息;以及
标记清除器,用于去除所述标记,并将去除所述标记后的程序内部信息发送至外部监测装置。
本申请的一个实施例至少具有以下优点:能够低成本的输出/获取程序内部信息,而且不易出错;本申请的另一实施例可以区分不同进程/线程的程序内部信息;本申请的又一实施例可以在输出/获取程序内部信息前进行验证,能保证程序内部信息的完整无误。当然,实施本申请的任一产品必不一定需要同时达到以上所述的所有优点。
附图说明
图1是现有技术中获取程序内部信息的第一类方法的示意图;
图2是现有技术中获取程序内部信息的第二类方法的示意图;
图3是一个优选实施例中程序内部信息的输出方法的流程示意图;
图4是一个优选实施例中程序内部信息的获取方法的流程示意图;
图5是一个优选实施例中程序内部信息的输出装置的结构示意图;
图6是一个优选实施例中程序内部信息的获取装置的结构示意图;
图7是一个程序内部信息的监测装置的具体备选例的示意图。
具体实施方式
下面将结合附图及实施例对本申请的技术方案进行更详细的说明。
需要说明的是,如果不冲突,本申请实施例以及实施例中的各个特征可以相互结合,均在本申请的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例中的程序内部信息为程序在执行过程中存在于进程或线程内部的信息。从段结构语言的角度看来,所述的程序内部信息包括但不限于:局部变量中存储的值,全局变量中存储的值,静态变量中存储的值,结构体中存储的所有的值,在堆中、栈中或者其他段中分配的内存中存储的值。从面向对象的语言角度看来,所述的程序内部信息包括但不限于:类实例中存储的所有的值,类静态成员变量中存储的所有的值,集合、哈希表、向量、数组、有向图、无向图、线性表、链表、堆栈或者其他类似数据结构中存储的所有的值。从操作系统层面看来,所述的程序内部信息包括但不限于:寄存器中存储的值,缓存、内存或者虚拟内存中存储的值,被持久化或者串行化到本地文件或数据库中的进程或者线程中存储的信息,系统的互斥变量、锁、信号量等用于进程、线程间同步的变量中存储的信息。应当注意的是,随着技术的发展,程序在执行过程中的内部信息的范围也会随之扩大,但这些信息都将落入本申请公开的程序内部信息的范围。
在本申请的一个优选实施例中,提供了一种程序内部信息的输出方法,如图3所示,包括下列步骤S301~步骤S304:
S301、得到程序内部信息;
S302、针对该程序内部信息添加一个或者多个标记;
S303、针对添加了标记的程序内部信息进行处理生成信息块;以及
S304、向程序信息集合输出所述信息块。
本实施例中,步骤S301中得到程序内部信息过程可以但不限于包括:程序根据设计在适当的时间或者条件下调用或者触发该实施例中的方法,并将程序内部信息的值或者地址以参数的形式提供给该实施例中的方法;该实施例中的方法能够访问部分的或者全部的程序的内部信息,例如通过共享内存技术,该实施例中的方法在适当的时间或条件下主动的访问这些程序的内部信息;在某些操作系统中,比如Microsoft编写的Window系列操作系统、开源社区编写的Unix\Linux系列操作系统、Apple编写的Mac系列操作系统等,系统提供了对进程、线程进行调试(Debug)的功能,这些功能也可以有效的在适当的时间或者条件下挂起进程、线程,然后获得程序的内部信息,然后使得该进程、线程继续。
本实施例中,程序信息集合可以包括但不限于:日志、共享内存、注册表及数据库等以软件形式存在、可以存储一定量信息的信息集合;硬盘、软盘、DVD、闪存、硬盘阵列等以硬件形式存在、可以存储一定量信息的信息集合;云存储服务、SAN、共享硬盘等以服务形式存在、可以存储一定量信息的信息集合。当然,本领域技术人员根据在此公开的说明书和权利要求书的指导,还可以找到其他形式的、可以存储一定量信息的信息集合,但并未离开程序信息集合的范围。
本实施例中,步骤S304中向程序信息集合输出信息块的过程将按照约定的格式进行输出。例如,约定使用行的形式输出。此处的行应理解为以约定符号、字符串分割而成的一段数据流,经典地,Unix\Linux系统使用符号‘\n’(十六进制表示为0x0A)来分行,Windows系统使用字符串‘\n\r’(十六进制表示0x0A、0x0D)来分行,Mac系统使用符号‘\r’(十六进制表示0x0D)来分行,HTML浏览器使用字符串‘<br>’来分行。但是,本领域技术人员可以理解到,任何事先约定的符号、字符串都可以用以分行,而没有离开本申请所描述的范围。再例如,约定使用XML的形式输出,信息块将以XML中的一个元素或者多个元素的形式输出。当然,本领域技术人员还可以找到其他的约定格式输出,但并未离开约定格式这一范围。
在另一备选实施例中,步骤S302具体可以包括:
在程序内部信息的首部、或结尾、或约定位置添加标记。
此处的约定位置不应当机械地理解为仅仅包括事先约定的固定位置,其还包括根据事先约定的格式可以确定的位置。以下结合示例说明:例如,使用‘\t’(十六进制表示0x09)分隔成列的内部信息,形如,“line0155:\tTag:\tThisis a message”,信息中有两个‘\t’,将信息分隔成三列,即“line0155”、“Tag:”和“This is a message”,作为示例,可以约定在第二列的“Tag:”后添加标记,例如,所添加标记为“Special_Log_Tag0527”,那么添加后的第二列为“Tag:Special_Log_Tag0527”,添加后的信息为“line0155:\tTag:Special_Log_Tag0527\tThis is a message”。再例如,使用XML格式的内部信息,形如:<line id=”155”tag=””message=”This is a message”>,作为示例,可以约定在属性tag中添加标记,例如,所添加标记为“Special_Log_Tag0527”,那么添加后的信息为<line id=”155”tag=”Special_Log_Tag0527”message=”This is a message”>。当然,本领域技术人员根据在此公开的说明书和权利要求书的指导,还可以找到方式来约定位置,但这些并未离开本申请公开的约定位置的范围。
添加标记的作用在于将添加标记的信息与未添加标记的信息区别开来。实际应用时不限于采用上述方法标记程序内部信息,也可以采用别的方法标记程序内部信息,以使其区别于其它信息。
在另一备选实施例中,标记可以但不限于包括:事先约定的字符串,其可以是事先约定的固定字符串,也可以是满足一定约定的动态字符串。例如,如果使用“yyyy-MM-dd:HH:mm:ss”格式的时间字符串来进行标记,同时可以约定“yyyy-MM-dd”部分用于标记识别,例如:标记“2012-08-31:10:10:15”,“2012-08-31”部分用于标记识别;事先约定的UUID(Universally UniqueIdentifier,通用唯一识别码),这样识别码可以保证一定不会与其他非约定字符串混淆;当程序内部信息分别属于不同进程时,标记还可以包括程序内部信息的当前进程ID(标识);当程序内部信息分别属于不同线程时,标记还可以包括程序内部信息的线程ID(标识);当包括当前进程ID或线程ID时,如果在搜索时将标记限定为某个进程或线程的ID,就可以搜索出属于某个进程或线程的程序内部信息。实际应用时标记也可以是或包括其它标识。
在另一备选实施例中,可以只有一个标记;而在另一备选实施例中,也可以有多个标记。例如,在既有多进程又有多线程的情况下,可以将进程ID和线程ID都添加到内部信息中。
在另一备选实施例中,备选地,步骤S303可以包括:针对添加了一个或者多个标记的程序内部信息进行封装,从而使程序内部信息可以表达更加复杂的数据结构。以下将举例说明复杂数据结构和非复杂数据结构的区别,例如,程序内部的一个整形数变量可以看做典型的非复杂数据结构,而程序内部的一个存放整形数的链表可以看做典型的复杂数据结构。在表示整形数链表时,简单的串行化或者字符串化(toString操作)将不再能胜任,所以需要使用约定的格式对这样的数据结构进行封装。例如,针对上文中提到的链表,可以使用INI格式进行封装,例如,该链表为{3}->{5}->{4}->NULL,名称为intLink,此链表包含三个节点,第一节点存放整数3,并指向第二节点,第二节点存放整数5,并指向第三节点,第三节点存放整数4,并指向NULL,即空指针,表示第三节点为链表的最后一个节点。使用INI格式封装,会将数据封装成形如:intLink[0]=3;intLink[1]=5;intLink[2]=4;的数据信息。再例如,对于上文提到的链表,如果使用XML格式封装,会将数据封装成形如:<intLink><node i=“3”/><node i=“5”/><node i=“4”/></intLink>的数据信息。当然,本领域技术人员根据在此公开的内容的启示,还可以使用其他的格式来封装数据,但其均未离开本申请的精神和范围。
在另一备选实施例中,备选地,步骤S303可以包括:针对程序内部信息计算哈希值,并将该哈希值添加到信息块中。计算哈希值的作用在于可以帮助后续过程校验程序内部信息的完整性。用于计算哈希值的哈希算法有很多种选择,优选地,可以选择MD5哈希算法。
在另一备选实施例中,备选地,步骤S303可以包括:对添加了标记的程序内部信息进行压缩,并将经压缩的程序内部信息封装成信息块。对数据进行压缩可以减少输出信息所占用的存储空间。用于压缩计算的压缩算法有很多种选择,典型地,可以选择哈夫曼压缩算法。
在另一备选实施例中,在步骤S304中,信息块一次性写入程序信息集合。此处的一次性写入是指线程互斥的一次性写入,即当一个线程在写入信息块时,不会被打断,如果在其写入过程中,正好遇到CPU时间片用完,线程被换出,那么其他线程也无法写入信息块,必须等该线程重新换入,并完成写入操作后,才允许其他线程写入,之谓互斥。
实际应用时也不排除分条写入的实现方式。
此外,本申请实施例还提供一种程序内部信息的获取方法。
所述程序内部信息的获取方法是对使用所述程序内部信息的输出方法所输出的程序信息集合进行解析获得程序内部信息的方法。
所述程序内部信息的获取方法如图4所示,包括下列步骤S401~S404:
S401、读取程序信息集合,得到信息块;
S402、还原所述信息块;
S403、根据标记,筛选出添加了标记的程序内部信息;以及
S404、去除标记,得到程序内部信息。
所述解析程序内部信息的方法是输出程序内部信息的逆过程,包括:读取程序信息集合,拆解出信息块;然后针对信息块进行还原操作,得到添加了标记的程序内部信息。
当然,步骤S402可能未产生所需程序内部信息,因为程序信息集合中可能有其他格式的信息,其他格式的信息可能并不符合约定格式,所以还原过程包括对信息块的筛选。备选地,还原信息块的步骤包括:将不符合约定格式或者无法还原的信息块直接丢弃,还原得到添加了标记的程序内部信息后,基于约定的标记对程序内部信息进行筛选。备选地,基于约定的标记对程序内部信息进行筛选的步骤包括:针对符合约定的标记,其对应的程序内部信息保留,针对不符合约定的标记,其对应的程序内部信息丢弃。另一备选地,基于约定的标记对程序内部信息进行筛选的步骤包括:根据约定标记,可以将对应的程序内部信息进行分类,最后丢弃标记,得到程序内部信息。
本实施例中,程序信息集合可以但不限于包括:日志,共享内存,注册表,数据库等以软件形式存在、可以存储一定量信息的信息集合;硬盘、软盘、DVD、闪存、硬盘阵列等以硬件形式存在、可以存储一定量信息的信息集合;云存储服务、SAN、共享硬盘等以服务形式存在、可以存储一定量信息的信息集合。当然,本领域技术人员根据在此公开的说明书和权利要求书的指导,还可以找到其他形式的、可以存储一定量信息的信息集合,但并未离开程序信息集合的范围。
在另一备选实施例中,标记可以但不限于包括:事先约定的字符串(其可以是事先约定的固定字符串,也可以是满足一定约定的动态字符串)、事先约定的UUID;当程序内部信息分别属于不同进程时,标记还可以包括程序内部信息的当前进程ID(标识);当程序内部信息分别属于不同线程时,标记还可以包括程序内部信息的线程ID(标识);实际应用时标记也可以是或包括其它标识。
在另一备选实施例中,步骤S402包括:
如果所述信息块是经过封装的,则针对所述信息块进行解封装。
在另一备选实施例中,步骤S402包括:
如果所述信息块是包含哈希值的,则根据所述哈希值对还原得到的程序内部信息进行校验。用于计算哈希值的哈希算法有很多种选择,优选地,可以选择MD5哈希算法。
在另一备选实施例中,步骤S402包括:
如果所述信息块中的程序内部信息是经过压缩的,则针对所述经压缩的程序内部信息进行解压缩。用于解压缩计算的算法与压缩时的相一致,有很多种选择,典型地,可以选择哈夫曼压缩算法。
在另一备选实施例中,程序内部信息的获取方法还可以包括:
S405、将得到的程序内部信息组装成能够被读取的数据接口。
在本申请的再一个优选实施例中,提供了一种程序内部信息的输出装置,如图5所示,包括:
信息获取器51,用于得到程序内部信息;
信息标记器52,用于针对所述程序内部信息添加一个或者多个标记;
信息处理器53,用于针对添加了所述一个或者多个标记的所述程序内部信息进行处理生成信息块;以及
信息输出器54,用于向程序信息集合输出所述信息块。
本实施例中,信息获取器51得到程序内部信息过程可以但不限于包括:程序根据设计在适当的时间或者条件下调用或者触发该实施例中的信息获取器,并将程序内部信息的值或者地址以参数的形式提供给该实施例中的信息获取器;该实施例中的信息获取器能够访问部分的或者全部的程序的内部信息,例如通过共享内存技术,该实施例中的信息获取器在适当的时间或条件下主动的访问这些程序的内部信息;在某些操作系统中,比如Microsoft编写的Window系列操作系统、开源社区编写的Unix\Linux系列操作系统、Apple编写的Mac系列操作系统等,系统提供了对进程、线程进行调试(Debug)的功能,这些功能也可以有效的在适当的时间或者条件下挂起进程、线程,然后获得程序的内部信息,然后使得该进程、线程继续。
本实施例中,程序信息集合可以但不限于包括:日志,共享内存,注册表,数据库等以软件形式存在、可以存储一定量信息的信息集合;硬盘、软盘、DVD、闪存、硬盘阵列等以硬件形式存在、可以存储一定量信息的信息集合;云存储服务、SAN、共享硬盘等以服务形式存在、可以存储一定量信息的信息集合。当然,本领域技术人员根据在此公开的说明书和权利要求书的指导,还可以找到其他形式的、可以存储一定量信息的信息集合,但并未离开程序信息集合的范围。
本实施例中,信息输出器54向程序信息集合输出信息块的过程将按照约定的格式进行输出。例如,约定使用行的形式输出。此处的行应理解为以约定符号、字符串分割而成的一段数据流。再例如,约定使用XML的形式输出,信息块将以XML中的一个元素或者多个元素的形式输出。当然,本领域技术人员还可以找到其他的约定格式输出,但并未离开约定格式这一范围。
在另一备选实施例中,信息标记器52针对所述程序内部信息添加标记具体可以是指:
信息处理器在程序内部信息的首部、或结尾、或约定位置添加标记。
此处的约定位置不应当机械地理解为仅仅包括事先约定的固定位置,其还包括根据事先约定的格式可以确定的位置。当然,本领域技术人员根据在此公开的说明书和权利要求书的指导,还可以找到方式来约定位置,但这些并未离开本申请公开的约定位置的范围。
添加标记的作用在于将添加标记的信息与未添加标记的信息区别开来。实际应用时不限于采用上述方法标记程序内部信息,也可以采用别的方法标记程序内部信息,以使其区别于其它信息。
在另一备选实施例中,标记可以但不限于包括:事先约定的字符串(其可以是事先约定的固定字符串,也可以是满足一定约定的动态字符串)、事先约定的UUID;当程序内部信息分别属于不同进程时,标记还可以包括程序内部信息的当前进程ID(标识);当程序内部信息分别属于不同线程时,标记还可以包括程序内部信息的线程ID(标识);实际应用时标记也可以是或包括其它标识。
在另一备选实施例中,备选地,所述信息处理器53可以针对添加了一个或者多个标记的程序内部信息进行封装,得到信息块,从而使程序内部信息可以表达更加复杂的数据结构。当然,本领域技术人员根据本申请公开的内容的启示,可以使用各种格式来封装数据,但其均未离开本申请的精神和范围。
在另一备选实施例中,备选地,所述信息处理器53可以针对程序内部信息计算哈希值,并将该哈希值添加到信息块中。计算哈希值的作用在于可以帮助后续过程校验程序内部信息的完整性。用于计算哈希值的哈希算法有很多种选择,优选地,可以选择MD5哈希算法。
在另一备选实施例中,备选地,所述信息处理器53可以对添加了标记的程序内部信息进行压缩,并将经压缩的程序内部信息封装成信息块。对数据进行压缩可以减少输出信息所占用的存储空间。用于压缩计算的压缩算法有很多种选择,典型地,可以选择哈夫曼压缩算法。
在另一备选实施例中,在所述信息输出器54向程序信息集合输出信息块的步骤中,信息块一次性写入程序信息集合。此处的一次性写入是指线程互斥的一次性写入,即当一个线程在写入信息块时,不会被打断,如果在其写入过程中,正好遇到CPU时间片用完,线程被换出,那么其他线程也无法写入信息块,必须等该线程重新换入,并完成写入操作后,才允许其他线程写入,之谓互斥。
此外,本申请实施例还提供一种程序内部信息的获取装置,是对所述程序内部信息的输出装置所输出的程序信息集合进行解析获得程序内部信息的装置,如图6所示,包括:
信息读取器61,用于读取程序信息集合,得到信息块;
信息还原器62,用于还原所述信息块;
信息过滤器63,用于根据标记,筛选出添加了标记的所述程序内部信息;以及
标记清除器64,用于去除所述标记,得到所述程序内部信息。
当然,信息还原器62可能未产生添加了标记的程序内部信息,因为程序信息集合中可能有其他格式的信息,其并不符合约定格式,所以还原过程本身就是对信息块的筛选,备选地,可以将不符合约定格式或者无法还原的信息块直接丢弃,还原得到标记和程序内部信息后,基于约定的标记对程序内部信息进行筛选,备选地,针对符合约定的标记,其对应的程序内部信息保留,针对不符合约定的标记,其对应的程序内部信息丢弃;另一备选地,根据约定标记,可以将对应的程序内部信息进行分类,最后丢弃标记,得到程序内部信息。
本实施例中,程序信息集合可以但不限于包括:日志,共享内存,注册表,数据库等以软件形式存在、可以存储一定量信息的信息集合;硬盘、软盘、DVD、闪存、硬盘阵列等以硬件形式存在、可以存储一定量信息的信息集合;云存储服务、SAN、共享硬盘等以服务形式存在、可以存储一定量信息的信息集合。当然,本领域技术人员根据在此公开的说明书和权利要求书的指导,还可以找到其他形式的、可以存储一定量信息的信息集合,但并未离开程序信息集合的范围。
在另一备选实施例中,标记可以但不限于包括:事先约定的字符串(其可以是事先约定的固定字符串,也可以是满足一定约定的动态字符串)、事先约定的UUID;当程序内部信息分别属于不同进程时,标记还可以包括程序内部信息的当前进程ID(标识);当程序内部信息分别属于不同线程时,标记还可以包括程序内部信息的线程ID(标识);实际应用时标记也可以是或包括其它标识。
在另一备选实施例中,信息还原器62还原所述信息块是指:所述信息还原器当所述信息块是经过封装的时,针对所述信息块进行解封装。
在另一备选实施例中,信息还原器62还用于当所述信息块包含哈希值时,根据所述哈希值对还原得到的程序内部信息进行校验。用于计算哈希值的哈希算法有很多种选择,优选地,可以选择MD5哈希算法。
在另一备选实施例中,所述信息还原器62还用于当所述信息块中的程序内部信息是经过压缩的时,针对所述经压缩的程序内部信息进行解压缩。用于解压缩计算的算法与压缩时的相一致,有很多种选择,典型地,可以选择哈夫曼压缩算法。
在另一备选实施例中,程序内部信息的获取装置还包括:数据接口组装器65,用于将得到的程序内部信息组装成能够被读取的数据接口。
本申请实施例还提供了一种程序内部信息的监测方法,包括输出程序内部信息和获取程序内部信息两大步骤;其中,所述输出/获取程序内部信息的步骤可采用上述程序内部信息的输出/获取方法的实施例或其备选方案中的任一个来实现。
下面所描述的是一个程序内部信息的监测装置的具体实施例,示意图如图7所示,包括程序内部信息的输出装置71和程序内部信息的获取装置72,其中所述程序内部信息的输出/获取装置并不限于下例,可采用上述实施例或其备选方案中的任一个。所述程序内部信息的监测装置可以为监控程序或测试用例73提供用于性能监测或分析的程序内部信息74。程序内部信息的装置输出71组装于待监测程序中,在待监测程序在操作系统中执行时,将待监测程序在执行过程中的内部信息输出给程序内部信息的获取装置72。
该备选例中,程序内部信息的输出装置71具体可以包括:信息获取器711、信息标记器712、信息处理器713和信息输出器714;
所述信息获取器711用于当被服务程序调用时,从服务程序取得当前的程序内部信息、当前进程ID、线程ID并调用所述信息标记器712;当所述信息标记器712工作完毕后调用所述信息处理器713;当所述信息处理器713工作完毕后调用所述信息输出器714;
所述信息标记器712用于当被调用时,对信息块的每一行首部添加事先约定的UUID;还可以添加所述当前进程ID、线程ID;添加完成后通知所述信息获取器711工作完毕;
所述信息处理器713用于当被调用时,将所述当前的程序内部信息以及对所述程序内部信息计算得到的MD5哈希值封装为信息块;封装完成后通知所述信息获取器711工作完毕;
所述信息输出器714用于当被调用时,将所述信息块一次性写入程序信息集合75。
该备选例中,所述程序内部信息的获取装置72具体可以包括:
信息读取器721,用于读取程序信息集合,得到信息块;
信息还原器722,用于解封装信息块,得到程序内部信息及MD5哈希值;通过所述MD5哈希值验证所得到的程序内部信息的完整性;
信息过滤器723,用于根据标记,筛选出添加了标记的所述程序内部信息;以及
标记清除器724,用于去除所述标记,得到所述程序内部信息。
进一步地,标记清除器724可以将去除所述标记后的程序内部信息发送至外部监测装置,即所述监控程序/测试用例73,如此,实现对程序内部信息的监测。
数据接口组装器725,用于将程序内部信息组装成监控程序/测试用例73能够读取的数据接口,发送给所述监控程序/测试用例73。
程序内部信息的监测过程包括下述的步骤(1)~(7):
(1)服务程序76在需要给出程序内部信息74时,调用信息获取器711,将所有原始格式的程序内部信息74交给信息获取器711,同时也将当前进程ID、线程ID交给信息获取器711;
(2)信息获取器711调用信息标记器712,对程序内部信息74的每一行做标记。比如,在程序内部信息74的每一行首部添加事先约定的UUID(通用唯一识别码);还可以添加所述当前进程ID、线程ID。
(3)信息获取器711调用信息处理器713,按照事先约定的格式,将标记后的程序内部信息封装成信息服从格式的信息块,并将计算得到的MD5哈希值放入信息块。
(4)信息获取器711调用信息输出器714,将封装后的信息块一次性写入程序信息集合75。
(5)监控程序/测试用例73等需要读取程序内部信息74时,信息读取器721读取程序信息集合75,得到信息块,由信息还原器722将原始格式的程序内部信息解封装出来,同时验证程序内部信息的完整性。
(6)信息过滤器723根据标记,筛选出程序内部信息74。比如,使用事先约定的UUID,对所有的Log进行grep,筛选出添加过标记的信息;标记清除器将724标记去掉。
(7)调用数据接口组装器725,将原始格式的程序内部信息74组装成监控程序/测试用例73能够读取的数据接口,返回给监控程序/测试用例73。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请不限制于任何特定形式的硬件和软件的结合。
当然,本申请还可有其他多种实施例,在不背离本申请精神及其实质的情况下,熟悉本领域的技术人员当可根据本申请作出各种相应的改变和变形,但这些相应的改变和变形都应属于本申请的权利要求的保护范围。
Claims (26)
1.一种程序内部信息的输出方法,其特征在于,包括:
得到程序内部信息;程序内部信息为程序在执行过程中存在于进程或线程内部的信息;
针对所述程序内部信息添加一个或者多个标记;
针对添加了所述一个或者多个标记的所述程序内部信息进行处理生成信息块;以及
向程序信息集合输出所述信息块。
2.如权利要求1所述的方法,其特征在于,针对所述程序内部信息添加一个或者多个标记的步骤包括:
在程序内部信息的首部、或结尾、或约定位置添加标记。
3.如权利要求2所述的方法,其特征在于,所述标记包括:
约定的字符串、约定的通用唯一识别码、进程标识、线程标识。
4.如权利要求1~3中任一项所述的方法,其特征在于,所述针对添加了所述一个或者标记的所述程序内部信息进行处理生成信息块的步骤包括:
针对添加了所述一个或者多个标记的所述程序内部信息进行封装,得到信息块。
5.如权利要求4所述的方法,其特征在于,所述针对添加了所述一个或者标记的所述程序内部信息进行处理生成信息块的步骤还包括:
针对所述程序内部信息计算哈希值;以及
将所述哈希值添加到信息块中。
6.如权利要求5所述的方法,其特征在于,所述针对添加了所述一个或者标记的所述程序内部信息进行封装的步骤包括:
对添加了所述一个或者多个标记的所述程序内部信息进行压缩;以及
对经压缩的程序内部信息进行封装。
7.如权利要求1~3中任一项所述的方法,其特征在于,所述程序信息集合包括以软件形式存在、可以存储一定量信息的信息集合,包括:
日志;共享内存;注册表;数据库。
8.一种程序内部信息的获取方法,其特征在于,包括:
读取程序信息集合,得到信息块;
还原所述信息块;
根据标记,筛选出添加了标记的所述程序内部信息;以及
去除所述标记,得到所述程序内部信息;程序内部信息为程序在执行过程中存在于进程或线程内部的信息。
9.如权利要求8所述的方法,其特征在于,所述标记包括:
约定的字符串、约定的通用唯一识别码、进程标识、线程标识。
10.如权利要求8或9所述的方法,其特征在于,所述还原所述信息块的步骤包括:
如果所述信息块是经过封装的,则针对所述信息块进行解封装。
11.如权利要求8或9所述的方法,其特征在于,所述还原所述信息块的步骤包括:
如果所述信息块是包含哈希值的,则根据所述哈希值对还原得到的程序内部信息进行校验。
12.如权利要求8或9所述的方法,其特征在于,所述还原所述信息块的步骤包括:
如果所述信息块中的程序内部信息是经过压缩的,则针对所述经压缩的程序内部信息进行解压缩。
13.一种程序内部信息的输出装置,其特征在于,包括:
信息获取器,用于得到程序内部信息;程序内部信息为程序在执行过程中存在于进程或线程内部的信息;
信息标记器,用于针对所述程序内部信息添加一个或者多个标记;
信息处理器,用于针对添加了所述一个或者多个标记的所述程序内部信息进行处理生成信息块;以及
信息输出器,用于向程序信息集合输出所述信息块。
14.如权利要求13所述的装置,其特征在于,所述信息标记器针对所述程序内部信息添加一个或者多个标记是指:
所述信息标记器在程序内部信息的首部、或结尾、或约定位置添加标记。
15.如权利要求14所述的装置,其特征在于,所述标记包括:
约定的字符串、约定的通用唯一识别码、进程标识、线程标识。
16.如权利要求13~15中任一项所述的装置,其特征在于,所述信息处理器针对添加了所述一个或者标记的所述程序内部信息进行处理生成信息块是指:
所述信息处理器针对添加了所述一个或者多个标记的所述程序内部信息进行封装,得到信息块。
17.如权利要求16所述的装置,其特征在于:
所述信息处理器针对添加了所述一个或者标记的所述程序内部信息进行处理生成信息块时,还用于针对所述程序内部信息计算哈希值,以及将所述哈希值添加到所述信息块中。
18.如权利要求17所述的装置,其特征在于:
所述信息处理器对添加了所述一个或者多个标记的所述程序内部信息进行封装是指,对添加了所述一个或者多个标记的所述程序内部信息进行压缩,将经压缩的程序内部信息进行封装。
19.如权利要求13~15中任一项所述的装置,其特征在于,所述程序信息集合包括以软件形式存在、能够存储一定量信息的信息集合,包括:
日志;共享内存;注册表;数据库。
20.一种程序内部信息的获取装置,其特征在于,包括:
信息读取器,用于读取程序信息集合,得到信息块;
信息还原器,用于还原所述信息块;
信息过滤器,用于根据标记,筛选出添加了标记的所述程序内部信息;以及
标记清除器,用于去除所述标记,得到所述程序内部信息;程序内部信息为程序在执行过程中存在于进程或线程内部的信息。
21.如权利要求20所述的装置,其特征在于,所述标记包括:
约定的字符串、约定的通用唯一识别码、进程标识、线程标识。
22.如权利要求20或21所述的装置,其特征在于,所述信息还原器还原所述信息块是指:
所述信息还原器当所述信息块是经过封装的时,针对所述信息块进行解封装。
23.如权利要求20或21所述的装置,其特征在于:
所述信息还原器还用于当所述信息块包含哈希值时,根据所述哈希值对还原得到的程序内部信息进行校验。
24.如权利要求20或21所述的装置,其特征在于:
所述信息还原器还用于当所述信息块中的程序内部信息是经过压缩的时,针对所述经压缩的程序内部信息进行解压缩。
25.一种监测程序内部信息的方法,其特征在于,包括:
得到程序内部信息,程序内部信息为程序在执行过程中存在于进程或线程内部的信息;
针对所述程序内部信息添加一个或者多个标记;
针对添加了所述一个或者多个标记的所述程序内部信息进行处理生成信息块;以及
向程序信息集合输出所述信息块;
读取程序信息集合,得到信息块;
还原所述信息块;
根据标记,筛选出添加了标记的所述程序内部信息;以及
去除所述标记,将去除所述标记后的程序内部信息发送至外部监测装置。
26.一种监测程序内部信息的装置,其特征在于,包括:
信息获取器,用于得到程序内部信息;程序内部信息为程序在执行过程中存在于进程或线程内部的信息;
信息标记器,用于针对所述程序内部信息添加一个或者多个标记;
信息处理器,用于针对添加了所述一个或者多个标记的所述程序内部信息进行处理生成信息块;以及
信息输出器,用于向程序信息集合输出所述信息块;
信息读取器,用于读取程序信息集合,得到信息块;
信息还原器,用于还原所述信息块;
信息过滤器,用于根据标记,筛选出添加了标记的所述程序内部信息;以及
标记清除器,用于去除所述标记,并将去除所述标记后的程序内部信息发送至外部监测装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210401744.5A CN103777930B (zh) | 2012-10-19 | 2012-10-19 | 程序内部信息的输出方法、获取方法、监测方法及其装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210401744.5A CN103777930B (zh) | 2012-10-19 | 2012-10-19 | 程序内部信息的输出方法、获取方法、监测方法及其装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103777930A CN103777930A (zh) | 2014-05-07 |
CN103777930B true CN103777930B (zh) | 2017-12-15 |
Family
ID=50570214
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210401744.5A Active CN103777930B (zh) | 2012-10-19 | 2012-10-19 | 程序内部信息的输出方法、获取方法、监测方法及其装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103777930B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105740120B (zh) * | 2014-12-11 | 2018-08-17 | 中国科学院软件研究所 | 基于共享内存的软件运行过程实时监测与控制方法及系统 |
CN105718353B (zh) * | 2016-01-18 | 2019-01-29 | 深圳市紫光同创电子有限公司 | 一种用于图形界面应用的测试方法、装置及系统 |
CN109150642B (zh) * | 2017-06-16 | 2021-01-08 | 腾讯科技(深圳)有限公司 | 应用内存错误检测方法、检测装置及存储介质 |
CN109783398B (zh) * | 2019-01-18 | 2020-09-15 | 上海海事大学 | 一种基于相关感知页面级ftl固态硬盘性能优化方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101826049A (zh) * | 2009-03-06 | 2010-09-08 | 上海摩波彼克半导体有限公司 | 嵌入式系统中调试信息输出的实现方法 |
CN102270131A (zh) * | 2011-06-29 | 2011-12-07 | 深圳市博康智能信息技术有限公司 | 一种调试信息统一管理系统 |
CN102314385A (zh) * | 2011-07-21 | 2012-01-11 | 中兴通讯股份有限公司 | 嵌入式浏览器的运行信息的输出、获取方法及其系统 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7660412B1 (en) * | 2005-12-09 | 2010-02-09 | Trend Micro Incorporated | Generation of debug information for debugging a network security appliance |
CN101436414B (zh) * | 2006-04-28 | 2011-03-23 | 夏普株式会社 | 记录参数设定装置、方法和程序、记录有该程序的记录介质、信息记录介质、记录重放装置 |
CN102279749B (zh) * | 2011-08-30 | 2014-01-29 | 大唐移动通信设备有限公司 | 一种代码归并方法和设备 |
-
2012
- 2012-10-19 CN CN201210401744.5A patent/CN103777930B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101826049A (zh) * | 2009-03-06 | 2010-09-08 | 上海摩波彼克半导体有限公司 | 嵌入式系统中调试信息输出的实现方法 |
CN102270131A (zh) * | 2011-06-29 | 2011-12-07 | 深圳市博康智能信息技术有限公司 | 一种调试信息统一管理系统 |
CN102314385A (zh) * | 2011-07-21 | 2012-01-11 | 中兴通讯股份有限公司 | 嵌入式浏览器的运行信息的输出、获取方法及其系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103777930A (zh) | 2014-05-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2909750B1 (en) | Specifying and applying rules to data | |
EP1950663A1 (en) | A method for identifying unknown virus and deleting it | |
CN103777930B (zh) | 程序内部信息的输出方法、获取方法、监测方法及其装置 | |
US8024297B2 (en) | Data logging system and method thereof for heterogeneous data | |
KR20150052125A (ko) | 상태 기계 엔진들에서의 지시 삽입 | |
CN109992476B (zh) | 一种日志的分析方法、服务器及存储介质 | |
CA2816781C (en) | Identifying client states | |
JP5377534B2 (ja) | Gui要素を識別する方法、装置およびシステム | |
US20080222215A1 (en) | Method for Deleting Virus Program and Method to Get Back the Data Destroyed by the Virus | |
CN106934011A (zh) | 一种json数据的结构化解析方法及装置 | |
CN110162510A (zh) | 文本对比方法、装置、计算机设备及存储介质 | |
JP5303795B2 (ja) | アプリケーションの解析方法、解析システム及び解析プログラム | |
JP4928848B2 (ja) | 計算機システム統合管理環境におけるメッセージ変換装置 | |
CN112989151A (zh) | 数据血缘关系展示方法、装置、电子设备及存储介质 | |
CN103617122B (zh) | 一种源代码的比对方法 | |
WO2007118271A1 (en) | A method and system and product for conditioning software | |
CN114461445A (zh) | 数据恢复方法及装置、电子设备、计算机可读存储介质 | |
BR102013021849A2 (pt) | método de armazenamento de dados em um sistema inserido de uma aeronave e sistema para armazenar e acessar dados em um sistema inserido de uma aeronave | |
CN113569234A (zh) | 一种用于安卓攻击场景重建的可视化取证系统及实现方法 | |
CN107656868B (zh) | 一种利用线程私有数据获取线程名字的调试方法及系统 | |
US11055838B2 (en) | Systems and methods for detecting anomalies using image based modeling | |
CN103678117B (zh) | 数据转换跟踪设备以及数据转换跟踪方法 | |
CN110084528A (zh) | 核电厂人因失误数据收集方法、装置、设备及介质 | |
CN103150408A (zh) | 实时数据库中根据点名找到数据库并访问的系统与方法 | |
CN110008281A (zh) | 一种基于Redis数据库可视化数据的处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |