CN1276355C - 运行日志取得方法 - Google Patents
运行日志取得方法 Download PDFInfo
- Publication number
- CN1276355C CN1276355C CN03149336.XA CN03149336A CN1276355C CN 1276355 C CN1276355 C CN 1276355C CN 03149336 A CN03149336 A CN 03149336A CN 1276355 C CN1276355 C CN 1276355C
- Authority
- CN
- China
- Prior art keywords
- mentioned
- function
- running log
- address
- storer
- 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/3636—Software debugging by tracing the execution of the program
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种可以容易取得软件处理运行日志并且可削减用于分析隐错的工时数的运行日志取得方法及程序、存储介质。该运行日志取得方法,在备有函数(FuncAA)的程序(91)中,为取得执行中的运行日志,具有将加载的进行上述规定的处理的函数(FuncAA)的地址改写为用来取得运行日志的函数(92)的地址的过程。用来取得运行日志的函数(92),包含调用(96)函数(FuncAA)的地址,执行该规定处理(97),将收到的执行结果(98)转送给程序(91)的过程(101);记录调用上述选择的函数(FuncAA)的地址之际的规定信息的过程(95、100)以及记录在接受上述执行结果之际的规定信息的过程(99、100)。
Description
技术领域
本发明涉及用来取得分成为多个模块的软件的处理运行日志的技术。
背景技术
历来,对于重现率低的软件故障,是通过取得软件的处理运行日志,分析该处理LOG,查清故障的原因而采取对策。
然而,在取得上述现有的处理运行日志方面存在在以下的问题。
(1)为了在用户的操作环境也能继续不断地取得运行日志,必须对软件的模块本身进行加工增加处理运行日志取得例程不可,这将加大为取得处理运行日志的作业负担。
(2)由于处理运行日志的取得是针对每个模块进行,生成的运行日志是以模块为单位的,很难取得整个软件的处理的完全按照时间顺序的运行日志。因此,作为对整个处理运行日志的洞察不佳,分析运行日志一直到发现故障原因的过程极其耗费工时。
发明内容
本发明系有鉴于上述问题而完成的发明,其目的在于提供一种容易取得分成为多个模块的软件的处理运行日志,并且可以削减用来分析软件故障原因的工时的运行日志的取得方法,以及用于藉助计算机实现该方法的程序及存放该程序的存储介质。
本发明提供一种运行日志取得方法,用于取得包含进行规定的处理的函数/方法的程序的执行中的运行日志,其特征在于:包括如下步骤,
将加载的进行上述规定的处理的上述函数/方法的地址改写为用来取得运行日志的函数的地址,
其中用来取得运行日志的上述函数/方法包括如下步骤,
调用进行上述规定的处理的上述函数/方法,以使上述规定的处理被执行,接收执行结果,并且将上述结果转送给上述程序;
对在调用进行上述规定的处理的上述函数/方法之际的规定信息进行记录;以及
对在接收上述执行结果之际的规定信息进行记录。
为达到上述目的,本发明的运行日志取得方法具有如下的构成。即:
是一种取得具备进行规定处理的函数的程序的执行中的运行日志的运行日志取得方法,
具有将加载的进行上述规定的处理的函数的地址改写为用来取得运行日志的函数的地址的过程,
用来取得上述运行日志的函数,包含
调用进行上述规定处理的函数,执行该规定处理,将收到的执行结果转送给上述程序的过程;
对在调用进行上述规定处理的函数之际的规定信息进行记录的过程;以及
对在接受上述执行结果之际的规定信息进行记录的过程。
为达到上述目的,本发明的另一运行日志取得方法具有如下的构成。即:
是一种取得具备进行规定处理的函数的程序的执行中的运行日志的运行日志取得方法,
具有将加载的进行上述规定的处理的函数的地址改写为用来取得运行日志的函数的地址的过程;
用来取得上述运行日志的函数,包含
调用进行上述规定处理的函数,执行该规定处理,将接收到的执行结果转送给上述程序的过程;
判断在上述程序的函数定义中,参数或返回值是否作为结构定义的过程;
在作为结构定义的场合,根据该结构的组装选项(packingoption),将该结构的内容配置于存储器中的过程;以及
将配置于上述存储器上的结构的内容作为运行日志记录于盘装置的过程。
本发明的其他特点和优点可从参考下面的附图的描述而了解,对附图各图中同样或类似的部件赋予同样的标号。
附图说明
包括在本说明书中并构成其一个组成部分的附图示出本发明的各个具体实施方式,并且与描述一起用来说明本发明的原理。
图1为示出实现实施形态1的运行日志取得方法的计算机(软件评价系统)的构成的示图。
图2为示出函数加载时的通常的存储器构成的示图。
图3为示出使用实施形态1的IAT Patch时的存储器构成的示图。
图4A为示出使用实施形态1的IAT Patch时的状态的示图。
图4B为示出实施形态1的运行日志取得处理的流程图。
图5为示出使用实施形态1的软件评价系统的IAT Patch时的内部构成的示图。
图6为示出COM服务器的接口的实例生成时的通常的存储器构成的示图。
图7为示出使用实施形态1的VTable Patch时的存储器构成的示图。
图8A为示出使用实施形态1的VTable Patch时的状态的示图。
图8B为示出本发明的实施形态1的运行日志取得处理的流程图。
图9为示出实施形态1的软件评价系统的内部构成的示图。
图10为示出实施形态1的函数定义文件的例子的示图。
图11为示出藉助实现本发明的实施形态1的运行日志取得方法软件评价系统取得的运行日志的一例的示图。
图12为示出在实施形态2中在生成接口的实例时如何向存储器加载的例子的示图。
图13为示出在实施形态2中运行日志取得代码采用何种存储器配置放置的示图。
图14为示出实施形态2的处理的流程的示图。
图15为示出实施形态2的函数定义的例子的示图。
图16为示出在实施形态2中取得的运行日志的一例的示图。
图17为示出实施形态3的存储器加载时的处理流程图。
图18为示出实施形态4的函数定义文件的例子的示图。
图19为示出在实施形态4中取得的运行日志的一例的示图。
图20为示出实施形态4的处理流程的示图。
图21为示出实施形态5的处理流程的示图。
图22为示出实施形态6的函数定义文件的例子的示图。
图23为示出在实施形态6中取得的运行日志的一例的示图。
图24为示出关于结构的组装选项的具体示例的示图。
图25为示出关于结构的组装选项的另一具体示例的示图。
图26为示出关于结构的组装选项的另一具体示例的示图。
图27为示出实施形态6的处理流程的示图。
图28为示出实施形态7的函数定义文件的例子的示图。
图29为示出利用图28所示的函数定义取得的运行日志的一例的示图。
图30为示出在将图29所示的运行日志进行保存之际的存储器结构的示图
图31为示出实施形态7的处理流程的示图。
图32为示出实施形态8的处理流程的示图。
图33为用来设定在实施形态7和8中示出的功能的用户接口的例子的示图。
图34为示出实施形态10的函数定义文件的例子的示图。
图35为示出利用图24所示的函数定义取得的运行日志的一例的示图。
图36为示出与图35所示的运行日志一起保存的二进制运行日志文件的内容的示图。
图37为示出实施形态10的处理流程的示图。
图38为示出实施形态11的处理流程的示图。
图39为示出实施形态11的处理流程的示图。
图40为示出用来设定在实施形态10及11示出的功能的用户接口的例子的示图。
图41为示出使在基本运行日志描述的DataID和二进制运行日志的该DataID的数据互相关联的用户接口的示图。
具体实施方式
下面参照附图对本发明的优选实施方式予以详细说明。
[实施形态1]
本实施形态,是从某一模块调用存在于别的模块内的函数之际的结构,利用保存于存储器中的输入函数地址或虚拟函数地址表(Virtual Address Table),通过挂接模块间的函数调用记录在运行日志中,可不对软件的模块本身进行加工而将整个软件的处理作为时间顺序的运行日志取得。下面具体说明之。
<系统构成>
图1为示出实现本发明的实施形态的运行日志取得方法的计算机(软件评价系统)的构成的示图。为简化说明起见,假设在本实施形态中,本软件评价系统是构筑在一台PC的内部,本发明的运行日志取得方法的特征是不管是构筑于一台PC的内部还是由多个PC构筑的网络系统,都有效。
在加载本软件评价系统的计算机中安装有CPU 1、芯片组2、RAM 3、硬盘控制器4、显示控制器5、硬盘驱动器6、CD-ROM驱动器7及显示器8。另外,设置有连接CPU 1和芯片组2的信号线11、连接芯片组2和RAM 3的信号线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(ImportAddress Table Patch)的方法,对函数调用重定向这一点。
如运行日志的取得开始,就在存储器内加载作为IAT Patch用的DLL的C.DLL(58)。C.DLL,将引人函数地址表(52)内写入的函数的地址改写为作为C.DLL内的运行日志取得代码的FuncCAA、Func CAB、Func CAC、Func CBA、Func CBB、Func CBC的地址(61-66)。C.DLL内的Func CAA、Func CAB、FuncCAC、Func CBA、Func CBB、Func CBC的代码(73-78),在记录运行日志的同时,调用加载到应该接受原来的函数调用的存储器中的作为该函数的Func AA、Func AB、Func AC、Func BA、FuncBB、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通常那样结束这一点返回(101)给EXE。
图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(构件对象模型)服务器中生成输出的接口的实例时,如何加载到存储器,首先参照图6对在通常的状态下如何加载到存储器予以说明。
通常,如进行接口的实例生成,在COM服务器内,生成要求的接口(121、122)和该方法(:在面向对象编程中,描述了对象执行的过程的程序130-135)),这两者都加载到存储器中。此处,virtual address table(虚拟地址表118、120)送往对生成的每一个实例作成的、提出生成要求的EXE。在此virtual address table中写有各个方法的生成地址(124-129)。EXE利用这些信息对各个接口进行调用。在此图中,示出的是一个EXE(119)生成Interface A(121)和Interface B(122)两个接口的实例,使用该接口内部的方法的示例,实际使用的方法为Method AA、Method AB、MethodAC、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的不同之处在于对运行日志取得用的代码采用所谓的VTable Patch(virtual address table Patch)的方法,对方法调用重定向这一点。
如运行日志的取得开始,就在存储器内加载作为VTable Patch用的DLL(143)。此DLL,将virtual address table(136、138)内写入的方法的地址改写为作为DLL内的运行日志取得代码的Method A′A、Method A′B、Method A′C、Method B′A、MethodB′B、Method B′C的地址(145-150)。DLL(143)内的MethodA′A、Method A′B、Method A′C、Method B′A、Method B′B、Method B′C的代码(157-162),在记录运行日志的同时,调用加载到应该接受原来的函数调用的存储器中的作为该函数的MethodAA、Method AB、Method AC、Method BA、Method BB、MethodBC(157-162)。
图8A为示出图7的VTable Patch处理的示图,图8B为示出运行日志取得处理的流程的流程图。为了简化说明起见,在此图中,示出在EXE调用COM服务器内的Interface A的Method AA之际,VTable Patch产生的运行日志取得代码是如何操作的示例。
如EXE(163)调用Method AA(166),位于DLL内的运行日志取得代码将模块名/接口名/方法名保存到存储器中(步骤S802)、将调用时刻保存于存储器中、将调用时的参数保存于存储器中、将调用时的指针参数指示的存储器内容保存于别个存储器中(167、步骤S802)。其后,DLL(164),调用本来应该调用的COM服务器(165)内的Method AA(168、步骤S804)。如COM服务器(165)的MethodAA处理(169)结束,将控制返回DLL(164),DLL(164)就将返回时的时刻保存于存储器中,将返回值保存于存储器中,并将返回时的指针参数指示的存储器内容保存于别个存储器中(171)。其后,DLL,将保存的运行日志信息写入文件(172、步骤S805),将是否是恰好像COM服务器(165)的Method AA通常那样结束这一点返回(173)给EXE(163)。
图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)而操作。
<实施例>
图10为示出对实施形态1的软件评价系统,指示各个函数及方法的参数的形式及返回值的形式的函数定义文件的示例图。描述DLL/接口名及函数/方法名(所谓的“函数/方法”是指“函数或方法”之意,下同此),对该函数/方法示出参数及返回值的类型。本实施形态的软件评价系统,根据由此函数定义文件指示的内容,判断各个函数/方法具有何种参数/返回值,取得其内容作为运行日志。
图11为示出利用图10所示的函数定义文件取得的运行日志的)一个示例。针对各个调用,生成调用函数/方法的时刻以及该时刻的参数/返回值作为运行日志。
从以上的说明可知,根据本实施形态的运行日志取得方法,在取得分成为多个模块的软件的处理运行日志中,可不对软件的模块本身进行改变而将模块内准备的函数/方法的调用作为运行日志进行记录,可以减少用于取得处理运行日志的作业负担。另外,生成的运行日志,可以取得按照时间顺序的运行日志,由于对运行日志的分析变得容易,可以削减用来分析软件故障原因的工时。
[实施形态2]
在本实施形态中,进一步对在virtual address table(虚拟地址表)中存在位置间隙(place gap)的场合的处理予以说明。
图12为示出对实现实施形态2的运行日志取得方法的软件评价系统,在virtual address table(虚拟地址表)中存在位置间隙(placegap)的场合,在生成接口的实例时如何向存储器加载的例子的示图。下面连系图6对图12进行说明。与图6的示例的不同之处在于有关Method BB和Method BC的部分。在针对Interface B的VTable(203)中,在应该放置Method BB的部分,放置指向称为位置间隙的虚例程的地址(211),在派生此Interface B安装MethodBB之际,指向VTable上的Method BC的地址(212)的偏移值也不改变。就是说,所谓的位置间隙,对持有虚拟函数接口,指示为派生类的预约的VTable上的区域。在派生前的Interface B中,由于没有安装Method BB,实际的代码,在Method BA(216)和MethodBC(217)之间不存在间隙。
图13为示出针对实施形态2的软件评价系统,在virtualaddress table的内部存在位置间隙的场合运行日志取得代码采用何种存储器配置放置的示图,是表示本实施形态最好的示图。下面连系图77对图13进行说明。
如运行日志取得开始,在存储器内加载VTable Patch用的DLL(228)。此DLL,将写在virtual address table(221、223)内的地址改写为DLL内运行日志取得代码的Method A′A、Method A′B、Method A′C、Method B′A、Method B′B、Method B′C的地址(230-233、235)。与图7不同之处在于自动检测位置间隙(234),关于该部分不进行改写,此外,Method B′B的代码不配置于存储器上。DLL内的Method A′A、Method A′B、Method A′C、MethodB′A、Method B′B、Method B′C的代码(241-245),在记录运行日志的同时,调用加载到应该接受原来的方法调用的存储器中的作为该方法的Method A′A、Method A′B、Method A′C、Method B′A、Method B′B、Method B′C(236-240)。
图14为示出实施形态2的软件评价系统存储器加载时的处理的流程的示图,与图13一起,可以最清楚地表现本实施形态的特征。
如处理开始(步骤S1401),自己将作为Index参照的存储器区初始化为零(步骤S1402)。此Index表示在函数定义文件中记载的方法的顺序。其次,由操作系统读出写在函数定义文件中的Index n的方法的属性(步骤S1403),从属性信息判断该函数是否是虚拟函数(步骤S1404)。在是虚拟函数的场合,由操作系统(OS),读取针对Index n的方法位置间隙的偏置值p(步骤S1405),判断p是否是真值,即判断是否是零指针(步骤S1406)。此处,根据p是否是真值,判断是否存在位置间隙,比如对于将0xFFFFFFFF这样的规定值定义为“位置间隙不存在”的意思的操作系统,同样判断是否是0xFFFFFFFF。
在不存在位置间隙的场合,或在步骤S1404中判断不是虚拟函数的场合,如图7所示生成运行日志取得代码。具体说,将运行日志取得代码置于存储器上(步骤S1407),由操作系统读取针对Indexn的方法的VTable上的偏置值m(步骤S1408),在步骤S1409中将偏置值m的地址改写为运行日志取得代码的地址。
在步骤S1409结束的场合或在步骤S1406中判断存在位置间隙的场合,使Index n增1(步骤S1410)。就是说,在后一场合存储器内的位置间隙的区域,不改写为运行日志取得代码的地址。此处理,一直继续进行到存储器加载终止为止(步骤S1411)。
图15为示出对实施形态2的软件评价系统,指示各个函数及方法的参数的形式及返回值的形式的函数定义文件的示例图。另外,关于位置间隙的定义,由于通常的操作系统提供的功能,在此函数定义文件中不描述。因此,图15和图10一样。
图16为示出利用图15示出的函数定义文件,对保持图12所示的位置间隙的接口,在实施形态2的软件评价系统中取得的运行日志的一例的示图。对于各个调用,函数/方法生成调用时刻以及该时刻的参数/返回值作为运行日志。另外,尽管在VTable上有位置间隙,可以取得对于在位置间隙后配置的Method BC的调用的运行日志的是图14所示的流程,即实施本实施形态,只要不进行位置间隙检测,关于像Method BC那样配置于位置间隙后的方法,不能取得运行日志。
从以上的说明可知,根据本发明,通过由操作系统返回的信息自动判断virtual address table的位置间隙,即使是在virtual addresstable中存在位置间隙,也能取得运行日志。
[实施形态3]
通常,位置间隙,如上述实施形态2,为解决伴随类的派生的虚拟函数而使用,但在那以外也存在使用的情况。
图17为示出实现实施形态3的运行日志取得方法的软件评价系统的存储器加载时的处理流程的流程图,是与图14不同的另一示例。如处理开始(步骤S1701),自己将作为Index参照的存储器区初始化为零(步骤S1702)。此Index表示在函数定义文件中记载的方法的顺序。其次,由操作系统读取针对Index n的方法的位置间隙的偏置值p(步骤S1703),判断p是否是真值,即判断是否是零指针(步骤S1704)。此处,根据p是否是真值,判断是否存在位置间隙,比如对于将0xFFFFFFFF这样的规定值定义为“位置间隙不存在”的意思的操作系统,同样判断是否是0xFFFFFFFF。
在不存在位置间隙的场合,如图7所示生成运行日志取得代码。具体说,将运行日志取得代码置于存储器上(步骤S1705),由操作系统读取针对Index n的方法的VTable上的偏置值m(步骤S1706),将偏置值m的地址改写为运行日志取得代码的地址(步骤S1707)。
在步骤S1707结束的场合或在步骤S1704中判断存在位置间隙的场合,使Index n递增1(步骤S1708)。就是说,在后一场合存储器内的位置间隙的区域,不改写为运行日志取得代码的地址。此处理,一直继续进行到存储器加载终止为止(步骤S1709)。
通过此处理,即使是在位置间隙用于虚拟函数以外的场合,也能取得针对图16所示那样的在位置间隙后配置的方法的调用的运行日志。
[实施形态4]
在本实施形态中,对在方法内部生成接口实例的场合的处理予以说明。
在本实施形态中,对于全部方法调用的参数及返回值,判断是否是运行日志取得对象的接口的参数或返回值,判断的结果、是运行日志取得对象的接口的场合,通过以另外途径将运行日志取得代码加载到存储器中而将参数或返回值改写为该运行日志取得代码的地址而是函数返回,即使是在方法内部生成接口的实例的场合,也可以自动记录关于对该实例内部的方法的调用的运行日志。下面予以详细叙述。
图18为示出对实施形态4的运行日志取得方法的软件评价系统,指示各个函数及方法的参数的形式及返回值的形式的函数定义文件的示例图。描述DLL名及函数/方法名,对该函数/方法示出参数及返回值的类型。本发明的实施形态的软件评价系统,根据由此函数定义文件指示的内容,判断各个函数/方法具有何种参数/返回值,取得其内容作为运行日志。另外,在本实施形态中,Interface A的Method AB,返回指向在Method AB内部生成的Interface B的实例的指针,作为输出参数。另外,Interface A的Method AC,返回指向在Method AB内部生成的Interface B的实例的指针,作为返回值。为了EXE调用在DLL内作为代码描述的Interface B内的方法,首先利用Method AB或Method AC,生成Interface B的实例,必须了解该实例的存储器地址。
图19为利用图18所示的函数定义文件取得的运行日志的一例的示图。对于各个调用,生成调用函数/方法的时刻及在该时刻的参数/返回值作为运行日志。
图20为示出实施形态4的处理流程的示图。
如处理开始(步骤S2001),每当调用设定的函数/方法时,都将DLL名/接口名/方法名/调用时的时刻保存于HDD中(步骤S2002),将针对该调用的参数保存于HDD中(步骤S2003)。调用原来的方法(步骤S2004)。
如方法内部的处理开始,将DLL名/接口名/方法名/终止时的时刻保存于HDD中(步骤S2005),将针对该调用的参数及返回值保存于HDD中(步骤S2006)。
其次,根据图18所示的函数定义文件,判断参数或返回值是否定义为指向接口的指针(步骤S2007),在定义的场合,在存储器上生成对该指针的运行日志取得代码(步骤S2008),将该参数或返回值改写为运行日志取得代码的存储器地址(步骤S2009)。在判断步骤S2009的处理是否结束或在步骤S2007中未作为接口指针定义的场合,进行函数的返回处理(步骤S2010)。
此处理,一直继续进行到成为评价对象的程序结束为止(步骤S2011)。
通过将方法作为参数或返回值返EXE、指向接口的实例的指针重新指向运行日志取得代码,对以后利用该指针调用的方法的调用,比如图18的Interface B的Method BA的系数的调用,也可以如图19记录参数/返回值/时刻等。
[实施形态5]
图21为示出实施形态5的处理流程的示图,与图20所示的实施形态4的不同之处在于加上了步骤S2128-2129。
就是说,在判断参数或返回值作为指向接口的指针定义的场合,判断该接口是否是写在追踪情景中的追踪对象(步骤S2128、S2129)。在判断是追踪对象的场合,在存储器上生成对该指针的运行日志取得代码(步骤S2130),将该参数或返回值改写为运行日志取得代码的存储器地址(步骤S2131)。在步骤S2131的处理结束、或判断在步骤S2127中未作为接口指针定义的场合、或在步骤S2129中判断不是追踪对象的场合,进行函数的返回处理(步骤S2132)。
此处理,一直继续进行到成为评价对象的程序结束为止(步骤S2133)。
与上述实施形态4不同,在实施形态5中,由于只在参数或返回值是追踪对象的场合生成运行日志取得代码和地址的重新定向,可以获得节约使用存储器和防止想要取得运行日志的EXE及DLL的处理速度低下的效果。
[实施形态6]
在本实施形态中,对与上述实施形态不同的函数定义文件进行定义的场合的处理予以说明。
图22为示出对实施形态6的软件评价系统,指示各个函数及方法的参数的形式及返回值的形式的函数定义文件的示例图。
在同图中示出的PO(PackingOption)的字节数是作为本实施形态的特征的定义部分。
图23为示出利用图22示出的函数定义文件,在实施形态6的软件评价系统中取得的运行日志的一例的示图。对各个调用,生成调用函数/方法的时刻以及该时刻的参数/返回值作为运行日志。
在进入对图24的说明之前,对广泛使用的结构的PO予以说明。
所谓的结构的PO,是在将结构的实体配置于存储器之际,关于以何种调整在存储器上配置的决定,在模块间交接结构的之际使用。
在通常的CPU中,结构的项在存储器上的配置方式使得可以不降低CPU的速度将内容读取到寄存器中。比如,在数据总线宽度为64bit的CPU中,通过在以下这样的存储器边界配置项,就可以不降低CPU的速度将存储器内容读取到寄存器中。
1字节数据->0x00000000,0x00000001,0x00000002,,,
2字节数据->0x00000000,0x00000002,0x00000004,,,(最小1位为零)
4字节数据->0x00000000,0x00000004,0x00000008,,,(最小2位为零)
8字节数据->0x00000000,0x00000008,0x00000010,,,(最小3位为零)
这取决于如下的特性,即在通常的CPU计算存储器地址之际,从以数据大小分割的存储器地址读取数据比较从不是那样的存储器地址读取数据更快。
但是,如这样配置数据,由于在存储器内残留大量未使用的空间,即使是可以关于速度进行最优化,对于使用存储器量也会产生恶劣影响。
为回避该恶劣影响,在通常的编译程序中,备有称为结构PO的选项。比如,由于8字节的数据计算即使是慢也没有关系,降低使用的存储器量优先,而在关于4字节以下的数据,与存储器量相比速度优先的场合,通过使结构的PO为4对程序(在本实施形态中EXE和DLL两者)进行编译可以在如下的存储器边界上配置结构的各项。
1字节数据->0x00000000,0x00000001,0x00000002,,,
2字节数据->0x00000000,0x00000002,0x00000004,,,(最小1位为零)
4字节数据->0x00000000,0x00000004,0x00000008,,,(最小2位为零)
8字节数据->0x00000000,0x00000004,0x00000008,,,(最小2位为零)
这一场合,只有4字节以下的数据配置于以数据大小分割的存储器地址。
在意欲只将1字节以下的数据配置于以数据大小分割的存储器地址的场合,通过将结构的PO取为1对程序进行编译,可以在如下的存储器边界上配置结构的各项。
1字节数据->0x00000000,0x00000001,0x00000002,,,
2字节数据->0x00000000,0x00000002,0x00000004,,,(最小1位为零)
4字节数据->0x00000000,0x00000002,0x00000004,,,(最小1位为零)
8字节数据->0x00000000,0x00000002,0x00000004,,,(最小1位为零)
在意欲只将2字节以下的数据配置于以数据大小分割的存储器地址的场合,通过将结构的PO取为2对程序进行编译,可以在如下的存储器边界上配置结构的各项。
1字节数据->0x00000000,0x00000001,0x00000002,,,
2字节数据->0x00000000,0x00000001,0x00000002,,,
4字节数据->0x00000000,0x00000001,0x00000002,,,
8字节数据->0x00000000,0x00000001,0x00000002,,,
图24为示出关于以上说明的结构的PO的更具体的示例的示图。在结构的项为1字节的数据和8字节的数据2种的场合,相应于结构的PO,在EXE和DLL之间作为参数或返回值进行交接的结构,在存储器上的配置如图所示。
图25为示出关于结构的PO的另一具体示例的示图。在结构的项为1字节的数据和4字节的数据2种的场合,相应于结构的PO,在EXE和DLL之间作为参数或返回值进行交接的结构,在存储器上的配置如图所示。
图26为示出关于结构的PO的另一具体示例的示图。在结构的项为1字节的数据和2字节的数据2种的场合,相应于结构的PO,在EXE和DLL之间作为参数或返回值进行交接的结构,在存储器上的配置如图所示。
这些示例完全是用来说明结构的PO的示例,本实施形态,不管结构的种类为何都有效。本实施形态的特征在于,在结构进入追踪函数/方法的参数或返回值的场合,相应于预先在函数定义文件中指定的结构PO,自动展开结构的内容。
图27为示出实施形态6的处理流程的示图。
如通过调用设定的函数/方法开始处理(步骤S2701),就从函数定义文件读取结构的PO(步骤S2702),将DLL名/函数名/调用时的时刻保存于HDD上(步骤S2703)。
其次,根据图22所示的函数定义文件,判断参数是否定义为结构(步骤S2704),在未定义为结构的场合,将针对该调用的参数保存于HDD上(步骤S2705)。在定义为结构的场合,在步骤S2702中,根据读取的结构的PO将结构的内容从存储器展开(步骤S2706),将各个项保存于HDD上(步骤S2707)。
如函数内部处理结束(步骤S2708),就将DLL名/函数名/终止时的时刻保存于HDD中(步骤S2709)。其次,根据图22所示的函数定义文件判断参数及返回值是否定义为结构(步骤S2710),在未作为结构定义的场合,将针对该调用的参数及返回值保存于HDD中(步骤S2711)。在作为结构定义的场合,在步骤S2702中根据读取的结构的组装选项将结构的内容从存储器展开(步骤S2712),将针对该调用的参数及返回值保存于HDD中(步骤S2713)。
此处理,一直继续进行到作为评价对象的程序结束为止(步骤S2714)。
从以上的说明可知,根据本实施形态的运行日志取得方法,通过在函数定义中采用组装选项,可以削减运行日志取得时使用的存储器量。
[实施形态7]
在上述实施形态6中对通过采用组装选项削减运行日志取得时使用的存储器量的场合进行了说明,但也可以通过限制存储器中缓冲的运行日志数据的数目,将运行日志取得时使用的存储器量限制到一定值以下。
图28为示出实施形态7的函数定义文件的例子的示图。描述了DLL名及函数/方法名,示出针对该函数/方法的参数及返回值的类型。本实施形态的软件评价系统,根据利用此函数定义文件指示的内容,判断各个函数/方法具有何种参数/返回值,取得其内容作为运行日志。
图29为示出利用图28所示的函数定义取得的运行日志的一例的示图。针对各个调用生成调用函数/方法的调用时刻以及在该时刻的参数/返回值作为运行日志。
图30为示出在将图29所示的运行日志进行保存之际的存储器结构的示图。针对各个函数调用对某一存储器偏置值保存数据及Index。
图31为示出实施形态7的处理流程的示图。
如通过调用设定的函数/方法开始处理(步骤S3101),将指定用于Index计数的寄存器或存储器区清零(步骤S3102),将缓冲Index数的设定读取到存储器(步骤S3103)。其次,将Index保存到图30中所示的Index区(步骤S3104),将DLL名/函数名/调用时的时刻保存到HDD(步骤S3105),将针对该调用的参数保存到存储器(步骤S3106),调用函数/方法(步骤S3107)。
如函数内部处理结束,就将DLL名/函数名/终止时的时刻保存于存储器中(步骤S3108),将针对该调用的参数及返回值保存到存储器(步骤S3109)。其次,将利用步骤S3103中读出的设定和现在的Index进行比较(步骤S3110),在设定值比Index大或相同时,就不将运行日志数据移动到HDD,只将Index加1(步骤S3111),返回到步骤S3104的处理。在Index值比设定大时,就保持于存储器中的数据移动到HDD,将存储器中的内容清除(步骤S3112)。
此处理,一直继续进行到成为评价对象的程序结束为止(步骤S3113)。
[实施形态8]
在上述实施形态7中,必须将运行日志取得时使用的存储器量限制到一定值以下,要对Index进行计数,但也可利用运行日志数据的大小进行限制。
图32为示出实施形态8的处理流程的示图。与实施形态7的不同之处是设置步骤S3203、3210、3212代替步骤S3103、3110、3112。就是说,将缓冲大小的设定读取到存储器(步骤S3203),将利用步骤S3203读如的设定和到现在的Index为止保存于存储器中的数据的大小进行比较(步骤S3210),在保存于存储器中的数据的大小比设定的大小大时,就将保存于存储器中的数据在HDD上向前移动一个Index,将直到前一个Index为止的量的存储器的内容清零(步骤S3212)。通过将直到前一个的数据从存储器移动到HDD,可以使存储器使用量保持为不超过指定大小的状态。
[实施形态9]
图33为用来设定在上述实施形态7和8中示出的功能的用户接口的例子的示图。通过选中复选框可以设定是否进行运行日志的存储器缓冲,在进行的场合,可以选择基于记录数的指定即利用实施形态7的指定和基于运行日志大小的指定即利用实施形态8的指定。
[实施形态10]
在上述实施形态中,叙述的是减少运行日志取得时使用的存储器量的场合,也可以使保存于HDD上的运行日志文件的数据量减少。
图34为示出实施形态10的函数定义文件的例子的示图。描述了DLL名及函数/方法名,示出针对该函数/方法的参数及返回值的类型。本实施形态的软件评价系统,根据利用此函数定义文件指示的内容,判断各个函数/方法具有何种参数/返回值,取得其内容作为运行日志。
在图34中示出的针对A.DLL内的函数FuncAB的函数定义,是表示本实施形态的最佳者。在变量中,定义的是作为数据存放目标示出的指针pBuf和作为其数据的大小示出的dwBufSize,定义的是pBuf和dwBufSize的相关,即存放于pBuf中的数据的大小由dwBufSize指示的这一相关。
图35为示出利用图24所示的函数定义取得的运行日志的一例的示图。针对各个调用生成调用函数/方法的调用时刻以及在该时刻的参数/返回值作为运行日志。
在图35中示出的针对A.DLL内的函数FuncAB的调用的运行日志,与图34的函数定义文件一起,是表示本实施形态的特征的最佳者。根据图34示出的函数定义,在针对FuncAB的调用之际,不仅作为变量的pBuf的值,该值指示的地址上的dwBufSize量即24字节量的数据作为与通常的运行日志分开的二进制运行日志进行保存,保存于该二进制运行日志文件中的该FuncAB的调用的ID即DataID,作为追加信息保存于运行日志中。
图36为示出与图35所示的运行日志一起保存的二进制运行日志文件的内容的示例图。DataID作为标志保存,对该DataID每个都保存二进制数据。
在图34-36示出的函数定义文件、运行日志、二进制运行日志中示出的实施形态,指示的数据,不管是输入数据、输出数据或返回值,都有效。比如,作为来自函数的输出参数返回数据地址,还作为来自函数的返回值输出数据大小的场合,也同样可以取得数据本体的运行日志。
图37为示出本实施形态的处理流程的示图。
如通过调用设定的函数/方法开始处理(步骤S3701),将DLL名/接口名/函数名/调用时的时刻保存于HDD中(步骤S3702),将针对该调用的参数保存于HDD中(步骤S3703)。
其次,根据图34所示的函数定义文件,判断参数是否定义为存储器地址(步骤S3704),在定义的场合,从表示大小的变量取得数据大小(步骤S3705),将该大小量的数据从存储器读取(步骤S3706),附加DataID后将数据保存到HDD的二进制文件中(步骤S3707)。在参数未定义为存储器地址的场合,不从步骤3705进行步骤3707的处理。
如函数内部处理结束(步骤S3708),就将DLL名/函数名/终止时的时刻保存到HDD中(步骤S3709),将针对该调用的参数及返回值保存到HDD(步骤S3710)。
其次,根据图34所示的函数定义文件判断参数是否定义为存储器地址(步骤S3711),在定义的场合,将从表示大小的变量取得数据大小(步骤S3712),从存储器读取该大小量的数据(步骤S3713),附加DataID后将数据保存到HDD的二进制文件中(步骤S3714)。在参数未定义为存储器地址的场合,不从步骤3712进行步骤3714的处理。
此处理,一直继续进行到成为评价对象的程序结束为止(步骤S3715)。
从以上的说明可知,在函数定义文件中,在参数定义为存储器地址并且将该对应于该存储器地址的二进制数据作为运行日志文件保存的场合,通过只将在函数定义文件中大小量的二进制数据进行保存,可以削减保存在HDD中的运行日志文件的数据量。
[实施形态11]
在上述实施形态10中,当保存二进制数据(参数定义为存储器地址,存放在该存储器地址上的二进制数据)时,将由大小变量取得的数据大小量的数据进行保存,对指定大小以上的数据也可以不保存。
图38及图39为示出实施形态11的处理流程的示图。步骤S3801-3805,与上述的步骤S3701-3705同样执行。其次,判断对二进制数据的取得是否是设定有上限(步骤S3806),在未设定上限的场合,从存储器读出由表示大小的变量示出的整个大小量的数据(步骤S3807),附加DataID后将数据保存到HDD的二进制文件中(步骤S3810)。在参数未定义为存储器地址的场合,不从步骤3805进行步骤3810的处理。
步骤S3811-3815,与上述的步骤S3708-3712同样执行。并且,步骤S3816-3820,与上述的步骤S3816-3810同样执行。此处理,一直继续进行到成为评价对象的程序结束为止(步骤S3821)。
[实施形态12]
图40为示出用来设定在实施形态10及11示出的功能的用户接口的例子的示图。在存在设定是否是分别保存输入参数、输出参数、二进制数据作为保存在运行日志中的对象,进行保存二进制参数的设定的场合,进行实施形态10所示的处理。另外,进行保存二进制参数的设定,并且在进行不保存指定大小以上的数据的设定,指定大小的场合,进行实施形态11所示的处理。
[实施形态13]
图41为示出使图34所示的基本运行日志内描述的DataID和二进制运行日志的该DataID的数据互相关联的用户接口的示图。利用这种用户接口,可以很容易参照DataID的数据。在通常的运行日志表示中,明确示出该参数是表示存储器地址的参数,通过用户利用鼠标点击等对该部分进行选择,显示与该DataID相对应的数据。
[其他实施形态]
另外,本发明,既适用于由多个设备(比如,主计算机、接口装置、读取器、打印机等)构成的系统,也适用于由一台设备组成的装置(比如,复印机、传真装置等)。
另外,本发明目的也可以通过将记录执行上述实施形态的功能的软件的程序代码的存储介质供给系统或装置,该系统或装置的计算机(或CPU及MPU)读出并执行存放于存储介质上的程序代码而达到,这是自不待言的。
在此场合,由于从存储介质读出的程序代码本身实现上述实施形态的功能,所以存储该程序代码的存储介质构成本发明。
作为用来供给程序代码的存储介质,比如,可以使用软盘(注册商标)、硬盘、光盘、磁光盘、CD-ROM、CD-R、磁带、非易失性存储卡以及ROM等。
另外,通过执行计算机读出的程序代码,不仅可以实现上述实施形态的功能,而且根据该程序代码的指示,在计算机上运行的OS(操作系统)等进行实际处理的一部分或全部,通过该处理实现上述实施形态的功能的场合也包括在内是自不待言的。
此外,从存储介质读出的程序代码,在写入到插入计算机的功能扩展板或与计算机相连接的功能扩展装置中设置的存储器后,根据该程序代码的指示,设置于该功能扩展板或功能扩展装置上的CPU等进行实际处理的一部分或全部,通过该处理实现上述实施形态的功能的场合也包括在内是自不待言的。
如上所述,根据本发明,容易取得分成为多个模块的软件的处理运行日志,并且可以削减用来分析软件故障的原因的工时。
本发明不限于上述具体实施例,并且在不脱离本发明的精神和范围的情况下可以实现本发明的多种改变和变型。因此,为使广大群众了解本发明的范围,下面提出本发明的权利要求。
Claims (13)
1.一种运行日志取得方法,用于取得包含进行规定的处理的函数/方法的程序的执行中的运行日志,其特征在于:包括如下步骤,
将加载的进行上述规定的处理的上述函数/方法的地址改写为用来取得运行日志的函数的地址,
其中用来取得运行日志的上述函数/方法包括如下步骤,
调用进行上述规定的处理的上述函数/方法,以使上述规定的处理被执行,接收执行结果,并且将上述结果转送给上述程序;
对在调用进行上述规定的处理的上述函数/方法之际的规定信息进行记录;以及
对在接收上述执行结果之际的规定信息进行记录。
2.如权利要求1所述的运行日志取得方法,其特征在于在调用进行上述规定的处理的上述函数/方法之际的上述规定信息包括被调用的函数/方法的函数/方法名、上述函数/方法被调用的时刻、上述函数/方法被调用时由被指定的参数所指示的存储器内容、或者上述函数/方法被调用时指定的指针参数中的至少一个。
3.如权利要求1所述的运行日志取得方法,其特征在于在接收上述执行结果时被记录的上述规定信息包括接收上述结果时的时刻、接收的参数、接收的返回值和由接收的指针参数指示的存储器内容中的至少一个。
4.如权利要求1所述的运行日志取得方法,其特征在于进行上述规定的处理的上述函数的地址,针对提供该函数的动态链接库的每一个,记载于输入函数地址表中。
5.如权利要求1所述的运行日志取得方法,其特征在于进行上述规定的处理的上述方法的地址,针对提供该方法的接口的每一个,记载于虚拟地址表中。
6.如权利要求5所述的运行日志取得方法,其构成还包括确定在上述虚拟地址表中有无位置间隙的步骤,
如果上述虚拟地址表中有位置间隙,从操作系统取得上述位置间隙的偏置值;
其中上述改写地址的步骤不将与由上述取得步骤取得的偏置值有关的上述位置间隙的区域改写为用于取得运行日志的上述方法的地址。
7.如权利要求1所述的运行日志取得方法,其构成还包括从进行规定的处理的上述函数/方法的地址之中,选择改写为取得运行日志的上述函数/方法的地址的地址,
其中上述改写地址的步骤,改写由上述选择步骤选择的函数/方法的地址。
8.如权利要求1所述的运行日志取得方法,其特征在于上述用于获得运行日志的函数/方法的步骤还包括如下步骤:
确定在上述程序的函数定义中是否将参数或返回值定义为结构;
如果参数或返回值被定义为结构,根据该结构的组装选项在存储器中配置上述结构的内容;以及
将配置于上述存储器中的上述结构的内容记录于盘装置作为运行日志。
9.如权利要求1所述的运行日志取得方法,其特征在于,在调用用于进行上述规定的处理的上述函数/方法时记录规定信息和在接收上述执行结果时记录规定信息的步骤中,规定信息被作为运行日志存储在存储器中。
10.如权利要求9所述的运行日志取得方法,其特征在于上述用于获得运行日志的函数/方法还包括如下步骤:
指定调用进行上述规定的处理的函数/方法的次数;以及
将与上述指定的调用次数相关的上述规定信息作为运行日志存放于上述存储器之后,将存放于该存储器中的上述规定信息转移到盘装置并在上述盘装置中保存上述规定信息。
11.如权利要求9所述的运行日志取得方法,其特征在于上述用于获得运行日志的函数/方法还包括如下步骤:
指定在上述存储器中存放的信息的大小;以及
将与上述指定的大小有关的上述规定信息作为运行日志存放于上述存储器后,将存放于该存储器中的上述规定信息转移到盘装置并在上述盘装置中保存上述规定信息。
12.如权利要求9所述的运行日志取得方法,其特征在于上述用于获得运行日志的函数/方法还包括如下步骤:
确定在上述程序的函数定义中是否将参数或返回值定义为存储器地址,如果将参数或返回值定义为存储器地址,则读取在上述程序的上述函数定义中定义的上述参数或返回值的大小;以及
将上述存储器地址上的二进制数据作为运行日志进行记录,其中上述二进制数据的大小等于上述读取的大小。
13.如权利要求12所述的运行日志取得方法,其特征在于在将在上述存储器地址上的二进制数据记录为运行日志的上述步骤中,二进制数据被存储在存储器中,并且
上述用于获得运行日志的函数/方法还包括如下步骤:
指定存储在上述存储器中的上述二进制数据部分的大小,上述二进制数据部分将被转移到盘装置中;以及
将上述读取的大小与上述指定的大小进行比较,并且将一定量的二进制数据从上述存储器转移到盘装置,将二进制数据存储到上述盘装置中,上述二进制数据量等于上述大小中不大的一个。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002191130A JP4125056B2 (ja) | 2002-06-28 | 2002-06-28 | ログ取得方法 |
JP191127/2002 | 2002-06-28 | ||
JP2002191127A JP4125053B2 (ja) | 2002-06-28 | 2002-06-28 | ログ取得方法 |
JP191130/2002 | 2002-06-28 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1469248A CN1469248A (zh) | 2004-01-21 |
CN1276355C true CN1276355C (zh) | 2006-09-20 |
Family
ID=29718462
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN03149336.XA Expired - Fee Related CN1276355C (zh) | 2002-06-28 | 2003-06-27 | 运行日志取得方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US7188279B2 (zh) |
EP (1) | EP1376365A3 (zh) |
CN (1) | CN1276355C (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4125169B2 (ja) * | 2003-04-02 | 2008-07-30 | キヤノン株式会社 | ログ取得方法 |
US7743367B1 (en) * | 2003-12-30 | 2010-06-22 | Sap Ag | Registration method for supporting bytecode modification |
CN100347669C (zh) * | 2003-12-30 | 2007-11-07 | 佳能株式会社 | 运行日志取得方法 |
JP2006172204A (ja) * | 2004-12-16 | 2006-06-29 | Canon Inc | 情報処理装置、情報処理方法、コンピュータプログラム及び記憶媒体 |
JP4681868B2 (ja) * | 2004-12-16 | 2011-05-11 | キヤノン株式会社 | 情報処理装置及びその制御方法、コンピュータプログラム及び記憶媒体 |
JP4886188B2 (ja) | 2004-12-16 | 2012-02-29 | キヤノン株式会社 | 情報処理装置及びその制御方法、コンピュータプログラム及び記憶媒体 |
JP2006201969A (ja) * | 2005-01-19 | 2006-08-03 | Fujitsu Ltd | エラー情報圧縮装置、エラー情報圧縮方法およびエラー情報圧縮プログラム |
CN100472469C (zh) * | 2005-02-07 | 2009-03-25 | 佳能株式会社 | 运行日志获取方法 |
JP4681923B2 (ja) * | 2005-04-01 | 2011-05-11 | キヤノン株式会社 | 情報処理装置及びその制御方法、コンピュータプログラム、記憶媒体 |
US8578393B1 (en) * | 2008-06-18 | 2013-11-05 | Alert Logic, Inc. | Log message collection employing on-demand loading of message translation libraries |
US8245081B2 (en) * | 2010-02-10 | 2012-08-14 | Vmware, Inc. | Error reporting through observation correlation |
CN102073496A (zh) * | 2010-12-29 | 2011-05-25 | 浙大网新科技股份有限公司 | 对调用dll导出函数进行拦截跟踪的方法 |
CN103092742B (zh) | 2011-10-31 | 2015-08-19 | 国际商业机器公司 | 程序日志记录优化方法和系统 |
US9213622B1 (en) * | 2013-03-14 | 2015-12-15 | Square, Inc. | System for exception notification and analysis |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6226789B1 (en) * | 1996-01-29 | 2001-05-01 | Compaq Computer Corporation | Method and apparatus for data flow analysis |
US6314558B1 (en) * | 1996-08-27 | 2001-11-06 | Compuware Corporation | Byte code instrumentation |
US5946486A (en) * | 1996-12-10 | 1999-08-31 | International Business Machines Corporation | Apparatus and method for tracing entries to or exits from a dynamic link library |
US5970245A (en) * | 1997-01-03 | 1999-10-19 | Ncr Corporation | Method for debugging shared procedures contained in dynamic link library files |
US5903758A (en) * | 1997-02-24 | 1999-05-11 | Sun Microsystems, Inc. | Method and apparatus for auditing dynamically linked procedure calls |
US6282701B1 (en) * | 1997-07-31 | 2001-08-28 | Mutek Solutions, Ltd. | System and method for monitoring and analyzing the execution of computer programs |
US6161216A (en) * | 1998-04-29 | 2000-12-12 | Emc Corporation | Source code debugging tool |
US6996808B1 (en) * | 2000-02-12 | 2006-02-07 | Microsoft Corporation | Function injector |
US7107579B2 (en) * | 2002-05-09 | 2006-09-12 | Hewlett-Packard Development Company, L.P. | Preserving program context when adding probe routine calls for program instrumentation |
-
2003
- 2003-06-20 US US10/465,280 patent/US7188279B2/en not_active Expired - Fee Related
- 2003-06-25 EP EP03254034A patent/EP1376365A3/en not_active Withdrawn
- 2003-06-27 CN CN03149336.XA patent/CN1276355C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
EP1376365A2 (en) | 2004-01-02 |
EP1376365A3 (en) | 2004-01-07 |
CN1469248A (zh) | 2004-01-21 |
US7188279B2 (en) | 2007-03-06 |
US20040003326A1 (en) | 2004-01-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1276355C (zh) | 运行日志取得方法 | |
CN1758221A (zh) | 程序处理装置 | |
CN1122216C (zh) | 优化器 | |
CN1101019C (zh) | 数据序列产生方法及设备、转换方法及计算机 | |
CN1130626C (zh) | 支援并行程序的装置以及支持程序编制的方法 | |
CN1253806C (zh) | 仲裁电路和数据处理系统 | |
CN1228558A (zh) | 程序变换方法和程序变换系统 | |
CN101069181A (zh) | 存储设备和记录介质 | |
CN1315062C (zh) | 处理器装置、使用它的信息处理装置、编译装置及其方法 | |
CN1437110A (zh) | 用于断点设定的装置和方法 | |
CN1908892A (zh) | 测试用例设计方法和系统 | |
CN1918546A (zh) | 程序转换装置及程序转换方法 | |
CN1534470A (zh) | 日志获取方法及其控制程序、存储媒体 | |
CN1517869A (zh) | 处理器、运算处理方法和优先度决定方法 | |
CN1886728A (zh) | 非法代码执行的防止方法、非法代码执行的防止用程序以及非法代码执行的防止用程序的记录媒体 | |
CN1912926A (zh) | 可中断图形处理单元处理多个程序的方法和图形处理单元 | |
CN1749955A (zh) | 控制处理器和协处理器间的数据传输的运算处理装置 | |
CN1949187A (zh) | 一种程序调测系统及方法 | |
CN1278226C (zh) | 模拟装置、模拟方法 | |
CN101065725A (zh) | 命令供给装置 | |
CN1869952A (zh) | 指令执行设备、调试方法、调试设备以及调试程序 | |
CN1197082C (zh) | 使用存储器的方法、两维数据存取存储器以及操作处理设备 | |
CN1758222A (zh) | 程序处理装置 | |
CN1900959A (zh) | 设计制造的支援装置、支援程序和支援方法 | |
CN1761949A (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: 20060920 Termination date: 20150627 |
|
EXPY | Termination of patent right or utility model |