CN100347669C - 运行日志取得方法 - Google Patents
运行日志取得方法 Download PDFInfo
- Publication number
- CN100347669C CN100347669C CNB2003101245667A CN200310124566A CN100347669C CN 100347669 C CN100347669 C CN 100347669C CN B2003101245667 A CNB2003101245667 A CN B2003101245667A CN 200310124566 A CN200310124566 A CN 200310124566A CN 100347669 C CN100347669 C CN 100347669C
- Authority
- CN
- China
- Prior art keywords
- function
- running log
- mentioned
- interface
- obtaining method
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/366—Software debugging using diagnostics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- 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/4482—Procedural
- G06F9/4484—Executing subprograms
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
运行日志取得方法、程序和存储介质,能容易地取得软件的处理日志,减少分析程序错误的人力。该方法用于取得包括执行预定处理的函数的程序的运行日志,包括将被加载的所述函数的地址改为用来取得运行日志的函数的地址的步骤,用来取得运行日志的函数包含以下步骤:调用进行上述预定处理的函数,执行该处理,将接收的执行结果送给上述程序;判断在上述程序的函数定义中是否定义了以预定方式规定了其类型的指针参数;若是,则将指针参数所指内存的内容作为所述规定数据类型的数据进行记录。所述类型可用索引结构体定义,从而通过访问索引结构体的指定成员来判断指针参数的类型。所述成员的类型可以是各种非输出函数和各种结构体等。
Description
技术领域
本发明涉及一种可取得被分成为多个模块的软件的处理运行日志的技术。
背景技术
历来,对于重现率低的软件故障,是通过取得软件的处理运行日志和分析该处理LOG而查清故障的原因并采取对策。
然而,在取得上述现有的处理运行日志方面存在以下的问题。
(1)为了在用户的动作环境中也能继续不断地取得运行日志,必须对软件的模块本身进行加工增加处理运行日志取得例行程序,这将加大为取得处理运行日志的作业负担。
(2)由于处理运行日志的取得是针对每个模块进行,生成的运行日志是以模块为单位的,很难取得作为完全按照时间顺序的运行日志的整个软件的处理的。因此,作为对整个处理运行日志的预测不佳,分析运行日志一直到发现故障原因的过程极其耗费工时。
发明内容
本发明为鉴于上述问题而完成的发明,其目的在于提供一种容易取得被分成为多个模块的软件的处理运行日志,并且可以削减用来分析软件故障原因的工时的运行日志的取得方法,以及用于藉助计算机实现该方法的程序和存放该程序的存储介质。
为达到上述目的,本发明提供了一种运行日志取得方法,用于取得包括至少一个执行预定处理的函数的程序的运行日志,该方法包括用于将被加载的用于执行上述预定处理的所述至少一个函数的地址改为用来取得运行日志的函数的地址的步骤,其中,所述用来取得运行日志的函数包含以下步骤:调用进行上述预定处理的所述至少一个函数,以执行该预定处理,接收执行结果并将所述接收到的执行结果转送给上述程序;判断在上述程序的函数定义中是否定义了以预定的方式规定了其类型的指针参数;并且如果定义了以预定方式规定了其类型的指针参数,则将该指针参数所指的内存的内容、函数的调用及返回时间、参数内容作为所述规定数据类型的数据进行记录。
在一个优选实施例中,用索引结构体定义所述指针参数的类型,并且所述判断步骤包括:通过访问所述索引结构体的指定成员来判断所述指针参数的类型。所述索引结构体的成员的类型可以是各种非输出函数和各种结构体。
本发明还提供了实现上述方法的程序和存在上述程序的存储介质。
本发明的其他特点和优点可从参考下面的附图的描述而了解,附图各图中同样或类似的部件被赋予同样的标号。
附图说明
包括在本说明书中并构成其一个组成部分的附图本发明的各个具体实施方式,并且与叙述一起用来说明本发明的原理。
图1为实现实施方式1的运行日志取得方法的计算机(软件评价系统)的构成的示图。
图2为实施方式1的函数加载时的通常的内存构成的示图。
图3为使用实施方式1的IAT Patch时的内存构成的示图。
图4A为使用实施方式1的IAT Patch时的状态的示图。
图4B为实施方式1的运行日志取得处理的流程图。
图5为使用实施方式1的IAT Patch时的内部构成的示图。
图6为实施方式1的COM服务器的接口的事例(instance)生成时的通常的内存构成的示图。
图7为使用实施方式1的VTable Patch时的内存构成的示图。
图8A为使用实施方式1的VTable Patch时的状态的示图。
图8B为实施方式1的运行日志取得处理的流程图。
图9为实施方式1的软件评价系统的内部构成的示图。
图10为实施方式2的函数定义的一例的示图。
图11为在实施方式2中,在用来将指针参数数据的实体作为运行日志取得的IDL中写入的说明的示图。
图12为取得实施方式2的运行日志的处理的流程图。
图13为在实施方式2中取得的运行日志数据的示图。
图14为根据第三实施方式,用在通常的函数定义不能取得参数的函数的例子的示图。
图15为各结构体在内存中的位置的示图。
图16为在根据实施方式3,用来取得图14所示的函数参数的运行日志的IDL中的记述的示图。
图17为根据实施方式3取得运行日志的处理的流程图。
图18为在根据实施方式3,利用图16所示的定义取得的运行日志数据的示图。
图19为在实施方式4中,用来设定开始运行日志取得的函数/方法的用户接口的示图。
图20为取得实施方式4的运行日志的处理的流程图。
图21为用来设定停止实施方式5中的运行日志取得的函数/方法的用户接口的示图。
图22为取得实施方式5的运行日志的处理的流程图。
图23为设定的只在以实施方式6的错误而结束的场合追加使用触发功能的设定的用户接口的示图。
图24为实施方式6的函数/方法的错误定义的内容的示图。
图25为取得实施方式6的运行日志的处理的流程图。
图26为实施方式6的通常的运行日志取得处理的详细流程图。
图27为取得实施方式6的运行日志的处理的流程图。
图28为对实施方式7的接口和方法进行树形显示的用户接口的示图。
图29为取得实施方式7的运行日志之际的处理的流程图。
图30为对实施方式8的接口和方法进行树形显示的用户接口的示图。
图31为取得实施方式8的运行日志之际的处理的流程图。
图32为将实施方式9的运行日志连日期一起进行分割保存的场合的处理的流程图。
图33为将实施方式10的运行日志按照大小或个数进行分割保存的场合的处理的流程图。
图34为在实施方式11中,将取得的运行日志存储于一定数量的内存中的场合的内存的概图。
图35为在实施方式11中,将取得的运行日志存储于一定数量的内存中的场合的运行日志取得的流程图。
具体实施方式
下面参照附图对本发明的优选实施方式予以详细说明。
[实施方式1]
本实施方式,是在从某一模块调用存在于另一个模块内的函数时的结构的、利用保存于内存中的输入函数地址或虚拟函数地址表(Virtual Address Table)、挂接模块间的函数调用并记录在运行日志中,这样可不对软件的模块本身进行加工而将整个软件的处理作为时间顺序的运行日志取得。下面具体说明之。
<系统构成>
图1为实现本发明的实施方式的运行日志取得方法的计算机(软件评价系统)的构成的示图。为简化说明起见,假设在本实施方式中,本软件评价系统是构筑在一台PC的内部,本发明的运行日志取得方法的特征是不管是构筑于一台PC的内部还是由多个PC构筑的网络系统,都有效。
在搭载有本软件评价系统的计算机中安装有CPU1、芯片组2、RAM3、硬盘控制器4、显示控制器5、硬盘驱动器6、CD-ROM驱动器7及显示器8。另外,设置有连接CPU1和芯片组2的信号线11、连接芯片组2和RAM3的信号线12、连接芯片组2和各种外围设备的外围设备总线13、连接硬盘控制器4和硬盘驱动器6的信号线14、连接硬盘控制器4和CD-ROM驱动器7的信号线15以及连接显示控制器5和显示器8的信号线16。
<涉及函数处理的运行日志的取得>
为了说明实现本发明的实施方式1的运行日志取得方法的软件评价系统,首先利用图2,对分成为多个模块的软件在通常的状态下如何加载到内存中予以说明。
通常,被分成为多个模块的软件,被分成为进行整体控制的执行文件EXE(23)和作为模块存在并担负补充EXE的任务的动态链接库DLL(27),在内存中加载EXE和DLL。EXE由代码段(28)和数据段(29)、输入函数地址表(22)构成。此外,引人函数地址表被函数所属的DLL分开(21、24),在每个DLL中写有加载各个函数的地址(30~35)。DLL函数的实体按每个DLL分开(25、26)加载,各个函数作为该DLL的一部分被加载(36~41)。在此图中,的示例是一个EXE使用A.DLL及B.DLL两个动态链接库内的函数,实际使用的函数为Func AA、Func AB、Func AC、Func BA、Func BB、Func BC等六个。
位于EXE的代码段内的代码调用函数Func AA的场合,首先读入写在引人函数地址表内的Func AA的地址(30)。此处实际上写入作为A.DLL的一部分而读入的Func AA代码(36)的地址,EXE的代码可以通过调用该地址而调用A.DLL的Func AA。
图3为实施方式1的内存构成的示图,与图2的不同之处在于对运行日志取得用的代码采用所谓的IAT Patch(Import AddressTable Patch)的方法,对函数调用进行重定向。
运行日志的取得一开始,就在内存内加载作为IAT Patch用的DLL的C.DLL(58)。C.DLL将引人函数地址表(52)内写入的函数的地址改写为作为C.DLL内的运行日志取得代码的Func CAA、Func CAB、Func CAC、Func CBA、Func CBB、Func CBC的地址(61~66)。C.DLL内的Func CAA、Func CAB、Func CAC、FuncCBA、Func CBB、Func CBC的代码(73~78),在记录运行日志的同时,调用被加载到应该接受原来的函数调用的内存中的、作为该函数的Func AA、Func AB、Func AC、Func BA、Func BB、Func BC(67~72)。
图4A为图3的IAT Patch的处理的示图,而图4B为运行日志取得处理的流程的流程图。为了简化说明起见,在此图中,在EXE调用A.DLL内的Func AA之际,IAT Patch产生的运行日志取得代码是如何运行的示例。
EXE(91)一调用Func AA(94),位于C.DLL内的运行日志取得代码将DLL名/函数名保存到内存中(步骤S402)、将调用时间保存于内存中、将调用时的参数保存于内存中、将调用时的指针参数指示的内存内容保存于另一个内存中(95、步骤S403)。其后,C.DLL调用本来应被调用的A.DLL(93)内的Func AA(99、步骤S404)。一旦A.DLL的Func AA处理(97)结束,并将控制返回C.DLL(98)的话,C.DLL就将返回时的时间保存于内存中,将返回值保存于内存中,并将返回时的指针参数指示的内存内容保存于另一个内存中(99)。其后,C.DLL,将保存的运行日志信息写入文件(100、步骤S405),像A.DLL的Func AA通常结束那样返回EXE(101)。
图5为实现实施方式1的运行日志取得方法的软件评价系统的内部构成的示图。通常,执行形式的EXE(113)调用DLL-1(116)及DLL-2(117)内的函数,此处,嵌入被称为API追踪程序(114)的运行日志取得代码,生成处理运行日志(115)。API追踪程序(114),根据记述DLL-1及DLL-2的函数定义文件(111)和通过改写哪一个DLL的哪一个函数的引人函数地址表而取得运行日志的设定情景(追踪情景112)而运作。
<涉及方法处理的运行日志的取得>
下面,在实现实施方式1的运行日志取得方法的软件评价系统中,为了说明执行文件EXE(113)在COM(构件对象模型)服务器中生成输出的接口的事例(instance)时是如何被加载到内存中,首先参照图6对在通常的状态下如何加载到内存的情况予以说明。
通常,进行接口的事例(instance)一生成的话,在COM服务器内,生成要求的接口(121、122)和其方法(:在面向对象编程中,记述了对象执行的过程的程序130~135),这两者都被加载到内存中。此处,virtual address table(虚拟地址表118、120)在生成的每一个事例(instance)中作成,并被送到执行生成要求的EXE。在此virtual address table中写有各个方法的生成地址(124~129)。EXE利用这些信息对各个接口进行调用。在此图中,表示的是一个EXE(119)生成Interface A(121)和Interface B(122)两个接口的事例(instance),并使用该接口内部的方法的示例,实际使用的方法为Method AA、Method AB、Method AC、Method BA、Method BB、Method BC(130~135)。
在EXE的代码调用函数Method AA的场合,首先读出写在virtual address table内的Method AA的地址(124)。此处实际上写有作为COM服务器的Interface A的一部分而生成的Method AA代码(130)的地址,通过调用该地址,EXE的代码可以调用Interface A的Method AA。
图7为使用实施方式1的软件评价系统的内存构成的示图,与图6的不同之处在于对运行日志取得用的代码采用所谓的VTablePatch(virtual address table Patch)的方法,对方法调用进行重定向。
运行日志的取得一开始,就在内存内加载作为VTable Patch用的DLL(143)。此DLL将写在virtual address table(136、138)内的方法的地址改写为作为DLL内的运行日志取得代码的MethodA′A、Method A′B、Method A′C、Method B′A、Method B′B、Method B′C的地址(145~150)。DLL(143)内的Method A′A、Method A′B、Method A′C、Method B′A、Method B′B、Method B′C的代码(157~162),在记录运行日志的同时,调用被加载到应该接受原来的函数调用的内存中的、作为该函数的Method AA、MethodAB、Method AC、Method BA、Method BB、Method BC(157~162)。
图8A为图7的VTable Patch处理的示图,图8B为运行日志取得处理的流程的流程图。为了简化说明起见,在此图中,表示在EXE调用COM服务器内的Interface A的Method AA之际,VTable Patch产生的运行日志取得代码是如何运作的示例。
EXE(163)一调用Method AA(166),位于DLL(164)内的运行日志取得代码将模块名/接口名/方法名保存到内存中(步骤S802)、将调用时间保存于内存中、将调用时的参数保存于内存中、将调用时的指针参数指示的内存内容保存于另一个内存中(167、步骤S802)。其后,DLL(164)调用本来应该调用的COM服务器(165)内的Method AA(168、步骤S804)。如COM服务器(165)的Method AA处理(169)结束,并将控制返回DLL(164)的话,DLL(164)就将返回时的时间保存于内存中,将返回值保存于内存中,并将返回时的指针参数指示的内存内容保存于另一个内存中(171)。其后,DLL将保存的运行日志信息写入文件(172、步骤S805)中,像COM服务器(165)的Method AA通常结束那样返回EXE(163)(173)。
图9为实施方式1的软件评价系统的内部构成的示图。通常,执行形式的EXE(176)调用COM服务器1(179)及COM服务器2(180)内的方法,此处,嵌入被称为API追踪程序(177)的运行日志取得代码,生成处理运行日志(178)。API追踪程序(177),根据记述COM服务器1(179)及COM服务器2(180)的函数定义文件(174)和通过改写哪一个COM服务器的哪一个方法的virtual address table取得运行日志的设定情景(175)而运作。
从以上的说明可知,根据本实施方式的运行日志取得方法,在取得被分成为多个模块的软件的处理运行日志中,可不对软件的模块本身进行改变而将模块内准备的函数/方法的调用作为运行日志进行记录,从而可以减少用于取得处理运行日志的作业负担。另外,生成的运行日志,可以取得按照时间顺序的运行日志,由于对运行日志的分析变得容易,可以削减用来分析软件故障原因的工时。
[实施方式2]
在本实施方式中,获取回叫函数等非输出函数作为运行日志。
图1为用在本实施方式的软件评价系统中的函数的例子,其参数不能用通常的函数定义取得。
作为回叫函数,定义了例如4种回叫函数:FuncInternal1、FuncInterna2、FuncInternal3、FuncInterna4.GetFuncPointer函数的第一参数dwKind指出上述4种回叫函数中的要发送给第二参数lpBuf的一种函数的指针。当第一参数为0的时GetFuncPointer函数,将lpBuf作为FuncInternal1的地址进行处理,当第一参数为1时,将lpBuf作为FuncInternal2的地址进行处理,当第一参数为2时,将lpBuf作为FuncInternal3的地址进行处理,而当第一参数为3时,将lpBuf作为FuncInternal4的地址进行处理。如利用通常的函数定义去定义GetFuncPointer,lpBuf变成为void(空)型的指针,从而不能取得数据。
图11图示了在本实施方式的软件评价系统中,用来取得图10所示函数的参数的运行日志的IDL中的记述。
回叫函数以通常的方法定义。另外,在要被调用的函数中定义一个索引结构体INDEX_STRUCT。然后,在用于取得运行日志的函数中,对于GetFuncPointer函数的第二参数void*lpBuf设定[custum(PAT_PARAM_ID,″funckind_is(dwKind,INDEX_STRUCT)″)]。这使得lpBuf根据所述第一参数dwKind的值被当作所述索引结构体的不同成员的数据类型类处理,即,在第一参数dwKind的值为0的场合,作为FuncInternal1*数据类型,在该值为1的场合作为FuncInternal2*数据类型,在该值为2的场合作为FuncInternal3*数据类型,在该值为3的场合作为FuncInternal4*数据类型进行处理,并作为运行日志保存。
图12为在本实施方式的软件评价系统中,当函数如图11所示定义时用于取得运行日志的处理的流程图。
处理一开始(步骤S5201),开始取得运行日志,将模块名、接口名、函数/方法名保存于HDD中(步骤S5202)。然后将调用时间、参数及所述指针参数指示的内容保存于HDD中(步骤S5203)。判断在函数定义中是否存在funckind_is的设定(步骤S5204),如存在的话,从函数定义文件中取得由funckind_is定义的函数定义,根据该定义生成用于取得运行日志的代码(步骤S5205)。然后保存funckind_is定义的值,并置换成生成的运行日志取得代码的地址(步骤S5206)。
接着,调用原来的函数(步骤S5207)。如从函数返回的话,运行日志取得代码将返回时的时间、返回值及指针参数指示的内存的内容保存于HDD中(步骤S5208)。然后判断在函数定义中是否设定了函数类型说明(funckind_is)(步骤S5209),如设定了,则从函数定义文件中取得由funckind_is定义的函数定义,根据该定义生成用于取得运行日志的代码(步骤S5210)。然后,保存funckind_is定义的值,用生成的运行日志取得代码的地址置换(步骤S5211)。如果有来自用户的终止命令(步骤S5212),该处理就终止。
如由funckind_is设定的参数用生成的运行日志取得代码的地址置换,使用该地址调用的原来的函数被以与通常的运行日志相似的方式进行处理。即,生成的运行日志取得代码调用所述不输出的函数,执行处理,在传送所接收的执行结果的同时,将调用不输出的函数之际的规定信息和接收执行结果之际的规定信息作为运行日志予以记录。
图13为在本实施方式中利用图11所示的定义取得的运行日志数据的示图。因为在函数定义文件中提供了用于取得回叫函数和不输出的内部函数的设置,所以可以取得非输出函数比如FuncInternal1函数、FuncInternal4函数等的运行日志。
这样,本实施方式的优点是可以取得以通常的方法不能取得的非输出函数的运行日志。
[实施方式3]
图14为在本实施方式的软件评价系统中使用的函数的例子,用通常的函数定义不能取得其参数。
定义了三个结构体STRUCTKIND1、STRUCTKIND2、STRUCTKIND3。FuncGetData函数的第一参数dwKind指出上述3种结构体中要发送给第二参数lpBuf的那个结构体的指针。当第一参数为1时,FuncGetData函数将lpBuf作为STRUCTKIND1的指针进行处理,当第一参数为2时,FuncGetData函数将lpBuf作为STRUCTKIND2的指针进行处理,而当第一参数为3时,FuncGetData函数将lpBuf作为STRUCTKIND3的指针进行处理。如利用通常的函数定义去定义FuncGetData,lpBuf变成为void(空)型的指针,从而不能取得数据。
图15为每一个结构体STRUCTKIND1、STRUCTKIND2、STRUCTKIND3如何利用内存的示图。
结构体STRUCTKIND1(330)的各成员,在偏移量0×0000处有char chParam(331)、在0×0001处有DWORD dwParam(332)、在0×0005处有short shParam(333)。结构体STRUCTKIND2(334)的各成员在偏移量0×0000处有shortshParam(335)、在0×0002处有DWORD dwParam(336)、在0×0006处有char chParam(337)。结构体STRUCTKIND3(338)的各成员在偏移量0×0000处有char chParam(339)、在0×0001处有short shParam(340)、在0×0003处有DWORD dwParam(341)、在0×0007处有long lParam(342)、在0×000B处有int nParam。
由于在各结构体中没有大小的信息,结构体的内存结构相互不同,所以不能使用传统的方法。
图16为在本实施方式的软件评价系统中,用来取得图14所示函数的参数的运行日志的IDL中的记述的示图。
各结构体以通常的方法定义。另外,在要调用的函数中定义一个索引结构体INDEX_STRUCT。然后,在用于取得运行日志的函数中,对FuncgetData函数的第二参数void*lpBuf设定[custom(PAT_PARAM_ID,″structkind_is(dwKind,INDEX_STRUCT)″)]。这使得lpBuf根据第一参数dwKind的值被当作所述索引结构体的不同成员的数据类型来处理。即,由此,在第一参数dwKind的值为1的场合,lpBuf的数据类型为STRUCTKIND1*,在第一参数dwKind的值为2的场合lpBuf的数据类型为STRUCTKIND2*,在第一参数dwKind的值为3的场合lpBuf的数据类型为STRUCTKIND3*,并作为运行日志保存。
图17为在本实施方式的软件评价系统中,当函数如图16所示定义时用于取得的运行日志的处理的流程图。
处理一开始(步骤S5701),开始取得运行日志,将模块名、接口名、函数/方法名保存于内存中(步骤S5702)。其次,判断在函数定义中是否设定了结构体类型说明(structkind_is)(步骤S5703),如有设定,则将设定的结构体参数数据作为类型说明(structkind_is)中所定义的数据类型进行分析(步骤S5704)。然后将调用时间、参数及指针参数指示的内存的内容保存于内存中(步骤S5705)。接着,调用原来的函数(步骤S5706)。在从函数返回后,判断在函数定义中是否设定了结构体类型说明(structkind_is)(步骤S5707),如有设定,则将设定的结构体参数数据作为类型说明(structkind_is)所定义的数据类型进行分析(步骤S5708)。然后将返回时间、返回值及指针参数指示的内存的内容存储于内存中(步骤S5709)。如果有来自用户的终止命令(步骤S5710),该处理就终止。
图18为在本实施方式中,利用图16的定义取得的运行日志数据的示图。通常为空指针(void*),用通常的函数定义只能够取得其指针的结构体的数据,可根据使用的结构体的类型而作为运行日志被取得。
这样,本实施方式的优点是可以获得用通常的方法不能取得的参数的运行日志。
[实施方式4]
在本实施方式中,对根据进行用于运行日志取得的各种设定的用户接口和以该用户接口设定的信息进行的处理予以说明。图19为用来设定开始实施方式4的运行日志取得的函数/方法的用户接口的示图。
在用户接口中,具有从变成为运行日志取得对象的模块/接口(350)选择设定哪一个模块/接口的下拉表(352、353)和从利用该处选择的模块/接口输出的函数/方法(351)选择设定哪一个函数/方法作为运行日志取得开始触发器的下拉表(354、355)。
图20为在实施方式4的软件评价系统中,按照图19中设定的内容取得运行日志的处理的流程图。
处理一开始(步骤S3401),判断是否将运行日志取得代码所调用的函数/方法设定为运行日志取得开始触发器(步骤S3402)。在与运行日志取得开始触发器一致的场合,运行日志取得开始,将模块名、接口名、函数/方法名保存于HDD中(步骤S3403)。其次,运行日志取得代码,将调用时的时间、参数及指针参数指示的内存的内容保存于HDD中(步骤S3404),调用原来的函数/方法(步骤S3405)。如从函数/方法返回,运行日志取得代码将返回时的时间、返回值及指针参数指示的内存的内容存储于HDD中(步骤S3406)。此处理一直进行到有来自用户的终止命令(步骤S3407)为止,此时,不进行运行日志取得开始触发器的判断。
从以上的说明可知,根据本实施方式,由于可以任意选择进行运行日志取得的函数/方法,可以获得运行日志分析变得很容易的效果。
[实施方式5]
在上述实施方式4中,是假设用户可以任意选择取得运行日志的函数/方法,在本实施方式中,假设用户可以任意选择停止取得运行日志的函数/方法。
图21为本实施方式的用来设定停止运行日志取得的函数/方法的用户接口的示图。
在用户接口中,具有从变成为运行日志取得对象的模块/接口(356)选择设定哪一个模块/接口的下拉表(358、359)和从利用该处选择的模块/接口输出的函数/方法(357)选择设定哪一个函数/方法作为运行日志停止取得开始的触发器的下拉表(360、361)。
图22为在本实施方式的软件评价系统中,按照图21中设定的内容取得运行日志的处理的流程图。
处理一开始(步骤S3601),运行日志取得开始,将模块名、接口名、函数/方法名保存于HDD中(步骤S3602)。其次,运行日志取得代码,将调用时的时间、参数及指针参数指示的内存的内容保存于HDD中(步骤S3603),调用原来的函数/方法(步骤S3604)。如从函数/方法返回,运行日志取得代码,将返回时的时间、返回值及指针参数指示的内存的内容存储于HDD中(步骤S3605)。之后判断是否将调用的函数/方法设定为运行日志取得停止触发器(步骤S3606)。在与运行日志取得停止触发器一致的场合,运行日志取得处理结束(步骤S3607)。并且,即使是与运行日志取得停止触发器不一致的场合,在有来自用户的终止命令时(步骤S3606),该处理将终止。
据此,由于可以停止任意设定的函数/方法的运行日志的取得,可以只取得用户要求的运行日志,所以获得运行日志分析变得很容易的效果。
[实施方式6]
在上述实施方式4及5中叙述的用户接口中,用户可以利用用户选择的任意函数/方法开始/停止运行日志的取得,但也可以设定为用户选择的任意函数/方法只在错误终止的场合开始/停止运行日志的取得。
图23为对用来设定本实施方式的开始/停止运行日志的取得的函数/方法的用户接口增加设定只在错误终止的场合使用触发功能(运行日志取得开始/停止功能)的用户接口的示图。本用户接口,可适用于图19及图21两者。
在用户接口中,具有从变成为运行日志取得对象的模块/接口(362)选择设定哪一个模块/接口的下拉表(364、365)和从利用该处选择的模块/接口输出的函数/方法(363)选择设定哪一个函数/方法作为触发器的下拉表(366、367)以及函数/方法只在错误终止的场合使触发功能有效的复选框(368)。
图24为本实施方式的函数/方法的错误定义的内容的示图。在本实施方式中,错误定义是一个文件,在文件中对各函数/方法的参数及返回值和错误条件进行定义和记述。
图25为本实施方式软件评价系统的取得运行日志的处理的流程图,是按照在图23中设定的内容,同时使用运行日志取得开始和只在错误时使用的触发器的功能进行设定的场合。
处理一开始(步骤S3901),判断是否将运行日志取得代码所调用的函数/方法设定为运行日志取得开始触发器(步骤S3902)。在设定为运行日志取得开始触发器的场合,将模块名、接口名、函数/方法名临时保存于内存中(步骤S3903)。
其次,运行日志取得代码,将调用时的时间、参数及指针参数指示的内存的内容临时保存于内存中(步骤S3904),调用原来的函数/方法(步骤S3905)。如从函数/方法返回,运行日志取得代码,将返回时的时间、返回值及指针参数指示的内存的内容临时存储于内存中(步骤S3906)。
其次,判断运行日志取得开始触发器是否只在错误时使用(步骤S3907),如是,就判断函数/方法是否错误(步骤S3908)。假如不是错误的场合,就将临时保存于内存中的运行日志弃掉(步骤S3909)并返回到处理开始。在函数/方法是错误的场合,就将临时保存于内存中的运行日志保存到HDD中(步骤S3910),继续进行通常的运行日志取得处理(步骤S3911)。此处理一直进行到有来自用户的终止命令(步骤S3912)为止。
图26为图25的步骤3911所示的通常的运行日志取得处理的详细流程图。
处理一开始(步骤S4001),运行日志取得开始,将模块名、接口名、函数/方法名保存于HDD中(步骤S4002)。其次,运行日志取得代码,将调用时的时间、参数及指针参数指示的内存的内容保存于HDD中(步骤S4003),调用原来的函数/方法(步骤S4004)。如从函数/方法返回,运行日志取得代码,将返回时的时间、返回值及指针参数指示的内存的内容存储于HDD中(步骤S4005)。
图27为取得本实施方式的软件评价系统的运行日志的处理的流程图,是按照在图23中设定的内容,同时使用运行日志取得停止和只在错误时使用触发器的功能进行设定的场合。
处理一开始(步骤S4101),运行日志取得开始,将模块名、接口名、函数/方法名保存于HDD中(步骤S4102)。其次,运行日志取得代码,将调用时的时间、参数及指针参数指示的内存的内容保存于HDD中(步骤S4103),调用原来的函数/方法(步骤S4104)。如从函数/方法返回,运行日志取得代码,将返回时的时间、返回值及指针参数指示的内存的内容存储于HDD中(步骤S4105)。之后,判断是否将调用的函数/方法设定为运行日志取得停止触发器(步骤S4106)。在与运行日志取得停止触发器一致的场合,其次判断运行日志取得停止触发器是否只在错误时使用(步骤S4107),如是,就判断函数/方法是否错误(步骤S4108)。假如是错误的场合,运行日志取得处理结束(步骤S4109)。另外,在有来自用户的终止命令时(步骤S4110),该处理将终止。
由此,就可以从在任意函数/方法发生错误的场合开始或停止取得运行日志,可以取得用户要求的运行日志,也可以获得很容易对运行日志进行分析的效果。
[实施方式7]
上述实施方式4至6的用户接口,不过是将可选的函数/方法以规定的顺序排列而已,也可以将接口、方法的关系表示为容易掌握的树形显示。
图28为对本发明的实施方式7的接口和方法进行树形显示的用户接口的示图。
在用户接口中备有用来将接口及方法显示为树形的视图(380)。如用户选中接口InterfaceA(381),就可以将该接口内的全部方法Method AA、Method AB、Method AC(382~384)全部选中,成为运行日志的取得对象。另外,通过取消接口Interface B(385)的选中,就可以全部解除该接口内的全部方法Method BA、Method BB、Method BC(385~388)的选择,不再是运行日志取得对象。
图29为本实施方式的软件评价系统在如图28选择取得对象的场合取得运行日志之际的处理的流程图。
处理一开始(步骤S4301),每当运行日志取得代码调用接口的某一方法时,都判断该方法的接口是否成为运行日志取得对象(步骤S4302)。在成为运行日志取得对象的场合,将模块名和接口、方法名保存于HDD中(步骤S4303)。
其次,运行日志取得代码将调用时的时间、参数及指针参数指示的内存的内容保存于HDD中(步骤S4304),调用原来的函数/方法(步骤S4305)。如从方法返回,运行日志取得代码将返回时的时间、返回值及指针参数指示的内存的内容存储于HDD中(步骤S4306)。此处理一直进行到有来自用户的终止命令时(步骤S4307)而终止。
据此,可以更简便地了解接口、方法的关系,并且,可以更容易选择想要取得的运行日志,使用户的取得所要求的运行日志的方法更为简单。
[实施方式8]
在上述实施方式4至7中,是假设在选择任意的方法时,以接口单位进行选择,此外,也可以以方法单位进行选择。
图30为将本实施方式的接口和方法进行树形显示的用户接口的示图,虽与图28一样,但选择方法不同。
在用户接口中备有用来将接口及方法显示为树形的视图(389)。如用户通过选中方法Method AA(391)、Method AC(393)、Method BA(3395),不选Method AB(392)、MethodBB(396)、Method BC(397), 就可以不是以Interface A(390)、Interface B(394)内的全部方法,而只是以各进口内选中的方法作为运行日志取得对象。
图31为本实施方式的软件评价系统在如图30选择取得对象的场合取得运行日志之际的处理的流程图。
处理一开始(步骤S4501),每当运行日志取得代码调用接口的某一方法时,都判断该接口的方法是否成为运行日志取得对象(步骤S4502)。在成为运行日志取得对象的场合,将模块名和接口、方法名保存于HDD中(步骤S4503)。以下与实施方式10相同。
据此,就可以不是在每个接口的很大的范围内进行选择,可以以方法单位更容易地分别选择想要取得的方法获得使用户的取得所要求的运行日志的方法更为简单的效果。
[实施方式9]
在上述实施方式中,取得的运行日志是保存于HDD中的任意地点,但也可以连日期一起保存以便可以更容易对运行日志进行分析。
图32为将运行日志连日期一起进行分割保存的场合的处理的流程图。
处理一开始(步骤S4601),运行日志取得开始,将模块名、接口名、函数/方法名保存于内存中(步骤S4602)。
其次,运行日志取得代码将调用时的日期·时间、参数及指针参数指示的内存的内容保存于内存中(步骤S4603),调用原来的函数/方法(步骤S4604)。如从函数/方法返回,运行日志取得代码,将返回时的日期·时间、返回值及指针参数指示的内存内容存储于内存中(步骤S4605)。之后,判断调用的函数/方法的返回时的日期是否与上次保存的运行日志的返回时的日期不同(步骤S4606)。在日期不同的场合,就生成新文件,将运行日志保存于该文件中(步骤S4607),在相同时,就在原有的运行日志文件中保存运行日志(步骤S4608)。另外,在有来自用户的终止命令时(步骤S4609),该处理将终止。
由此,用户就可以取得所要求的带有日期的运行日志,也可以获得很容易对运行日志进行分析的效果。
[实施方式10]
在上述实施方式9中,叙述的是连日期一起保存的场合,但也可以将运行日志按照各个大小或个数进行分割保存。
图33为按照各个大小或个数进行分割保存的场合的处理的流程图。
处理一开始(步骤S4701),运行日志取得开始,将模块名、接口名、函数/方法名保存于内存中(步骤S4702)。其次,运行日志取得代码将调用时的时间、参数及指针参数指示的内存的内容保存于内存中(步骤S4703),调用原来的函数/方法(步骤S4704)。如从函数/方法返回,运行日志取得代码将返回时的时间、返回值及指针参数指示的内存的内容存储于内存中(步骤S4705)。之后,在将新运行日志数据保存于原有的文件中的场合,就判断文件的大小是否超过一定值或运行日志是否超过一定个数(步骤S4706)。
在超过一定大小的场合或超过一定个数的场合,就生成新运行日志文件,将运行日志保存于该文件(步骤S4707),在不超过的场合,就保存于原有的运行日志文件中(步骤S4708)。在生成新运行日志文件的场合,判断是否使用环形缓冲器且生成的运行日志文件数是否大于2个(步骤S4709)。如果在条件合适的场合,将最旧的运行日志文件删除(步骤S4710)。在有来自用户的终止命令时(步骤S4712),该处理终止。
由此,用户可以将生成的多个运行日志每个的大小和个数都限制在一定的大小和个数之内而取得,处理就变得容易。另外,在使用环形缓冲器时,本软件评价系统可以对给予PC的资源的负担予以一定的抑制,可以使运行日志的取得稳定。
[实施方式11]
图34为将取得的运行日志存储于一定数量的内存中的场合的内存的概图。
用来保存一定数目的运行日志的运行日志存放内存区有n个(398),在各运行日志存放内存区中存放一次数量的函数/方法的运行日志,该信息存放模块名、接口名、函数/方法名、调用时的时间、参数、调用时的参数数据、终止时的时间、终止时的参数数据、返回值数据等(399),大小为可变的。在此内存区,从运行日志存放内存区1开始顺序存放运行日志数据,一直到运行日志存放内存区n为止,如用完的话,则再次从运行日志存放内存区1开始重写存放运行日志。
图35为将取得的运行日志保存于一定数量的内存中时的运行日志取得的流程图。
处理一开始(步骤S4901),将表示运行日志存放内存区的地点的变数x初始化为1(步骤S4902)。于是,开始取得运行日志,将模块名、接口名、函数/方法名保存于运行日志存放内存区x(步骤S4903)。
其次,运行日志取得代码将调用时的时间、参数及指针参数指示的内存的内容保存于运行日志存放内存区x中(步骤S4904),调用原来的函数/方法(步骤S4905)。如从函数/方法返回,运行日志取得代码将返回时的时间、返回值及指针参数指示的内存的内容存储于运行日志存放内存区x中(步骤S4906)。之后,将表示运行日志存放内存区的地点的变数x加1(步骤S4907),判断x是否比运行日志存放内存区数n大(步骤S4908)。
在x比n大时,将1代入x,从运行日志存放内存区的前头开始再次使用(步骤S4909)。之后,判断是否使用环形缓冲器(步骤S4910),在不使用的场合,将内存上存在的全部运行日志数据保存于运行日志文件中(步骤S4911),将内存上的运行日志数据全部删除(步骤S4912)。此处理一直进行到有来自用户的终止命令时(步骤S4913)而终止(步骤S4914)。
由此,可以使内存的使用量限制于某一程度的值,本软件评价系统可以对给予PC的资源的负担予以一定的抑制,可以使运行日志的取得稳定。
[其他实施方式]
另外,本发明,既适用于由多个设备(比如,主计算机、接口装置、读入器、打印机等)构成的系统,也适用于由一台设备组成的装置(比如,复印机、传真装置等)。
另外,本发明目的也可以通过将记录了实现上述实施方式的功能的软件的程序代码的存储介质供给系统或装置,该系统或装置的计算机(或CPU及MPU)读出并执行存放于存储介质上的程序代码而达到。
在此场合,由于从存储介质读出的程序代码本身实现上述实施方式的功能,所以存储该程序代码的存储介质构成本发明。
作为提供程序代码的存储介质,比如,可以使用软盘(注册商标)、硬盘、光盘、磁光盘、CD-ROM、CD-R、磁带、非易失性存储卡以及ROM等。
另外,通过执行计算机读出的程序代码,不仅可以实现上述实施方式的功能,而且根据该程序代码的指示,在计算机上运行的OS(操作系统)等进行实际处理的一部分或全部,通过该处理实现上述实施方式的功能的场合也包括在内是自不待言的。
此外,从存储介质读出的程序代码,在写入到插入计算机的功能扩展板或与计算机相连接的功能扩展装置中设置的内存后,根据该程序代码的指示,设置于该功能扩展板或功能扩展装置上的CPU等进行实际处理的一部分或全部,通过该处理实现上述实施方式的功能的场合也包括在内是自不待言的。
如上所述,根据本发明,可容易取得分成为多个模块的软件的处理运行日志,并且可以削减用来分析软件故障的原因的工时。
本发明不限于上述具体实施例,并且在不脱离本发明的精神和范围的情况下可以实现本发明的多种改变和变型。因此,为使广大群众了解本发明的范围,下面提出本发明的权利要求。
Claims (19)
1.一种运行日志取得方法,用于取得包括至少一个执行预定处理的函数的程序的运行日志,该方法包括以下步骤:
将被加载的用于执行上述预定处理的所述至少一个函数的地址改为用来取得运行日志的函数的地址,
其中,所述用来取得运行日志的函数包含以下步骤:
调用进行上述预定处理的所述至少一个函数,以执行该预定处理,接收执行结果并将所述接收到的执行结果转送给上述程序;
判断在上述程序的函数定义中是否定义了以预定的方式规定了其类型的指针参数;并且
如果定义了以预定方式规定了其类型的指针参数,则将该指针参数所指的内存的内容、函数的调用及返回时间、参数内容作为所述规定数据类型的数据进行记录。
2.如权利要求1所述的运行日志取得方法,其特征在于,用索引结构体定义所述指针参数的类型,并且所述判断步骤包括:通过访问所述索引结构体的指定成员来判断所述指针参数的类型。
3.如权利要求2所述的运行日志取得方法,其特征在于,所述索引结构体的至少部分成员的类型是各种非输出函数。
4.如权利要求2所述的运行日志取得方法,其特征在于,所述索引结构体的至少部分成员的类型为各种结构体。
5.如权利要求1-4中之一所述的运行日志取得方法,其特征为,上述用来取得运行日志的函数进一步具有根据上述定义计算内存大小的步骤,并且上述记录步骤记录一定量的由上述指针参数所指示的内存内容,该量等于所述算出的内存大小。
6.如权利要求1-4之一所述的运行日志取得方法,在所述调用步骤之前包括下述步骤:选择所述至少一个用来取得运行日志的函数。
7.如权利要求1-4之一所述的运行日志取得方法,其特征在于,在所述调用步骤之前包括下述步骤:
选择至少一个用于停止运行日志记录的函数;以及
对于所述至少一个用于停止运行日志记录的函数,在记录后停止运行日志记录。
8.如权利要求6所述的运行日志取得方法,其特征为:用来取得运行日志的上述函数还包含判断在上述选择步骤中选择的所述至少一个函数在执行时有无错误的步骤,如果上述判断有无错误的步骤判断出发生了错误,则启动所述记录步骤。
9.如权利要求7所述的运行日志取得方法,其特征为:用来取得运行日志的上述函数还包含判断在上述选择步骤中选择的所述至少一个函数的执行期间有无错误发生的步骤,并且如果在上述判断有无错误的步骤中判断出发生了错误,则所述停止运行日志记录的步骤停止运行日志的记录。
10.如权利要求6所述的运行日志取得方法,其特征为:还包括以树形结构显示COM服务器输出的接口和属于该接口的函数的步骤,其中上述选择步骤利用上述显示进行选择。
11.如权利要求7所述的运行日志取得方法,其特征在于:还包括以树形结构显示COM服务器输出的接口和属于该接口的函数的步骤,其中上述选择步骤利用上述显示进行选择。
12.如权利要求10所述的运行日志取得方法,其特征在于:上述选择步骤在逐个函数的基础上进行选择。
13.如权利要求11所述的运行日志取得方法,其特征在于:上述选择步骤在逐个函数的基础上进行选择。
14.如权利要求10所述的运行日志取得方法,其特征为:上述选择步骤通过选择上述接口来选择属于该接口的全部函数。
15.如权利要求11所述的运行日志取得方法,其特征为:上述选择步骤通过选择上述接口来选择属于该接口的全部函数。
16.如权利要求6所述的运行日志取得方法,其特征为:上述记录步骤按日期记录运行日志。
17.如权利要求6所述的运行日志取得方法,其特征为:上述运行日志记录步骤在运行日志的大小超过预定大小时生成新的文件。
18.如权利要求6所述的运行日志取得方法,其特征为:上述运行日志记录步骤在运行日志的个数超过预定数目时生成新的文件。
19.如权利要求6所述的运行日志取得方法,其特征为:上述将运行日志记录于内存中的步骤在该内存中的运行日志的个数超过预定数目时将运行日志移动和存储到盘装置中。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2003101245667A CN100347669C (zh) | 2003-12-30 | 2003-12-30 | 运行日志取得方法 |
JP2004377887A JP4155583B2 (ja) | 2003-12-30 | 2004-12-27 | ログ取得方法およびプログラム、記憶媒体 |
US11/022,951 US7426660B2 (en) | 2003-12-30 | 2004-12-28 | Method, program, and storage medium for acquiring logs |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2003101245667A CN100347669C (zh) | 2003-12-30 | 2003-12-30 | 运行日志取得方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1635470A CN1635470A (zh) | 2005-07-06 |
CN100347669C true CN100347669C (zh) | 2007-11-07 |
Family
ID=34800339
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2003101245667A Expired - Fee Related CN100347669C (zh) | 2003-12-30 | 2003-12-30 | 运行日志取得方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US7426660B2 (zh) |
JP (1) | JP4155583B2 (zh) |
CN (1) | CN100347669C (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4125169B2 (ja) * | 2003-04-02 | 2008-07-30 | キヤノン株式会社 | ログ取得方法 |
US8045474B2 (en) * | 2005-01-26 | 2011-10-25 | Cisco Technology, Inc. | Method and apparatus for tracking layer-2 (L2) resource of a switch |
JP4681923B2 (ja) * | 2005-04-01 | 2011-05-11 | キヤノン株式会社 | 情報処理装置及びその制御方法、コンピュータプログラム、記憶媒体 |
US20070083792A1 (en) * | 2005-10-11 | 2007-04-12 | Mcdermott Andrew | System and method for error detection and reporting |
JP5078518B2 (ja) * | 2007-09-13 | 2012-11-21 | 株式会社リコー | 情報処理装置、情報処理プログラム、情報処理プログラムを記録する記録媒体 |
CN103092742B (zh) | 2011-10-31 | 2015-08-19 | 国际商业机器公司 | 程序日志记录优化方法和系统 |
US9436588B2 (en) | 2012-09-28 | 2016-09-06 | Identify Software Ltd. (IL) | Efficient method data recording |
US9501346B2 (en) * | 2014-01-21 | 2016-11-22 | Oracle International Corporation | Fine and coarse granularity logging handler |
CN107517128B (zh) * | 2017-08-24 | 2020-06-19 | 北京小米移动软件有限公司 | 数据传输方法、装置和设备 |
CN111767249B (zh) * | 2019-04-02 | 2022-11-04 | 上海寒武纪信息科技有限公司 | 确定函数自身运行时间的方法及装置 |
CN110727641B (zh) * | 2019-10-21 | 2023-10-27 | 中国民航信息网络股份有限公司 | 一种日志的查找方法及装置 |
CN114827636A (zh) * | 2021-01-18 | 2022-07-29 | 武汉斗鱼网络科技有限公司 | 一种视频播放异常的诊断方法及相关装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5732272A (en) * | 1995-07-31 | 1998-03-24 | Apple Computer, Inc. | Subroutine execution time tracer |
JPH10269105A (ja) * | 1997-01-27 | 1998-10-09 | N T T Data Tsushin Kk | トレースシステム、リソース解放漏れ検出システム及び記録媒体 |
JPH11306004A (ja) * | 1998-04-22 | 1999-11-05 | Nec Corp | プログラムライブラリ管理システム |
EP1027652A1 (en) * | 1997-11-07 | 2000-08-16 | Intergraph Corporation | Apparatus and method for logging information relating to function calls to a function library |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7216056B2 (en) * | 2001-12-06 | 2007-05-08 | C-Live, Inc. | Access log analyzer and access log analyzing method |
US7086034B2 (en) * | 2002-06-28 | 2006-08-01 | Canon Kabushiki Kaisha | Method, program, and storage medium for acquiring logs |
US7188279B2 (en) * | 2002-06-28 | 2007-03-06 | Canon Kabushiki Kaisha | Method, program, and storage medium for acquiring logs |
-
2003
- 2003-12-30 CN CNB2003101245667A patent/CN100347669C/zh not_active Expired - Fee Related
-
2004
- 2004-12-27 JP JP2004377887A patent/JP4155583B2/ja not_active Expired - Fee Related
- 2004-12-28 US US11/022,951 patent/US7426660B2/en not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5732272A (en) * | 1995-07-31 | 1998-03-24 | Apple Computer, Inc. | Subroutine execution time tracer |
JPH10269105A (ja) * | 1997-01-27 | 1998-10-09 | N T T Data Tsushin Kk | トレースシステム、リソース解放漏れ検出システム及び記録媒体 |
EP1027652A1 (en) * | 1997-11-07 | 2000-08-16 | Intergraph Corporation | Apparatus and method for logging information relating to function calls to a function library |
JPH11306004A (ja) * | 1998-04-22 | 1999-11-05 | Nec Corp | プログラムライブラリ管理システム |
Also Published As
Publication number | Publication date |
---|---|
JP2005196779A (ja) | 2005-07-21 |
US7426660B2 (en) | 2008-09-16 |
US20050171731A1 (en) | 2005-08-04 |
CN1635470A (zh) | 2005-07-06 |
JP4155583B2 (ja) | 2008-09-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100347669C (zh) | 运行日志取得方法 | |
CN1469237A (zh) | 运行日志取得方法及程序、存储介质 | |
US7661094B2 (en) | Real-time software diagnostic tracing | |
US8978020B2 (en) | Generating reusable test components out of remote application programming interface | |
US7743363B2 (en) | Extensible meta-data | |
US7340726B1 (en) | Systems and methods for performing static analysis on source code | |
US8578339B2 (en) | Automatically adding bytecode to a software application to determine database access information | |
CN101354675B (zh) | 一种嵌入式软件动态内存检测的方法 | |
CN1534470A (zh) | 日志获取方法及其控制程序、存储媒体 | |
CN1767453A (zh) | 自动测试方法和系统 | |
CN101038545A (zh) | 操作系统内核构件跨域运行的方法 | |
CN1949187A (zh) | 一种程序调测系统及方法 | |
CN1725177A (zh) | 嵌入式设备集成开发系统及其使用方法 | |
CN1916842A (zh) | 构件化软件系统中实现反射机制的构件封装方法 | |
CN1276355C (zh) | 运行日志取得方法 | |
CN1877521A (zh) | 跨操作系统的嵌入式系统板级支持包的实现方法 | |
CN100472469C (zh) | 运行日志获取方法 | |
CN1295778C (zh) | 一种验证芯片硬件行为与软件模拟行为的一致性的方法 | |
US20050283763A1 (en) | Exception test support technique | |
US7730458B2 (en) | Built-in diagnostics | |
CN100433171C (zh) | 存储设备的测试方法及测试装置 | |
CN1746694A (zh) | 自动测试装置及方法 | |
US20180349267A1 (en) | Asynchronous operation query | |
CN1444144A (zh) | 调试功能内置型微型计算机 | |
CN1945542A (zh) | 一种嵌入式软件开发的方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20071107 Termination date: 20151230 |
|
EXPY | Termination of patent right or utility model |