首页 / 专利库 / 软件 / 操作系统 / 用于用户模式崩溃报告的框架

用于用户模式崩溃报告的框架

阅读:1046发布:2020-06-22

专利汇可以提供用于用户模式崩溃报告的框架专利检索,专利查询,专利分析的服务。并且本 发明 提供了用于当应用崩溃时生成崩溃报告的用户模式崩溃报告系统。用户模式崩溃报告系统安装崩溃处理程序以用于当应用崩溃时在与应用相同的 进程 中执行。当应用崩溃时,崩溃处理程序识别在崩溃的时刻执行的进程的受害线程。崩溃处理程序然后遍历受害线程的调用栈来识别用于从应用的调用的函数返回的返回地址。崩溃处理程序识别与返回地址相对应的模 块 内的偏移,并且使用识别出的偏移来创建函数的调用链。崩溃处理程序然后基于识别出的调用链来生成崩溃报告。,下面是用于用户模式崩溃报告的框架专利的具体信息内容。

1.一种存储计算机可执行指令的计算机可读存储介质,所述计算机可执行指令用于控制计算设备当应用崩溃时生成崩溃报告,所述应用被组织为具有函数的模,所述计算机可执行指令包括以下的指令:
安装崩溃处理程序,以用于当所述应用崩溃时在与所述应用相同的进程中执行;并且在所述应用崩溃之后,受在所述应用的所述进程中执行的所述崩溃处理程序的控制,识别在崩溃的时刻正在执行的所述进程的受害线程;
遍历所述受害线程的调用栈来识别出用于从所述应用的调用的函数返回的返回地址;
识别与所述返回地址相对应的所述模块内的偏移;
使用识别的偏移来识别函数的调用链;以及
基于识别的调用链来创建崩溃报告。
2.如权利要求1所述的计算机可读存储介质,其中,所述计算设备在基于iOS的操作系统的控制下执行。
3.如权利要求1所述的计算机可读存储介质,其中,所述应用和所述崩溃处理程序在所述进程内以用户权限模式执行。
4.如权利要求1所述的计算机可读存储介质,其中,所述计算设备在具有基于Mach的内核和基于BSD的内核的操作系统的控制下执行,并且多个崩溃处理程序被安装来处理当所述应用崩溃时生成的Mach异常和BSD信号
5.如权利要求1所述的计算机可读存储介质,其中,所述计算机可执行指令还包括如下指令:基于对所述调用链的分析来识别对于所述崩溃负责的函数。
6.如权利要求5所述的计算机可读存储介质,其中,被指定为免于负责的函数被排除于对崩溃负责。
7.一种用于当在沙盒环境中执行的应用崩溃时,生成崩溃报告的计算系统,所述应用被组织为具有函数的模块,所述计算系统包括:
存储以下的计算机可执行指令的计算机可读存储介质:
所述模块;以及
崩溃处理程序,所述崩溃处理程序用于当应用崩溃时,在与所述应用相同的进程中执行,所述崩溃处理程序包括:
适应于识别所述进程的受害线程的组件,所述受害线程是在崩溃的时刻正在执行的所述进程的线程;
适应于取回指向所述受害线程的调用栈的栈指针并且取回指向所述崩溃的时刻执行的指令的指令指针的组件;
适应于遍历所述受害线程的调用栈来识别调用的函数的返回地址的组件,所述返回地址指示调用函数内的返回位置
适应于识别所述模块内的与所述返回地址和所述指令指针相对应的偏移的组件;
适应于使用识别出的偏移来识别函数的调用链的组件;
适应于识别对所述崩溃负责的函数的组件,所述对所述崩溃负责的函数是在所述崩溃之前调用的不是由免于负责的函数表所指示的免于对崩溃负责的最后的函数;
适应于创建崩溃报告的组件,所述崩溃报告识别所述对所述崩溃负责的函数以及用于所述应用的执行的应用活动日志的会话标识;以及
适应于当上传标准满足时将所述崩溃报告上传到崩溃报告服务器的组件;以及适应于执行存储在所述计算机可读存储介质中的所述计算机可执行指令的处理器。
8.如权利要求7所述的计算系统,其中,所述崩溃处理程序还包括适应于使用与所述应用相关联的符号表信息来识别负责的所述函数的名称的组件。
9.如权利要求7所述的计算系统,其中,所述计算系统适应于在具有基于Mach的内核和基于BSD的内核的操作系统的控制下执行,并且多个崩溃处理程序被安装来处理当所述应用崩溃时生成的一个或多个Mach异常和BSD信号。

说明书全文

用于用户模式崩溃报告的框架

背景技术

[0001] 虽然商业可用的计算机程序通常是非常可靠的,但是程序能够遇到导致故障的问题,所述故障使程序停止运行(functioning)。这样的故障被称作“崩溃”。可以使程序崩溃的问题包括硬件错误(例如,有缺陷存储器位置)、程序中的逻辑错误(例如,使用无效的存储器地址)、不兼容的组件(例如,链接到过时的函数)等。当程序崩溃时,由于产生硬件或软件异常,操作系统通常取得控制权。硬件异常可能出于各种原因而产生,包括试图用零做除数、使用无效的存储器地址、无效指令的尝试执行等等。程序在其上执行的处理器的指令集架构定义了不同类型的异常,并且其中当产生异常的每一个类型时,控制被转移。程序或操作系统通常针对硬件异常的每一个类型安装硬件异常处理程序。相反,软件异常由软件检测到异常情况而产生。例如,当函数经过无效参数时、当C++异常没有被捕捉到等等,软件异常可能产生。程序或操作系统通常针对每一个类型的软件异常安装软件异常处理程序。当产生异常时,针对该类型的异常的异常处理程序被调用来处理异常。每一个异常处理程序基于异常的严重程度来判定程序是否继续其执行或者终止其执行,导致崩溃。
[0002] 当程序崩溃时,操作系统通常收集关于崩溃的信息,基于所收集的信息生成崩溃报告,并且使崩溃报告对于崩溃的程序的开发者而言可用。当由操作系统安装的崩溃处理程序被调用时,崩溃处理程序通常以处理器的监督权限模式(例如,监督模式或内核模式)来执行。因为崩溃处理程序以监督权限模式来执行,所以崩溃处理程序可以访问操作系统的所有数据结构以及崩溃的程序的数据结构。访问这些数据结构允许崩溃处理程序收集它认为适用于崩溃报告的任何信息。一旦生成崩溃报告,则可以使崩溃报告能够对于开发者可用。例如,崩溃报告可以被传送到崩溃报告服务器,在该崩溃报告服务器中使得崩溃报告对于开发者而言是可用的。
[0003] 虽然由操作系统提供的崩溃报告提供了有价值的信息来帮助开发者确定程序的崩溃的原因,但是崩溃报告中的信息通常不针对程序本身或者开发者的需要而被专定制。此外,崩溃报告服务器可以提供通用工具以由所有类型的程序的开发者使用。结果,程序的开发者可能不具有帮助确定崩溃的原因的可用的程序特定的工具。同样,操作系统可以控制发送什么崩溃报告以及发送的时机。开发者可能想要这样的控制来满足开发者的需要。发明内容
[0004] 提供了用于当应用崩溃时生成崩溃报告的用户模式崩溃报告系统。用户模式崩溃报告系统安装了崩溃处理程序用于当应用崩溃时在与应用相同的进程中执行。当应用崩溃时,崩溃处理程序识别在崩溃时刻执行的进程的受害线程。崩溃处理程序然后遍历(walk)受害线程的调用堆栈以识别用于从应用的调用函数返回的返回地址。崩溃处理程序识别加载的模内的与返回地址相对应的偏移,并且使用识别的偏移来创建函数的调用链。崩溃处理程序然后基于识别的调用链来生成崩溃报告。附图说明
[0005] 图1是示出了在一些实施例中的应用在其中执行的执行环境框图
[0006] 图2是示出了在一些实施例中的用户模式崩溃报告系统的模块表的框图。
[0007] 图3是示出了在一些实施例中的模块的布局的框图。
[0008] 图4是示出了在一些实施例中的调用栈的布局的框图。
[0009] 图5是示出了在一些实施例中的用户模式崩溃报告系统的组件的框图。
[0010] 图6是示出了在一些实施例中的崩溃处理程序的处理的流程图
[0011] 图7是示出了在一些实施例中的崩溃报告系统的调用链组件的添加函数的处理的流程图。
[0012] 图8是示出了在一些实施例中的崩溃报告系统的查找责任(blamed)函数组件的处理的流程图。
[0013] 图9是示出了在一些实施例中的用户模式崩溃报告系统的发送崩溃报告组件的处理的流程图。
[0014] 图10是示出了在一些实施例中的用户模式崩溃报告系统的添加模块调用栈组件的处理的流程图。

具体实施方式

[0015] 提供了一种用于当应用崩溃时生成用户模式崩溃报告的方法和系统。在一些实施例中,用户模式崩溃报告系统在与崩溃的应用相同的进程中(即,进程内)执行崩溃处理程序,并且基于进程可访问的信息来生成崩溃报告。用户模式崩溃报告系统然后控制崩溃报告到崩溃报告服务器的发送。用户模式崩溃报告系统安装崩溃处理程序来以用户权限模式在与崩溃的应用相同的进程中执行。用户模式崩溃报告系统安装特定于下面的操作系统和编程环境的崩溃处理程序。例如,如果操作系统是苹果公司的iOS操作系统,那么可以安装崩溃处理程序来处理Mach异常和BSD信号。如果编程环境是基于C++的,那么可以安装崩溃处理程序来处理抛出的而不是捕获的异常。当应用崩溃时,崩溃处理程序可以识别在崩溃的时刻执行的进程的“受害线程”,并且然后生成在崩溃的时刻被调用的(激活的)函数的调用链。为了生成该调用链,崩溃处理程序遍历受害线程的调用栈来识别用于从应用的调用函数返回的返回地址。应用的代码被存储在一个或多个模块中,每一个模块都包含函数。崩溃处理程序然后识别模块内的与返回地址相对应的偏移,并且识别模块内的包括这些偏移的函数。崩溃处理程序可以针对进程中的每一个线程而不是仅受害线程生成调用链。用户模式崩溃报告系统然后基于在识别出的调用链中的函数来生成崩溃报告。因为崩溃处理程序在与应用相同的进程中执行,所以崩溃处理程序访问了应用的所有数据。此外,崩溃处理程序存储崩溃报告,所以它们能够被发送到崩溃报告服务器。
[0016] 在一些实施例中,用户模式崩溃报告系统识别对应用的崩溃负责的应用的函数。对崩溃负责的函数是可能在崩溃的时刻在受害线程上执行的函数。用户模式崩溃报告系统识别在崩溃的时刻调用的函数的调用链。用户模式崩溃报告系统然后访问识别出免于对崩溃负责的函数。当程序将要崩溃时,应用可以在减轻崩溃的影响的尝试中调用各种管理函数,从而手机一些崩溃相关的信息等。这些管理函数可能在调用链中,但是不对崩溃负责。
这些管理函数以及不对崩溃负责的其他函数被指定为免于负责。用户模式崩溃报告系统处理函数的调用链来识别不免于对崩溃负责的调用的最后一个函数。用户模式崩溃报告系统然后将该最后一个函数指定为对于崩溃负责。指定免于负责的函数的信息可以在配置文件中指定,并且该信息指示模块内的函数的偏移的范围。
[0017] 图1是示出了在一些实施例中的应用在其中执行的执行环境的框图。执行环境100包括操作系统组件110、应用环境120、以及应用沙盒130。操作系统组件可以包括Mach层111、BSD层112、以及核心服务层113。Mach层提供基于内核的服务,例如,任务和线程管理、虚拟存储器管理、进程间通信、线程调度、异常处理服务(例如,Mach异常)等。BSD层提供更高层次的服务,例如,POSIX API、文件系统实现、信令机制(例如,BSD信号)等。核心服务层提供各种服务,例如,时间和日期管理、基于流的I/O等等。应用环境可以提供用于图形用户界面、事件处理、I/O服务等的API。应用环境还可以提供应用在其中执行的沙盒。每一个应用131在其自己的沙盒中执行以防止一个应用的坏的行为不利地影响其他应用或者操作系统。沙盒提供了应用在其中访问被严格控制的资源(例如,网络访问、盘空间)的集合的环境。崩溃处理程序在与崩溃的应用相同的沙盒中执行。
[0018] 图2是示出了在一些实施例中的用户模式崩溃报告系统的模块表的框图。模块表210将模块标识符映射到被加载进应用的地址空间的模块220的图像。每一个模块包含应用的函数。模块表包括被加载到应用的进程的每一个模块的条目211。每一个条目包含关于模块的标识信息以及对加载的模块的引用。为了生成模块表,在应用的进程中执行的用户模式崩溃报告系统安装添加模块回调组件和删除模块回调组件,使得当模块分别加载到进程(即,进程的地址空间)中以及从进程中卸载时,系统可以被通知。当模块被加载时,添加模块回调被调用。向添加模块回调传递关于模块的信息的引用,包括模块所加载的地址范围、模块的名称、模块的唯一生成标识符等,并且将相对应的条目添加到模块表。当模块被卸载时,调用删除模块回调。向删除模块回调传递对模块的引用,并且将相对应的条目从模块表中删除。
[0019] 图3是示出了在一些实施例中的模块的布局的框图。应用的模块310包括各种函数,并且可以包括主函数,向主函数传递控制以开始应用的执行。模块还可以具有相关联的模块函数映射320,所述模块函数映射包含模块的每一个函数的条目,以及对应用的地址空间中的该模块的开始点的引用。模块函数映射可以与模块一起被提供,或者用户模式崩溃操作系统可以基于对其他模块相关的信息的分析来生成模块函数映射。免于负责的函数表330识别出免于对崩溃负责的模块的那些函数。在这个示例中,函数f4、f5、以及f6免于对崩溃负责。
[0020] 图4是示例了一些实施例中的调用栈的布局的框图。如调用栈400所示出的,模块310(图3)的函数f1、f2、f3、f4、以及f5被调用,正如分别由它们的栈401、402、403、404、以及405所表示的。栈指针SP指向调用栈的顶部的栈帧。每一个栈帧可以包含用于在调用函数和被调用函数之间传递参数的参数区域。每一个栈帧还包含指向调用函数的栈帧的引用SP。例如,栈帧405包括指向栈帧404的引用。引用SP由函数使用用于当它返回到调用函数时,删除其栈帧。由此,引用SP形成栈帧的链接的列表。每一个栈帧还包括对调用函数中的返回地址的引用RA。例如,栈帧405包括在函数f5的调用之后在函数f4中的返回地址。引用RA由返回函数使用来在调用之后返回到位置(或其它位置)。
[0021] 为了生成调用链,用户模式崩溃报告系统的崩溃处理程序遍历调用栈来识别已经被调用的每一个函数。可以向崩溃处理程序传递在崩溃的时刻正在执行的受害线程的线程标识符。崩溃处理程序可以与操纵系统进行交互以取回线程相关的信息,例如,在崩溃时刻的线程的栈指针以及指令指针。通过使用模块函数映射来识别与该地址相对应的函数,从而崩溃处理程序可以使用指令指针来识别在崩溃时刻(即,当出现相对应的异常时)正在执行的函数。为了遍历调用栈,崩溃处理程序使用该栈指针来取回指向下一较低栈帧的指针以及调用函数的返回地址。通过使用模块函数映射,崩溃处理程序使用该返回地址来识别在崩溃的时刻正在执行的函数。崩溃处理程序继续遍历该栈,直到它遇到栈的底部。栈的底部可以例如通过存储在调用栈的底部帧(例如,引用SP==null)的区别于其他的值(例如,全1)来指定。在一些实施例中,崩溃处理程序可以以与生存更复杂的崩溃报告相似的形式来遍历进程的每一个线程的调用栈。
[0022] 在一些实施例中,栈的底部可以不被崩溃处理程序容易地确定。例如,栈帧401可以包含引用SP的坏存储地址,即,指向下一较低栈帧的指针正常存储的位置。当崩溃处理程序试图使用该坏地址来访问存储器时,坏地址异常可能发生。为了检测遇到了调用栈的底部,崩溃处理程序可以安装坏存储访问处理程序,当试图对坏存储地址进行引用时,调用所述坏存储访问处理程序。坏存储访问处理程序可以简单地设置全局标志来指示坏存储访问试图,并且在试图的存储访问之后,返回到崩溃处理程序来执行指令。以下的指令可以查看全局标志,并且使用其作为到达栈的底部的指示。
[0023] 图5是示出了在一些实施例中的用户模式崩溃报告系统的组件的框图。用户崩溃报告系统500包括模块数据510、数据结构520、以及组件530。对于每一个模块,模块数据包括模块511、符号表512、模块函数映射513、以及免于负责的函数表514。模块数据可以由开发者提供。符号表包含符号相关的信息,符号相关的信息可以用于使对函数和变量的引用符号化。免于负责的函数表可以被提供为存储在应用的配置文件中的配置信息。
[0024] 由用户模式崩溃报告系统使用的数据结构包括调用栈521、调用链522、模块表523、以及崩溃报告存储524。在下文中,用户模式崩溃报告系统在对崩溃的受害线程的处理的引用中描述。对崩溃的应用的其他线程的处理将以与提供更复杂的崩溃报告类似的方式执行。调用栈代表受害线程的调用栈。调用链代表由崩溃处理程序确定的函数调用的链。模块表包含被加载到应用的地址空间的模块到其地址范围的映射。崩溃报告库存储由用户模式崩溃报告系统生成的崩溃报告。崩溃报告库可以存储每一个崩溃的崩溃报告直到其被更新到崩溃报告服务器并且可以永久地存储关于崩溃的其他识别信息以对后续的崩溃报告的上传进行优化。
[0025] 用户模式崩溃报告系统的组件包括崩溃处理程序531、用于调用链组件的添加函数532、查找负责的函数组件533、存储崩溃报告组件534、添加模块回调535、删除模块回调536、以及调用栈坏地址处理程序537。可以被安装来处理各种类型的崩溃的崩溃处理程序遍历调用栈并且生成崩溃报告。用于调用链组件的添加函数识别与返回地址相关联的函数并且将该函数的标识符添加到调用链。查找负责函数组件识别对崩溃负责的函数。存储崩溃报告组件控制崩溃报告的存储,以用于当应用下一次执行时发送到崩溃报告服务器。添加模块回调和删除模块回调在应用被初始化为跟踪被加载和卸载的模块时被安装。调用栈坏地址处理程序由崩溃处理程序安装来处理由到达调用栈的底部引起的坏地址引用。
[0026] 在其上可以实现用户模式崩溃报告系统的计算设备和系统可以包括中央处理单元、输入设备、输出设备(例如,显示设备和扬声器)、存储设备(例如,存储器和硬盘驱动)、网络接口图形处理单元加速度计、蜂窝无线链接接口、全球定位系统设备等。输入设备可以包括键盘、定位设备、触摸屏、姿势识别设备(例如,对于空中手势)、头部和眼部跟踪设备、用于语音识别的麦克等。计算设备可以包括桌面计算机、膝上型计算机、平板计算机、电子阅读器、个人数字助理、智能电话、游戏设备、服务器、以及计算机系统,例如,大规模并行系统。计算系统可以访问包括计算机可读存储介质和数据传送介质的计算机可读介质。计算机可读存储介质是不包括暂时性、传播信号的有形存储单元。计算机可读存储介质的示例包括存储器,例如,主存储器、高速缓存存储器、以及辅助存储器(例如,DVD),并且包括其他存储单元。计算机可读存储介质可以记录在实现用户模式崩溃报告系统的计算机可执行指令或逻辑上或者可以利用实现用户模式崩溃报告系统的计算机可执行指令或逻辑进行编码。数据传送介质用于经由暂时性、传播信号或载波(例如,电磁)经由有线或无线连接来传送数据。
[0027] 用户模式崩溃报告系统可以在由一个或多个计算机、处理器或其它设备执行的计算机可执行指令(例如,程序模块和部件)的通用上下文中描述。通常,程序模块或组件包括执行特定任务或实现特定数据类型的例程、程序、对象、数据结构等。典型地,程序模块的功能如在各种实施例中所需要的可以进行合并或者分布。用户模式崩溃报告系统的方面可以使用例如专用集成电路(“ASIC”)在硬件中实现。
[0028] 图6是示出了在一些实施例中的崩溃处理程序的处理的流程图。向崩溃处理程序600被传递有受害线程的指示、生成调用链、查找负责的函数、以及发送崩溃报告。在框601中,组件取回线程控制块或与受害线程相关的其他信息。在框602,组件确定在崩溃时刻的指令指针。在框603,组件调用调用链组件的添加函数来将与指令指针相关联的函数添加到调用链。在框604,组件取回在崩溃时刻的栈指针。在框605,组件安装调用栈坏地址处理程序以用于检测当遍历调用栈时何时遇到坏地址。在框606-609,组件循环,遍历调用栈。在框
606,组件取回由当前的栈指针引用的返回地址。如果栈指针SP指向坏存储地址,则使用栈指针来访问返回地址将导致坏地址异常。在判定框607,如果遇到栈帧的底部(例如,由指示坏地址异常的全局标志所指示的),则组件在610继续,否则组件在框608继续。在框608,组件调用调用链组件的添加函数、传递返回地址。在框609,组件取回对下一栈帧的引用,并且循环到框606来处理下一栈帧。在框610,组件调用查找负责的函数组件来识别对崩溃负责的函数。在框611,部件调用存储崩溃报告组件,并且然后结束。
[0029] 图7是示出了在一些实施例中的崩溃报告系统的调用链组件的添加函数的处理的流程图。向调用链组件的添加函数700传递地址,识别与该地址相对应的模块内的函数,并且将该函数添加到调用链。函数最初可以使用模块表来识别模块。在框701,组件选择模块函数映射中的下一条目。在判定框702,如果所有条目都已经被选择,则与传递的地址相对应的函数没有被找到,并且组件报告错误,否则组件在框703继续。在判定框703,如果地址在所选择的条目的范围内,则组件在框704继续,否则组件循环到框701,来选择下一条目。在框704,组件将与识别出的函数相对应的条目添加到调用链,并且然后返回。
[0030] 图8是示出了在一些实施例中的崩溃报告系统的查找负责的函数组件的处理的流程图。查找负责的函数组件800处理调用链来识别对于崩溃负责的不免于负责的函数。在框801,组件选择调用链中的下一函数。在判定框802,如果已经到达调用链的结尾,则组件返回没有识别到负责的函数的指示,否则组件在框803继续。在判定框803,如果所选择的函数是免于负责的,正如免于负责的函数表所指示的,则组件循环到框801来选择下一函数,否则组件返回所选择的函数负责的指示。
[0031] 图9是示出了在一些实施例中的用户模式崩溃报告系统的发送崩溃报告组件的处理的流程图。存储崩溃报告组件900被调用来发送崩溃报告。组件可以生成崩溃标识符,并且存储崩溃报告以用于当应用下一次启动时,发送到崩溃报告服务器。组件可以使用崩溃标识符来识别类似的崩溃是否已经报告过。在框901,组件生成崩溃标识符,例如,应用名称和其版本、负责的模块名称(即,包含负责的函数的模块)和其版本、以及负责的模块内的崩溃偏移的组合。在框902,组件收集各种崩溃报告信息,其可以包括每一个线程的调用链、负责的函数、变量的符号和函数(例如,负责的函数)名称、应用的地址空间的各个部分的转储等。在框903,组件将会话标识符添加到崩溃报告。会话标识符唯一地识别从开始到结束(例如,崩溃或正常结束)的应用的异常。在某环境中,应用(或应用监视器)可以向服务器(例如,客户体验服务器)报告应用的活动或其它信息,并且由会话标识符识别该活动。崩溃报告中的会话标识符的使用允许活动信息与崩溃报告相关。以这种方式,当分析崩溃的原因时,开发者能够利用具有崩溃报告和活动信息二者。在框904,组件将崩溃报告添加到崩溃报告存储库,并且然后返回。当应用下一次执行时,如果上传标准满足,则应用将崩溃报告上传到崩溃报告服务器。应用可以使用各种上传标准来确定崩溃报告是否应该被上传。例如,上传标准可以基于当前的通信带宽(例如,蜂窝与WiFi),一些数量的相同类型的崩溃报告是否已经被上传等等。
[0032] 图10是示出了在一些实施例中的用户模式崩溃报告系统的添加模块回调组件的处理的流程图。添加模块回调组件1000在用户模式崩溃报告系统初始化时被安装,并且记录其图像已经被加载到应用的地址空间的这些模块。应用环境可以调用传递模块标识符的指示的添加模块回调,以通知应用模块已经被加载。在框1001-1003,组件可以取回关于已经加载的模块的各种信息,例如,其存储器中的地址、其名称、其构建标识符等。在框1004,组件将条目添加到模块表,并且然后完成。
[0033] 虽然以具体到结构特征和/或动作的语言描述了本主题,但是应当理解的是,在随附的权利要求中限定的主题不一定被限制为上述的具体特征或动作。而是,上述的具体的特征和动作被公开作为实现权利要求的示例形式。相应地,本发明只由随附的权利要求来进行限定。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈