用于调用转换和追踪的规范文件的制作方法

文档序号:6484393阅读:173来源:国知局
用于调用转换和追踪的规范文件的制作方法
【专利摘要】描述了用于存储函数规范文件的方法与装置。在示例性方法中,函数规范文件能够提供其它软件来在存在第一操作系统的情况下方便应用程序在第二操作系统中的执行,而且该应用程序是针对第一操作系统编译的。在另一示例性方法中,预处理器接收包括用于库函数的函数定义数据的函数规范文件。预处理器处理函数定义数据,以为该函数生成头信息和函数代码。在另一示例性方法中,预处理器基于函数定义数据为插入库生成自动记录框架。此外,插入库中的函数记录对相应库函数的调用。
【专利说明】用于调用转换和追踪的规范文件
【技术领域】
[0001]本发明总体上涉及应用程序执行,更特别地涉及函数调用转换和追踪,而且在有些实施例中涉及库的自动生成。
【背景技术】
[0002]当操作系统执行应用程序时,该应用程序将对由函数库提供的函数进行函数调用。应用程序是在特定操作系统(OS)下被编译并链接以便执行的计算机程序。OS是启动计算机或者其它数据处理系统并且管理该计算机或者其它数据处理系统的函数和/或资源的软件。函数库是向应用程序提供服务的函数的集合。库可以是静态链接的,或者是在运行时动态链接的。静态链接的库是在编译时被链接并且是应用程序的一部分。动态链接的库是当应用程序执行时由该应用程序加载进来或者使用的。动态链接的库的例子是运行时库、动态链接库(Dynamic-Link Library,DLL)和操作系统(OS)服务。运行时库、DLL和OS服务在这里统称为系统库。在一个实施例中,运行时库是由编译器用来在应用程序执行过程中实现构建到编程语言中的函数的计算机程序库。DLL是在运行时加载到应用程序中的函数库。DLL函数可以是特定于操作系统的、特定于应用程序的,等等。在一个实施例中,OS服务是由应用程序在运行期间中使用并特定于特定OS的服务。OS服务可以是用以管理诸如存储器的系统资源、文件系统资源、电力状态、图形用户接口、其它资源,执行应用程序间通信等的服务。
[0003]图1(现有技术)是在操作系统环境中执行的应用程序102的框图。在图1中,应用程序102在利用运行时库104、0S服务106和/或DLL 108的OS环境100中执行。在图1中,应用程序102是专门为在OS环境100中执行而生成的。虽然如此,这个应用程序还可以在不同的OS环境中运行。图2(现有技术)是在一种操作系统环境210(0S2)中执行的应用程序202的框图,其中该应用程序202还在另一操作系统环境200 (OSl)中执行。0S2可以是来自与OSl不同厂家的不同操作系统。可选地,0S2可以是OSl的不同版本。在图2中,基于0S2的应用程序202通过使用0S2服务环境210在OSl环境200中运行。在一个实施例中,0S2服务环境210是在OSl环境200中作为虚拟机执行的0S2的真实版本。本领域中已知的这种实施例的例子是VMWARE、PARALLELS和VIRTUALPC。在该实施例中,0S2应用程序202利用0S2服务、DLL和/或运行时库208在操作系统0S2中运行。
[0004]可选地,0S2服务环境210提供了用于应用程序202的一组应用程序编程接口(API),而不需要在0S2服务环境中执行一种版本的0S2。在该实施例中,0S2服务环境210在OSl环境中利用0S2库206加载并执行基于0S2的应用程序。术语“基于0S2的应用程序”意味着,这个应用程序是针对0S2操作系统编译的,并打算在0S2操作系统下执行。此外,0S2服务环境210还可以使用0S2库208,例如0S2服务、DLL和/或运行时库。本领域中已知的该实施例的例子是WINE (例如,见http://www.winehq.0rg)。

【发明内容】
[0005]描述了根据至少某些实施例的利用函数规范的方法与装置。在示例性方法中,函数规范文件能够提供其它软件,用以方便应用程序在第二操作系统中的执行,而不需要第一操作系统的存在;在这种方法中,应用程序是针对第一操作系统编译的。在另一示例性方法中,预处理器接收包括用于库函数的函数定义数据的函数规范文件。预处理器处理函数定义数据,以生成用于库函数的头信息和函数代码。在另一示例性方法中,预处理器基于函数定义数据生成用于插入库的自动记录框架。此外,插入库中的函数记录对相应库函数的调用。
【专利附图】

【附图说明】
[0006]通过示例例示了本发明,但本发明不限于附图,附图中类似的标号指示类似的元件。
[0007]图1 (现有技术)是在操作系统环境中执行的应用程序的框图。
[0008]图2 (现有技术)是在OSl环境中执行的应用程序的框图,该应用程序被设计成在0S2环境中执行。
[0009]图3是在一个操作系统环境中执行的、针对另一个操作系统环境编译的应用程序的框图。
[0010]图4是从函数规范文件生成用于执行应用程序的库的方法的一个实施例的流程图。
[0011]图5是从函数规范文件生成函数代码和头信息的方法的一个实施例的流程图。
[0012]图6是将来自应用程序的调用插入另一个库的插入库的框图。
[0013]图7是一个操作系统的用于插入应用程序的库调用的插入库的框图,其中该应用程序是针对另一个操作系统编译的。
[0014]图8是利用插入库将调用插入到库的方法的一个实施例的流程图。
[0015]图9是为应用程序创建对象的一个操作系统的库的框图,其中该应用程序是针对另一个操作系统编译的。
[0016]图10是记录对用于两个不同操作系统的操作系统库的调用的方法的一个实施例的流程图。
[0017]图11是例示了开发者工具包的一个实施例的框图,其中所述开发者工具包生成用于针对相同或不同操作系统编译的应用程序的库。
[0018]图12是例示了生成用于库的代码的函数规范文件预处理器的一个实施例的框图。
[0019]图13是例示了记录对插入库的调用的插入库的一个实施例的框图。
[0020]图14是适于实践本发明的运行环境的一个实施例的图。
[0021]图15是适于在图14的运行环境中使用的数据处理系统(例如,通用计算机系统)的一个实施例的图。
【具体实施方式】
[0022]在以下对本发明实施例的详细描述中,参考附图,附图中类似的标号指示类似的元件,而且其中通过例示的方式示出了本发明可以在其中实践的特定实施例。对这些实施例进行了足够详细的描述,以使本领域技术人员能够实践本发明,而且应当理解,其它实施例也可以使用,而且,在不背离本发明范围的情况下,可以进行逻辑、机械、电子、功能以及其它变化。因此,以下详细描述不应当理解为限制,本发明的范围只由所附权利要求书来限定。
[0023]在此描述从函数规范定义并生成库函数的方法与装置。图4例示了从函数规范文件生成库的方法的实施例。至少在某些实施例中,这些库可以称为插入库,它们用于支持针对第一 OS设计的应用程序在无需第一 OS执行副本的情况下在共同执行第二 OS的系统上操作/执行。此外,该方法还从函数规范文件生成头信息和函数代码。图5进一步例示了生成头信息和函数代码的方法的一个实施例,其中该方法对函数规范文件进行预处理。图8例示了利用从函数规范文件生成的插入库记录对函数库的调用的方法的一个实施例。图10例示了生成和比较来自在两个不同操作系统上执行的应用程序的日志的方法的一个实施例。图11至13例示了实现图4、5、8和/或10的应用程序和执行系统的一个实施例。
[0024]插入库概沭
[0025]图3是针对一个操作系统环境编译的、在另一个操作系统环境下执行的应用程序的框图。在图3中,基于0S2的应用程序316在不存在操作系统0S2的OSl环境300中执行。基于0S2的应用程序316在该环境下执行是因为OSl环境300使用了基于OSl的加载器(未示出),该加载器可以加载并执行应用程序,该应用程序是基于OSl或者0S2的应用程序。此外,如图1和2所述,基于0S2的应用程序316使用库310、312和/或314来执行通常由操作系统0S2(或者0S2环境)处理的、基于0S2的库函数调用。这些库插入在调用应用程序与这些库所插入的实际库之间,因此这些库310、312和314可以称为插入库。在一个实施例中,插入库310、312和314是将对在运行时库、DLL和/或0S2服务中的基于0S2的函数的调用转换成对在基于OSl的运行时库、DLL和/或基于OSl的服务中的函数的对应基于OSl的函数调用。例如并且作为例示,RTL插入库310将对运行时库中的基于0S2的函数的调用转换成对运行时库304中的函数的对应调用。RTL插入库310可以转换运行时库304中的一个、一些、许多或者全部函数调用。可选地,可以有多个RTL插入库310,其中每个库转换对一个或多个运行时库304的一个或多个函数调用。
[0026]在一个实施例中,插入库312将对用于0S2服务的函数的调用转换成支持OSl服务库316中的那些0S2服务的对应函数。在一个实施例中,有一个插入库312,用以转换对OSl服务库306的函数调用。可选地,有若干个库312,其中每个库转换对一个或多个OSl服务库306的一个或多个函数调用。
[0027]在一个实施例中,DLL插入库314将对DLL中所包含的函数的调用转换成支持用于应用程序316的DLL 308中对应函数的对应函数。DLL可以是针对0S1、0S2或者某个其它操作系统编译的DLL。在一个实施例中,DLL插入库314导出DLL 308中函数的符号。在一个实施例中,有一个DLL插入库314,用以转换对DLL库308中对应函数的函数调用。可选地,有多个DLL插入库314,其中每个库转换对一个或多个DLL库308的一个或多个函数调用。
[0028]插入库的生成
[0029]图4是从函数规范文件生成用于执行应用程序的插入或其它库的方法400的一个实施例的流程图。在一个实施例中,OSl环境300执行生成这些库的方法400,其中这些库包括但不限于运行时插入库310、0S1服务插入库312和/或DLL插入库314。在一个实施例中,软件开发者使用开发者工具包来开发应用程序、操作系统部件、库,等等。开发者工具包是开发者将用以开发软件的工具集合。工具包可以包括编辑器、编译器、链接器、文件预处理器,等等。这里在图11中描述结合了本发明实施例的开发者工具包的例子。
[0030]在图4中,在块402,方法400创建函数规范文件。在一个实施例中,函数规范文件包括函数定义数据,该函数定义数据向方法400指示生成软件以执行用于与操作系统0S2关联的库函数的函数调用转换。在一个实施例中,函数定义数据包括用于每个函数的、定义要转换的函数调用的数据。对于每个函数,函数定义数据可以包括函数样板(prototype)、关键字、库名称、可选参数和用于支持插入库生成的其它信息中的一个或多个。在一个实施例中,函数样板是定义函数名称、函数参数列表和返回值类型的本领域中已知的编程语言样板。所支持的编程语言样板的例子是C、C++、JAVA、PASCAL,等等。关键字是函数定义数据中由方法400用于修改由方法400生成的函数头和代码的词或者短语。在一个实施例中,关键字可以用于向方法400指示添加堆栈检查代码、符号导出代码,等等。方法400使用堆栈检查代码来加强由OSl或0S2所使用的特定堆栈变量管理策略。这种代码对于为基于一个操作系统或者为一个操作系统所写的应用程序生成在另一个操作系统中使用的库是有用的。对于何时将函数参数放到调用堆栈上和何时从堆栈拿掉这些参数,不同的操作系统可以具有不同的约定。使用堆栈检查指定了对所有堆栈管理要采取的公共动作。方法400使用符合导出关键字来生成支持函数名称和其它函数符号的导出的函数代码,以便使调用应用程序可以获得这些符号。下面将参照图5中的块508、510、512、514和532进一步描述函数定义。
[0031]此外,函数定义数据可以包括可选参数。在一个实施例中,这些参数可以包括修改函数模板生成的参数。方法400可以使用这些参数中的一些来帮助从一个函数定义生成多个函数。例如,方法400可以从处理不同类型字符串参数与返回值(例如,ASCI1、Unicode,等等)的单个函数定义生成多个字符串函数。下面将参照图5中的块512进一步描述函数调用模板生成。
[0032]在块404,方法400存储函数规范文件。方法400可以将这个文件存储在与执行方法400的处理器本地或者远程的计算机、其它存储设备或者其它数据处理系统中的硬盘、存储器、闪速存储器等中。
[0033]在块406,方法400预处理函数规范文件,以基于该函数规范文件中的函数定义生成函数代码和头信息。预处理是处理输入数据以便产生由另一个程序使用的输出的动作。在一个实施例中,方法400利用函数定义数据生成头信息。如本领域中已知的,头信息是函数、变量和/或其它标识符的前向声明(declaration)。这种信息可以存储在文件、存储器等中。编译器使用头信息来编译函数代码,以便产生库、可执行文件、应用程序,等等。
[0034]此外,方法400利用函数定义数据生成函数代码。在一个实施例中,函数代码是该函数的完整实现,这包括函数调用定义、参数定义、记录框架、调试框架及允许开发者无需进一步编辑就能编译和使用该函数代码的其它函数软件。在一个实施例中,这种生成的函数代码支持调用转换。函数调用转换是将从一个应用程序对函数的调用转换成对作为执行该应用程序的操作系统一部分的库中函数的调用。例如,在该实施例中,可以在系统库中生成与函数定义数据中具有相同名字和参数列表的函数。可选地,方法400可以生成作为函数部分实现的函数代码。在该实施例中,开发者编辑所生成的函数代码,来完全地实现该函数。在另一实施例中,方法400生成在运行时实例化函数定义中所述对象的代码。
[0035]在块408,方法400将函数代码和头信息编译到库中。例如,方法400可以生成插入运行时库310、0S1服务312和/或DLL 314,如参考图3所描述的。如本领域中已知的,方法400使用编译器来生成库。在块410,方法400使用这些插入库来执行应用程序。在一个实施例中,方法400利用用于编译应用程序的相同操作系统中的插入库来执行该应用程序。在该实施例中,插入库可以用于生成由执行应用程序所使用的系统库的具体追踪。可选地,方法400利用与用于编译应用程序的操作系统不同的操作系统中的插入库来执行应用程序。该不同的操作系统可以与用于生成插入库的操作系统是相同的类型,但是不同的版本。例如,执行应用程序的操作系统可以是由APPLE公司提供的MAC OS X 10.5.1操作系统,而该应用程序是针对MAC OS X 10.5.0编译的。可选地,该不同的操作系统可以是来自相同或者不同厂家的不同类型的操作系统。例如,执行应用程序的操作系统可以是MACINTOSH OS 10.5.1,而应用程序是针对由微软公司提供的WINDOWS XP操作系统编译的。不同 OS 的例子是但不限于 MAC OS 9、MAC OS X 10.x、WINDOWS 95、WINDOWS 98、WINDOWSXP、WINDOWS VISTA、本领域中已知的许多不同类型的LINUX和UNIX,等等。
[0036]在图4中,方法400使用函数规范文件来生成可以由一个或多个应用程序(例如,图3中的应用程序302)使用的插入库,以进行并记录对OS服务、运行时和/或DLL库中对应函数的调用。在这个图中,在块406,方法400预处理函数规范,来生成头信息和函数代码,以便支持插入库的生成。这种预处理功能一般是一组开发者工具中的一个。图5是从函数规范文件生成函数代码和头信息的方法500的一个实施例的流程图。方法500可以用于生成头信息和函数代码,来支持针对与方法500在其下运行的操作系统相同或不同的操作系统编译的应用程序的执行。在图5及这里其它图的讨论中,参考“C”编程语言给出了例子。本发明不限于这种编程语言,因为本领域技术人员将认识到,本发明可用于本领域中已知的其它编程语言使用,例如C++、JAVA、PASCAL,等等。
[0037]在图5中,在块502,方法500接收函数规范文件定义。在一个实施例中,通过从如图4的块404中所描述的存储在盘、存储器等中的函数规范文件检索定义,方法500接收函数规范文件定义。方法500可以接收一个或多个函数定义。
[0038]在块504至534,方法500执行处理循环,来为接收到的每个函数定义生成函数代码和头信息。在块506,方法500利用本领域中已知的一种解析策略来解析函数定义。通过解析,方法500确定与每个函数定义关联的函数样板、关键字、库名称、可选参数和/或其它信息。
[0039]在块508,方法500确定该函数定义是否是运行时库函数调用定义。在一个实施例中,方法500确定该函数定义的函数样板是否与所指定库中的函数是相同的样板。如果是,则在块516,方法500生成用于运行时定义的函数代码和头信息。例如,方法500接收函数定义:
[0040]stdcall void function2(void)Iibc ;
[0041]在这个定义中,stdcall是关键字,void是从对function2的调用返回的参数类型,function2 (void)是用于function2的函数样板,而Iibc是库的名称。在这个例子中,方法500检查function2是否在运行时库Iibc中定义为具有void的返回参数类型和自变量void。如果存在另一个具有相同样板的函数,则方法500为function2生成头信息和函数代码。
[0042]如上所述,在块516,方法500为在块508确定的运行时库函数调用定义生成头信息和函数代码。在一个实施例中并且利用以上的示例函数定义,方法500将针对function〗的头信息生成为:
[0043]void STDCALL pe_function2(void)_force_align_arg_pointer ;
[0044]这个头信息包括返回类型(“void””)、函数名称(“pe_fUnCtion2”)和函数参数列表(“void”)。此外,方法500还向头信息添加了 STDCALL和“ _force_align_arg_pointer”参数。STDCALL参数向编译器指示使用stdcall调用约定。在这种调用约定中,被调用者负责在返回到调用者之前清空堆栈。“_force_align_arg_pointer”参数用于堆栈检查。在一个实施例中,编译器使用“_force_align_arg_pointer”参数在函数的开始处生成对准堆栈的代码。在该实施例中,方法500将函数从“function2”重命名为“pe_function〗”。这样做是为了避免命名空间冲突,因为Iibc已经有一个名称为“function2”且被函数pe_function2调用的函数。在另一实施例中,方法500不重命名function〗。可选地,方法500生成适于开发者所使用的编程语言的头信息。
[0045]此外,方法500为在函数定义中定义的插入运行时库函数生成函数信息。在一个实施例中,并且使用以上的示例函数定义,方法500生成具有包括以下内容的结构的函数代码:
[0046]函数序言
【权利要求】
1.一种计算机化的方法,包括: 存储函数规范文件,其中该函数规范文件能够在利用软件进行处理时提供其它软件,以方便应用程序在第二操作系统中的执行,而不需要第一操作系统的存在,而且其中该应用程序是针对第一操作系统编译的。
2.如权利要求1所述的计算机化的方法,其中第一操作系统是与第二操作系统不同类型的操作系统。
3.如权利要求1所述的计算机化的方法,其中第一操作系统和第二操作系统是相同操作系统的不同版本。
4.如权利要求1所述的计算机化的方法,其中第一操作系统和第二操作系统是相同的操作系统。
5.如权利要求1所述的计算机化的方法,其中所述其它软件是插入库,该插入库包括调用运行时库、动态链接库和操作系统服务中的至少一个中的对应函数的函数。
6.如权利要求1所述的计算机化的方法,其中所述函数规范文件包括函数定义数据,该函数定义数据向处理软件指示生成如下函数,即该函数针对与该函数相对应的库函数执行函数调用转换。
7.如权利要求6所述的计算机化的方法,其中所述函数定义数据还包括函数模板调用定义,并进一步向处理软件指示根据函数模板调用定义执行多于一个函数生成。
8.如权利要求1所述的计算机化的方法,其中所述函数规范文件包括函数定义数据,该函数定义数据向处理软件指示生成在函数定义数据中定义的对象。
9.一种具有可执行指令 的机器可读介质,所述可执行指令使处理器执行如下方法,该方法包括: 存储函数规范文件,其中该函数规范文件能够在利用软件进行处理时提供其它软件,以方便应用程序在第二操作系统中的执行,而不需要第一操作系统的存在,而且其中该应用程序是针对第一操作系统编译的。
10.如权利要求9所述的机器可读介质,其中第一操作系统是与第二操作系统不同类型的操作系统。
11.如权利要求9所述的机器可读介质,其中第一操作系统和第二操作系统是相同操作系统的不同版本。
12.如权利要求9所述的机器可读介质,其中第一操作系统和第二操作系统是相同的操作系统。
13.如权利要求9所述的机器可读介质,其中所述其它软件是插入库,该插入库包括调用运行时库、动态链接库和操作系统服务中的至少一个中的对应函数的函数。
14.如权利要求9所述的机器可读介质,其中所述函数规范文件包括函数定义数据,该函数定义数据向处理软件指示生成如下函数,即该函数针对与该函数相对应的库函数执行函数调用转换。
15.如权利要求14所述的机器可读介质,其中所述函数定义数据还包括函数模板调用定义,并进一步向处理软件指示根据函数模板调用定义执行多于一个函数生成。
16.如权利要求9所述的机器可读介质,其中所述函数规范文件包括函数定义数据,该函数定义数据向处理软件指示生成在函数定义数据中定义的对象。
17.一种装置,包括: 用于存储函数规范文件的装置,其中该函数规范文件能够在利用软件进行处理时提供其它软件,以方便应用程序在第二操作系统中的执行,而不需要第一操作系统的存在,而且其中该应用程序是针对第一操作系统编译的;及用于检索该函数规范文件的装置。
18.如权利要求17所述的装置,其中第一操作系统是与第二操作系统不同类型的操作系统。
19.如权利要求17所述的装置,其中第一操作系统和第二操作系统是相同操作系统的不同版本。
20.如权利要求17所述的装置,其中第一操作系统和第二操作系统是相同的操作系统。
21.如权利要求17所述的装置,其中所述其它软件是插入库,该插入库包括调用运行时库、动态链接库和操作系统服务中的至少一个中的对应函数的函数。
22.如权利要求17所述的装置,其中所述函数规范文件包括函数定义数据,该函数定义数据向处理软件指示生成如下函数,即该函数针对与该函数相对应的库函数执行函数调用转换。
23.如权利要求22所述的装置,其中所述函数定义数据还包括函数模板调用定义,并进一步向处理软件指示根据函数模板调用定义执行多于一个函数生成。
24.如权利要求17所述的装置,其中所述函数规范文件包括函数定义数据,该函数定义数据向处理软件指示生成在函数定义数据中定义的对象。
25.—种系统,包括: 处理器; 通过总线耦接到所述处理器的存储器;及 由所述处理器从所述存储器执行的处理,该处理使所述处理器存储函数规范文件,其中该函数规范文件能够在利用软件进行处理时提供其它软件,以方便应用程序在第二操作系统中的执行,而不需要第一操作系统的存在,而且其中该应用程序是针对第一操作系统编译的。
26.如权利要求25所述的系统,其中第一操作系统是与第二操作系统不同类型的操作系统。
27.如权利要求25所述的系统,其中第一操作系统和第二操作系统是相同操作系统的不同版本。
28.如权利要求25所述的系统,其中第一操作系统和第二操作系统是相同的操作系统。
29.如权利要求25所述的系统,其中所述其它软件是插入库,该插入库包括调用运行时库、动态链接库和操作系统服务中的至少一个中的对应函数的函数。
30.如权利要求25所述的系统,其中所述函数规范文件包括函数定义数据,该函数定义数据向处理软件指示生成如下函数,即该函数针对与该函数相对应的库函数执行函数调用转换。
31.如权利要求30所述的系统,其中所述函数定义数据还包括函数模板调用定义,并进一步向处理软件指示根据函数模板调用定义执行多于一个函数生成。
32.如权利要求25所述的系统,其中所述函数规范文件包括函数定义数据,该函数定义数据向处理软件指示生成在函数定义数据中定义的对象。
33.一种计算机化的方法,包括: 根据函数规范文件生成包括多个函数的库,其中该库能够方便应用程序在第二操作系统中的执行,而不需要第一操作系统的存在,而且其中该应用程序是针对第一操作系统编译的。
34.如权利要求33所述的计算机化的方法,其中第一操作系统是与第二操作系统不同类型的操作系统。
35.如权利要求33所述的计算机化的方法,其中第一操作系统和第二操作系统是相同操作系统的不同版本。
36.如权利要求33所述的计算机化的方法,其中第一操作系统和第二操作系统是相同的操作系统。
37.如权利要求33所述的计算机化的方法,其中所述多个函数中的一个函数调用运行时库、动态链接库和操作系统服务中的至少一个中的对应函数。
38.如权利要求33所述的计算机化的方法,其中所述函数规范文件包括函数定义数据,该函数定义数据向处理软件指示生成所述多个函数中的一个函数。
39.如权利要求38所述的计算机化的方法,其中所述函数定义数据还包括函数模板调用定义,并进一步向处理软件指示根据函数模板调用定义执行多于一个函数生成。
40.如权利要求33 所述的计算机化的方法,其中所述函数规范文件包括函数定义数据,该函数定义数据向处理软件指示生成在函数定义数据中定义的对象。
41.一种具有可执行指令的机器可读介质,该可执行指令使处理器执行如下方法,该方法包括: 根据函数规范文件生成包括多个函数的库,其中该库能够方便应用程序在第二操作系统中的执行,而不需要第一操作系统的存在,而且其中该应用程序是针对第一操作系统编译的。
42.如权利要求41所述的机器可读介质,其中第一操作系统是与第二操作系统不同类型的操作系统。
43.如权利要求41所述的机器可读介质,其中第一操作系统和第二操作系统是相同操作系统的不同版本。
44.如权利要求41所述的机器可读介质,其中第一操作系统和第二操作系统是相同的操作系统。
45.如权利要求41所述的机器可读介质,其中所述多个函数中的一个函数调用运行时库、动态链接库和操作系统服务中的至少一个中的对应函数。
46.如权利要求41所述的机器可读介质,其中所述函数规范文件包括函数定义数据,该函数定义数据向处理软件指示生成所述多个函数中的一个函数。
47.如权利要求46所述的机器可读介质,其中所述函数定义数据还包括函数模板调用定义,并进一步向处理软件指示根据函数模板调用定义执行多于一个函数生成。
48.如权利要求41所述的机器可读介质,其中所述函数规范文件包括函数定义数据,该函数定义数据向处理软件指示生成在函数定义数据中定义的对象。
49.一种装置,包括: 用于根据函数规范文件生成包括多个函数的库的装置,其中该库能够方便应用程序在第二操作系统中的执行,而不需要第一操作系统的存在,而且其中该应用程序是针对第一操作系统编译的;及 用于存储所述库的装置。
50.如权利要求49所述的装置,其中第一操作系统是与第二操作系统不同类型的操作系统。
51.如权利要求49所述的装置,其中第一操作系统和第二操作系统是相同操作系统的不同版本。
52.如权利要求49所述的装置,其中第一操作系统和第二操作系统是相同的操作系统。
53.如权利要求49所述的装置,其中所述多个函数中的一个函数调用运行时库、动态链接库和操作系统 服务中的至少一个中的对应函数。
54.如权利要求49所述的装置,其中所述函数规范文件包括函数定义数据,该函数定义数据向处理软件指示生成所述多个函数中的一个函数。
55.如权利要求54所述的装置,其中所述函数定义数据还包括函数模板调用定义,并进一步向处理软件指示根据函数模板调用定义执行多于一个函数生成。
56.如权利要求49所述的装置,其中所述函数规范文件包括函数定义数据,该函数定义数据向处理软件指示生成在函数定义数据中定义的对象。
57.—种系统,包括: 处理器; 通过总线耦接到所述处理器的存储器;及 由所述处理器从所述存储器执行的处理,该处理使所述处理器根据函数规范文件生成包括多个函数的库,其中该库能够方便应用程序在第二操作系统中的执行,而不需要第一操作系统的存在,而且其中该应用程序是针对第一操作系统编译的。
58.如权利要求57所述的系统,其中第一操作系统是与第二操作系统不同类型的操作系统。
59.如权利要求57所述的系统,其中第一操作系统和第二操作系统是相同操作系统的不同版本。
60.如权利要求57所述的系统,其中第一操作系统和第二操作系统是相同的操作系统。
61.如权利要求57所述的系统,其中所述多个函数中的一个函数调用运行时库、动态链接库和操作系统服务中的至少一个中的对应函数。
62.如权利要求57所述的系统,其中所述函数规范文件包括函数定义数据,该函数定义数据向处理软件指示生成所述多个函数中的一个函数。
63.如权利要求62所述的系统,其中所述函数定义数据还包括函数模板调用定义,并进一步向处理软件指示根据函数模板调用定义执行多于一个函数生成。
64.如权利要求57所述的系统,其中所述函数规范文件包括函数定义数据,该函数定义数据向处理软件指示生成在函数定义数据中定义的对象。
65.—种计算机化的方法,包括: 接收函数规范文件,其中该函数规范文件包括用于第一库函数的函数定义数据; 处理所述函数定义数据,以生成用于所述第一库函数的头信息和函数代码 '及 基于所述函数定义数据,针对所述第一库函数生成自动记录框架。
66.如权利要求65所述的计算机化的方法,其中所述生成函数代码还包括:生成执行对相应运行时库函数的函数调用转换的函数代码。
67.如权利要求65所述的计算机化的方法,其中所述生成函数代码还包括:生成支持动态链接库的符号导出的代码。
68.如权利要求65所述的计算机化的方法,其中所述生成函数代码还包括:生成支持将函数调用从第一操作系统库重定向到第二操作系统库的代码。
69.如权利要求68所述的计算机化的方法,其中第一操作系统是与第二操作系统不同类型的操作系统。
70.如权利要求68所述的计算机化的方法,其中第一操作系统和第二操作系统是相同操作系统的不同版本。
71.如权利要求68所述的计算机化的方法,其中第一操作系统和第二操作系统是相同的操作系统。
72.如权利要求65所述的计算机化的方法,其中所述生成函数代码还包括:根据包括在函数定义数据中的函数模板调用定义来生成多于一个的函数。
73.如权利要求65所述的计算机化的方法,还包括: 基于所述函数定义数据,针对所述库函数生成自动调试框架。
74.一种具有可执行指令的机器可读介质,所述可执行指令使处理器执行如下方法,所述方法包括: 接收函数规范文件,其中该函数规范文件包括用于第一库函数的函数定义数据; 处理所述函数定义数据,以生成用于所述第一库函数的头信息和函数代码;及 基于所述函数定义数据,针对所述第一库函数生成自动记录框架。
75.如权利要求74所述的机器可读介质,其中所述生成函数代码还包括:生成执行对相应运行时库函数的函数调用转换的函数代码。
76.如权利要求74所述的机器可读介质,其中所述生成函数代码还包括:生成支持动态链接库的符号导出的代码。
77.如权利要求74所述的机器可读介质,其中所述生成函数代码还包括:生成支持将函数调用从第一操作系统库重定向到第二操作系统库的代码。
78.如权利要求77所述的机器可读介质,其中第一操作系统是与第二操作系统不同类型的操作系统。
79.如权利要求77所述的机器可读介质,其中第一操作系统和第二操作系统是相同操作系统的不同版本。
80.如权利要求77所述的机器可读介质,其中第一操作系统和第二操作系统是相同的操作系统。
81.如权利要求74所述的机器可读介质,其中所述生成函数代码还包括:根据包括在函数定义数据中的函数模板调用定义生成多于一个的函数。
82.如权利要求74所述的机器可读介质,其中所述方法还包括: 基于所述函数定义数据,针对所述库函数生成自动调试框架。
83.一种装置,包括: 用于接收函数规范文件的装置,其中该函数规范文件包括用于第一库函数的函数定义数据; 用于处理所述函数定义数据,以生成用于所述第一库函数的头信息和函数代码的装置;及 用于基于所述函数定义数据,针对所述第一库函数生成自动记录框架的装置。
84.如权利要求83所述的装置,其中所述用于生成函数代码的装置还包括:用于生成执行对相应运行时库函数的函数调用转换的函数代码的装置。
85.如权利要求83所述的装置,其中所述用于生成函数代码的装置还包括:用于生成支持动态链接库的符号导出的代码的装置。
86.如权利要求83所述的装置,其中所述用于生成函数代码的装置还包括:用于生成支持将函数调用从第一操作系统库重定向到第二操作系统库的代码的装置。
87.如权利要求83所述的装置,其中所述用于生成函数代码的装置还包括:用于根据包括在函数定义数据中的函数模板调用定义生成多于一个的函数的装置。
88.如权利要求83所述的装置,还包括: 用于基于所述函数定义数据,针对所述库函数生成自动调试框架的装置。
89.—种系统,包括: 处理器; 通过总线耦接到所述处理器的存储器;及 由所述处理器从所述存储器执行的处理,该处理使所述处理器接收函数规范文件,其中该函数规范文件包括用于第一库函数的函数定义数据,处理所述函数定义数据以生成用于所述第一库函数的头信息和函数代码,及基于所述函数定义数据,针对所述第一库函数生成自动记录框架。
90.如权利要求89所述的系统,其中函数代码的生成还使所述处理器生成执行对相应运行时库函数的函数调用转换的函数代码。
91.如权利要求89所述的系统,其中函数代码的生成还使所述处理器生成支持动态链接库的符号导出的代码。
92.如权利要求89所述的系统,其中函数代码的生成还使所述处理器生成支持将函数调用从第一操作系统库重定向到第二操作系统库的代码。
93.如权利要求89所述的系统,其中函数代码的生成还使所述处理器根据包括在函数定义数据中的函数模板调用定义生成多于一个的函数。
94.如权利要求89所述的系统,其中所述处理还使所述处理器基于所述函数定义数据生成用于所述库函数的自动调试框架。
95.一种计算机化的方法,包括: 从应用程序接收对第一库函数的调用; 将第一库函数调用重定向到第二库函数;利用所述第二库函数记录关于所述第一库函数调用的信息,其中所述第二库函数是根据函数规范文件中的函数定义数据生成的;及 利用所述第二库函数调用所述第一库函数,其中所述第二库函数对应于所述第一库函数。
96.如权利要求95所述的计算机化的方法,还包括: 从所述第一库函数接收返回值; 利用所述第二库函数记录所述返回值;及 将所述返回值传递到调用应用程序。
97.如权利要求95所述的计算机化的方法,还包括: 利用所述第一库函数创建对象;及 通过所述第二库函数将所述对象传递到调用应用程序。
98.如权利要求97所述的计算机化的方法,其中所述对象是组件对象模型对象。
99.如权利要求95所述的计算机化的方法,其中所述第一库函数与第一操作系统相关联,而所述第二库函数与第二操作系统相关联,而且其中第一操作系统是与第二操作系统不同类型的操作系统。
100.如权利要求95所述的计算机化的方法,其中所述第一库函数与第一操作系统相关联,而所述第二库函数与第二操作系统相关联,而且其中第一操作系统与第二操作系统是相同操作系统的不同版本。
101.如权利要求95所述的计算机化的方法,其中所述记录包括: 将记录信息存储到记录仓库中。
102.如权利要求95所述的计算机化的方法,其中记录信息包括第一库函数名称、由调用应用程序进行调用的时间戳、传递到第一库函数的参数的字符串表示和从第一库函数传递回的变量的字符串表示中的至少一个。
103.—种计算机化的方法,包括: 从应用程序接收对第一库函数的调用; 将第一库函数调用重定向到第二库函数; 利用所述第二库函数记录与第一库函数调用相关联的信息,其中所述第二库函数是根据函数规范文件中的函数定义数据生成的;及 利用所述第二库函数调用所述第一库函数,其中所述第二库函数对应于所述第一库函数。
104.如权利要求103所述的机器可读介质,其中该方法还包括: 从所述第一库函数接收返回值; 利用所述第二库函数记录所述返回值;及 将所述返回值传递到调用应用程序。
105.如权利要求103所述的机器可读介质,其中该方法还包括: 利用所述第一库函数创建对象;及 通过所述第二库函数将所述对象传递到调用应用程序。
106.如权利要求105所述的机器可读介质,其中所述对象是组件对象模型对象。
107.如权利要求103所述的机器可读介质,其中所述第一库函数与第一操作系统相关联,而所述第二库函数与第二操作系统相关联,而且其中第一操作系统是与第二操作系统不同类型的操作系统。
108.如权利要求103所述的机器可读介质,其中所述第一库函数与第一操作系统相关联,而所述第二库函数与第二操作系统相关联,而且其中第一操作系统与第二操作系统是相同操作系统的不同版本。
109.如权利要求103所述的机器可读介质,其中所述记录包括: 将记录信息存储到记录仓库中。
110.如权利要求103所述的机器可读介质,其中记录信息包括第一库函数名称、由调用应用程序进行调用的时间戳、传递到第一库函数的参数的字符串表示和从第一库函数传递回的参数的字符串表示中的至少一个。
111.一种装置,包括: 用于从应用程序接收对第一库函数的调用的装置; 用于将第一库函数调用重定向到第二库函数的装置; 用于利用所述第二库 函数记录与第一库函数调用相关联的信息的装置,其中所述第二库函数是根据函数规范文件中的函数定义数据生成的;及 用于利用所述第二库函数调用所述第一库函数的装置,其中所述第二库函数对应于所述第一库函数。
112.如权利要求111所述的装置,还包括: 用于从所述第一库函数接收返回值的装置; 用于利用所述第二库函数记录所述返回值的装置;及 用于将所述返回值传递到调用应用程序的装置。
113.如权利要求111所述的装置,还包括: 用于利用所述第一库函数创建对象的装置;及 用于通过所述第二库函数将所述对象传递到调用应用程序的装置。
114.如权利要求112所述的装置,其中所述对象是组件对象模型对象。
115.如权利要求111所述的装置,其中所述记录包括: 用于将记录信息存储到记录仓库中的装置。
116.如权利要求111所述的装置,其中记录信息包括第一库函数名称、由调用应用程序进行调用的时间戳、传递到第一库函数的参数的字符串表示和从第一库函数传递回的参数的字符串表示中的至少一个。
117.一种系统,包括: 处理器; 通过总线耦接到所述处理器的存储器;及 由所述处理器从所述存储器执行的处理,该处理使所述处理器从应用程序接收对第一库函数的调用,将第一库函数调用重定向到第二库函数,利用所述第二库函数记录与第一库函数调用相关联的信息,其中所述第二库函数是从函数规范文件中的函数定义数据生成的,及利用所述第二库函数调用所述第一库函数,其中所述第二库函数对应于所述第一库函数。
118.如权利要求117所述的系统,其中所述处理还使所述处理器从所述第一库函数接收返回值,利用所述第二库函数记录所述返回值,及将所述返回值传递到调用应用程序。
119.如权利要求117所述的系统,其中所述处理还使所述处理器利用所述第一库函数创建对象,及通过所述第二库函数将所述对象传递到调用应用程序。
120.如权利要求119所述的系统,其中所述对象是组件对象模型对象。
121.如权利要求117所述的系统,其中所述处理还使所述处理器将记录信息存储到记录仓库中。
122.如权利要求117所述的系统,其中记录信息包括第一库函数名称、由调用应用程序进行调用的时间戳、传递到第一库函数的参数的字符串表示和从第一库函数传递回的参数的字符串表示中的至少一个。
123.—种计算机化的方法,包括: 在第二操作系统环境中执行针对第二操作系统编译的应用程序; 利用第二库函数将对与所述第二操作系统相关联的第一库函数的第二多个调用记录到第二日志中; 在第一操作系统环境中执行针对所述第二操作系统编译的应用程序; 利用第三库函数将对与所述第二操作系统相关联的第一库函数的第一多个调用记录到第一日志中 '及 比较第一日志与第二日志。
124.如权利要求123 所述的计算机化的方法,其中第二库函数和第三库函数是从相同的函数定义数据生成的。
125.如权利要求123所述的计算机化的方法,其中所述比较第一日志与第二日志还包括: 确定第一日志和第二日志在哪里有分歧;及 基于第一日志和第二日志的分歧,确定应用程序在第一操作系统环境和第二操作系统环境的一个中执行的错误。
126.如权利要求123所述的计算机化的方法,其中应用程序在第一操作系统环境和第二操作系统环境中的执行遵循相同的执行顺序。
127.如权利要求123所述的计算机化的方法,其中记录针对第一多个调用的调用包括将信息记录到记录仓库,其中记录信息包括第一库函数名称、由调用应用程序进行调用的时间戳、传递到第一库函数的参数的字符串表示和从第一库函数传递回的参数的字符串表示中的至少一个。
128.—种具有可执行指令的机器可读介质,所述指令使处理器执行如下方法,该方法包括: 在第二操作系统环境中执行针对第二操作系统编译的应用程序; 利用第二库函数将对与所述第二操作系统相关联的第一库函数的第二多个调用记录到第二日志中; 在第一操作系统环境中执行针对所述第二操作系统编译的应用程序; 利用第三库函数将对与所述第二操作系统相关联的第一库函数的第一多个调用记录到第一日志中;及 比较第一日志与第二日志。
129.如权利要求128所述的机器可读介质,其中第二库函数和第三库函数是从相同的函数定义数据生成的。
130.如权利要求128所述的机器可读介质,其中所述比较第一日志与第二日志还包括: 确定第一日志和第二日志在哪里有分歧;及 基于第一日志和第二日志的分歧,确定应用程序在第一操作系统环境和第二操作系统环境的一个中执行的错误。
131.如权利要求128所述的机器可读介质,其中应用程序在第一操作系统环境和第二操作系统环境中的执行遵循相同的执行顺序。
132.如权利要求128所述的机器可读介质,其中记录针对第一多个调用的调用包括将信息记录到记录仓库,其中记录信息包括第一库函数名称、由调用应用程序进行调用的时间戳、传递到第一库函数的参数的字符串表示和从第一库函数传递回的参数的字符串表示中的至少一个。
133.—种装置,包括: 用于在第二操作系统环境中执行针对第二操作系统编译的应用程序的装置; 用于利用第二库函数将对与所述第二操作系统相关联的第一库函数的第二多个调用记录到第二日志中的装置; 用于在第一操作系统环境中执行针对所述第二操作系统编译的应用程序的装置; 用于利用第三库函数将对与所述第二操作系统相关联的第一库函数的第一多个调用记录到第一日志中的装置;及 用于比较第一日志与第二日志的装置。
134.如权利要求133所述的装置,其中第二库函数和第三库函数是从相同的函数定义数据生成的。
135.如权利要求133所述的装置,其中所述比较第一日志与第二日志还包括: 用于确定第一日志和第二日志在哪里有分歧的装置;及 用于基于第一日志和第二日志的分歧,确定应用程序在第一操作系统环境和第二操作系统环境的一个中执行的错误的装置。
136.如权利要求133所述的装置,其中应用程序在第一操作系统环境和第二操作系统环境中的执行遵循相同的执行顺序。
137.如权利要求133所述的装置,其中记录针对第一多个调用的调用包括将信息记录到记录仓库,其中记录信息包括第一库函数名称、由调用应用程序进行调用的时间戳、传递到第一库函数的参数的字符串表示和从第一库函数传递回的参数的字符串表示中的至少一个。
138.—种系统,包括: 处理器; 通过总线耦接到所述处理器的存储器;及 由所述处理器从所述存储器执行的处理,该处理使所述处理器在第二操作系统环境中执行针对第二操作系统编译的应用程序,利用第二库函数将对与所述第二操作系统相关联的第一库函数的第二多个调用记录到第二日志中,在第一操作系统环境中执行针对所述第二操作系统编译的应用程序,利用第三库函数将对与所述第二操作系统相关联的第一库函数的第一多个调用记录到第一日志中,及比较第一日志与第二日志。
139.如权利要求138所述的系统,其中第二库函数和第三库函数是从相同的函数定义数据生成的。
140.如权利要求138所述的系统,其中所述比较第一日志与第二日志还包括所述处理使所述处理器确定第一日志和第二日志在哪里有分歧,及基于第一日志和第二日志的分歧,确定应用程序在第一操作系统环境和第二操作系统环境的一个中执行的错误。
141.如权利要求138所述的系统,其中应用程序在第一操作系统环境和第二操作系统环境中的执行遵循相同的执行顺序。
142.如权利要求138所述的系统,其中记录针对第一多个调用的调用包括将信息记录到记录仓库,其中记录信息包括第一库函数名称、由调用应用程序进行调用的时间戳、传递到第一库函数的参数的字符串表示和从第一库函数传递回的参数的字符串表示中的至少一个。
【文档编号】G06F9/455GK103443768SQ200980135244
【公开日】2013年12月11日 申请日期:2009年7月9日 优先权日:2008年7月16日
【发明者】J·沙法尔, R·米斯拉 申请人:苹果公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1