应用程序的日志生成方法、装置、电子设备及存储介质与流程

文档序号:15557680发布日期:2018-09-29 01:30阅读:166来源:国知局

本发明涉及信息技术领域,特别是涉及一种应用程序的日志生成方法、装置、电子设备及存储介质。



背景技术:

现有的客户端日志生成方案,一般是通过人工进行手动埋点,工作量大。由于无法预测问题会出现在什么地方,什么时候出现,所以也导致难以确定需要进行打点的地方,只能通过对一些关键的地方进行埋点。当客户端出现问题时,由于日志的信息不全,很难对问题进行排查,严重影响工作效率。

与此同时,客户端中代码的执行路径对于解决客户端出现的问题也十分重要,现有的方案中,路径信息只能通过系统提供的堆栈信息获取,但是由于问题难以预测,所以系统堆栈信息几乎无法准确保留有用的数据,并且系统堆栈信息还存在无法跨线程呈现问题、十分耗时、影响所在线程的执行效率以及难以追查到源码路径信息等问题。



技术实现要素:

鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种应用程序的日志生成方法和相应的一种应用程序的日志生成装置。

为了解决上述问题,本发明实施例公开了一种应用程序的日志生成方法,所述应用程序包括多个运行对象,所述多个运行对象具有预设的插桩代码信息,所述方法包括:

在运行对象运行时,依据对应的插桩代码信息确定目标运行对象;

生成所述目标运行对象的执行信息;

依据所述目标运行对象的插桩代码信息和执行信息,生成日志信息。

优选地,所述插桩代码信息包括标识信息;所述依据所述目标运行对象的插桩代码信息和执行信息,生成日志信息的步骤包括:

生成与所述执行信息对应的序列信息、时间戳以及线程信息;

采用所述标识信息、所述执行信息、所述线程信息、所述时间戳以及所述序列信息,组成所述日志信息。

优选地,所述采用所述标识信息、所述执行信息、所述线程信息、所述时间戳以及所述序列信息,组成所述日志信息的步骤包括:

采用所述标识信息、所述执行信息、所述线程信息、所述时间戳以及所述序列信息,组成日志元素;

将所述日志元素添加至预设的第一队列;

判断所述第一队列中的日志元素的数量是否大于预设阈值;

若是,则将所述日志元素保存至预置信息库中。

优选地,所述生成与所述执行信息对应的序列信息的步骤包括:

将所述执行信息添加至预设的第二队列;获取所述执行信息在所述第二队列中的排序信息;

采用预设的进程获取指令,获取进程信息;

采用所述排序信息以及所述进程信息,生成所述序列信息。

优选地,所述生成与所述执行信息对应的时间戳的步骤包括:

采用预设的时间获取指令,获取当前的时间信息;

采用所述当前的时间信息,生成所述时间戳。

优选地,所述插桩代码信息包括筛选标记;所述在运行对象运行时,依据对应的插桩代码信息确定目标运行对象的步骤包括:

获取与所述筛选标记匹配的待筛选运行对象;

判断所述待筛选运行对象与预设的黑名单标记信息是否匹配;

若否,则确定所述待筛选运行对象为所述目标运行对象。

优选地,所述执行信息包括数据使用信息和/或数据输出信息;所述生成所述目标运行对象的执行信息的步骤包括:

采用预设的数据使用获取指令,获取所述数据使用信息;

和/或采用预设的数据输出获取指令,获取所述数据输出信息;

采用所述数据使用信息和/或所述数据输出信息,生成所述执行信息。

本发明实施例还公开了一种应用程序的日志生成装置,所述应用程序包括多个运行对象,所述多个运行对象具有预设的插桩代码信息,所述装置包括:

运行对象确定模块,用于在运行对象运行时,依据对应的插桩代码信息确定目标运行对象;

执行信息生成模块,用于生成所述目标运行对象的执行信息;

日志信息生成模块,用于依据所述目标运行对象的插桩代码信息和执行信息,生成日志信息。

本发明实施例还公开了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时,实现上述方法的步骤。

本发明实施例还公开了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时,实现上述方法的步骤。

在本发明实施例中,通过预设的插桩代码信息,确定需要保存日志信息的目标运行对象,在生成目标运行对象的执行信息后,采用异步方式将执行信息添加至预设的第二队列,防止影响应用程序当前线程的执行效率。然后采用生成的与所述执行信息对应的序列信息、时间戳、线程信息以及插桩代码信息中的标识信息,组成日志元素,形成完整的路径信息。将所述日志元素保存至预设第一队列中,当第一队列中的日志元素数量超过一定的值时,将日志元素保存至预置信息库中,生成日志信息。其中,运行对象可以是应用程序的方法,应用程序中的方法可以具有唯一的插桩代码信息,从而实现对应用程序中的方法自动埋点,能够保存应用程序调用方法时的路径信息,完善了应用程序生成的日志信息的内容,提高了管理人员对应用程序进行维护或问题修复的效率。标识信息可以是按照自定义规则生成的,与所述运行对象唯一匹配的字符串,从而实现对日志信息进行加密。在查看日志时,可以依据标识信息、执行信息、线程信息、时间戳以及序列信息中的至少一项,对日志信息进行搜索,获取需要的日志元素,从而实现可以多种维度获取路径信息。

附图说明

图1是本发明的一种应用程序的日志生成方法实施例一的步骤流程图;

图2是本发明的一种应用程序的日志生成方法实施例二的步骤流程图;

图3是本发明的一种应用程序的日志生成装置实施例的结构框图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

参照图1,示出了本发明的一种应用程序的日志生成方法实施例一的步骤流程图,所述应用程序包括多个运行对象,所述多个运行对象具有预设的插桩代码信息,所述方法具体可以包括如下步骤:

步骤101,在运行对象运行时,依据对应的插桩代码信息确定目标运行对象;

运行对象可以是指应用程序中的方法,插桩代码信息可以预设在应用程序中的部分或者所有方法中,并且应用程序中的方法的插桩代码信息均不相同。可以通过预设的插桩代码信息,确定目标运行对象,即确定需要保存日志信息的方法,从而实现自动埋点。

步骤102,生成所述目标运行对象的执行信息;

目标运行对象的执行信息可以是应用程序调用方法时,该方法对应的一种或多种数据。

步骤103,依据所述目标运行对象的插桩代码信息和执行信息,生成日志信息。

通过依据插桩代码信息和执行信息,生成的日志信息,使得可以将应用程序调用方法时的路径信息进行保存;其中,插桩代码信息可以与应用程序中的各个方法唯一对应。

在本发明实施例中,通过预设的插桩代码信息,确定需要保存日志信息的目标运行对象,在生成目标运行对象的执行信息后,依据插桩代码信息和执行信息生成日志信息,其中,运行对象可以是应用程序的方法,应用程序中的方法可以具有唯一的插桩代码信息,从而实现对应用程序中的方法自动埋点,能够保存应用程序调用方法时的路径信息,完善了应用程序生成的日志信息的内容,提高了管理人员对应用程序进行维护或问题修复的效率。

参照图2,示出了本发明的一种应用程序的日志生成方法实施例二的步骤流程图,所述应用程序包括多个运行对象,所述多个运行对象具有预设的插桩代码信息;其中,所述插桩代码信息可以包括与所述应用程序中的各个运行对象唯一匹配的标识信息,所述方法具体可以包括如下步骤:

步骤201,在运行对象运行时,依据对应的插桩代码信息确定目标运行对象;

运行对象可以是指应用程序中的方法,插桩代码信息可以预设在应用程序中的部分或者所有方法中。可以通过预设的插桩代码信息,确定目标运行对象,即确定需要保存日志信息的方法,从而实现自动埋点。

需要说明的是,插桩代码信息可以是一段自定义长度的插桩代码。在应用程序的编译阶段,可以对特定范围或者所有的方法添加插桩代码。在应用程序的运行阶段,可以依据插桩代码信息,确定需要生成日志信息的目标运行对象。

在应用程序打包阶段,还可以采用所述标识信息,生成标识文件,并将所述标识文件上传至服务端的数据库中。

在一优选实施例中,所述插桩代码信息可以包括筛选标记;步骤201可以包括:

子步骤s2011,获取与所述筛选标记匹配的待筛选运行对象;

插桩代码信息可以包括一个二进制数据,定义该二进制数据中的其中一位为筛选标记,通过所述筛选标记对运行对象进行筛选。

例如,插桩代码信息可以是一个长度为8的二进制数据,定义插桩代码信息的第八位作为筛选标记,当读取到运行对象的筛选标记为“1”时,确定该选运行对象为待筛选运行对象。例如,运行对象a的插桩代码信息是“01000010”、运行对象b的插桩代码信息是“01100011”、运行对象c的插桩代码信息是“01010011”。则运行对象a的筛选标记为“0”,运行对象b的筛选标记为“1”,运行对象c的筛选标记为“1”,则运行对象b和运行对象c为待筛选运行对象。

在实际应用中,插桩代码信息还可以是若干位长度的字符串,可以定义字符串中的其中一位或多位作为筛选标记,本发明对插桩代码信息的字符长度和字符类型,以及筛选标记的字符长度和字符类型,以及筛选标记在插桩代码信息中的位置均不作限定。

子步骤s2012,判断所述待筛选运行对象与预设的黑名单标记信息是否匹配;

预设的黑名单标记信息可以对目标运行对象作进一步筛选,黑名单标记信息可以根据待筛选运行对象的标识信息进行筛选。

例如,标识信息可以是插桩代码信息的第一位至第七位的字符。黑名单标记信息中,可以包括黑名单标记。可以通过判断待筛选运行对象的标识信息与黑名单标记是否匹配,从而对待筛选运行对象进行筛选。例如,可以获取子步骤s2013中的待筛选运行对象b的标识信息为“0110001”,则通过将“0110001”与黑名单标记信息是否匹配,判断是否为目标运行对象;可以获取子步骤s2013中的待筛选运行对象c的标识信息为“0101001”,则通过将“0101001”与黑名单标记信息是否匹配,判断是否为目标运行对象

子步骤s2013,若否,则确定所述待筛选运行对象为所述目标运行对象。

当待筛选运行对象与预设的黑名单标记信息不匹配时,则确定所述待筛选运行对象为所述目标运行对象。

例如,黑名单标记信息可以包括黑名单标记a“0110001”和黑名单标记b“1110001”,则待筛选运行对象b的标识信息“0110001”与黑名单标记a匹配,进而不将待筛选业务对象b确定为目标运行对象,则不对运行对象b生成日志信息。判断待筛选运行对象c的标识信息“0101001”与黑名单标记a、黑名单标记b均不匹配,则确定待筛选运行对象c为目标运行对象,即对运行对象c进行生成日志信息。

在实际应用中,黑名单标记信息可以根据运行对象的调用频率进行动态调整,将一定时间内运行频率过高的运行对象(如:定时任务、页面渲染、递归循环等一些执行频繁,又不容易发生错误的方法)的标记信息添加至黑名单标记信息中,防止日志信息中绝大部分内容记录了频率过高的运行对象的信息,不利于管理人员查看日志信息,降低工作效率。

在一优选实施例中,黑名单标记信息可以包括黑名单进程信息和/或黑名单线程信息。可以获取待筛选运行对象的进程信息,将待筛选运行对象的进程信息与黑名单进程信息进行匹配,从而判断待筛选运行对象是否为目标运行对象,和/或获取待筛选运行对象的线程信息,将待筛选运行对象的线程信息与黑名单线程信息进行匹配,从而判断待筛选运行对象是否为目标运行对象。从而实现针对待筛选运行对象的进程信息,和/或线程信息进行筛选,更加准确的获取需要进行生成日志信息的运行对象。

步骤202,生成所述目标运行对象的执行信息;

在确定目标运行对象后,可以通过调用应用程序中的预设指令,生成目标运行对象的执行信息。

在一优选实施例中,所述执行信息包括数据使用信息和/或数据输出信息;步骤202可以包括:

子步骤s2021,采用预设的数据使用获取指令,获取所述数据使用信息;

可以才用已有的数据使用获取指令,获取目标运行对象被调用时所使用的数据。

子步骤s2022,和/或采用预设的数据输出获取指令,获取所述数据输出信息;

可以才用已有的数据输出获取指令,获取目标运行对象被调用时所产生的数据。

子步骤s2023,采用所述数据使用信息和/或所述数据输出信息,生成所述执行信息。

可以将目标运行对象被调用时所使用的数据和/或产生的数据进行打包,生成执行信息。

步骤203,生成与所述执行信息对应的序列信息、时间戳以及线程信息;

可以按照预设规则以及采用预设指令,生成与所述执行信息对应的序列信息、时间戳以及线程信息。

在一优选实施例中,所述生成与所述执行信息对应的序列信息的步骤可以包括:

子步骤s2031,将所述执行信息添加至预设的第二队列;获取所述执行信息在所述第二队列中的排序信息;

可以采用异步传输的方式,将所述执行信息添加至预设的第二队列,然后执行信息在第二队列中的排序信息。所述排序信息可以是根据所述执行信息加入所述第二队列时候顺序进行的编号。通过异步传输的方式,使得记录执行信息的时候,不会影响应用程序当前执行线程的运行效率。

例如:可以对被依次添加至第二队列中的执行信息a、执行信息b、执行信息c、执行信息d和执行信息e进行从小到大编号。例如,可以得到执行信息a的排序信息为“001”、执行信息b的排序信息为“002”、执行信息c的排序信息为“003”、执行信息d的排序信息为“004”、执行信息e的排序信息为“005”。

子步骤s2032,采用预设的进程获取指令,获取进程信息;

可以采用预设的进程获取指令,获取所述执行信息对应的进程信息,因为同一个进程可能会调用不同的运行对象,所以可能存在不同执行信息对应同一个进程信息的情况。

子步骤s2033,采用所述排序信息以及所述进程信息,生成所述序列信息。

可以依据与执行信息对应的排序信息,以及判断进程信息是否相同,进行生成序列信息。

在一优选实施例中,所述生成与所述执行信息对应的时间戳的步骤可以包括:

子步骤s2034,采用预设的时间获取指令,获取当前的时间信息;

采用预设的时间获取指令,获取当前的时间信息,所述时间信息可以包括日期信息和时钟信息,所述时钟信息可以精确到纳秒级,例如,2017年12月25日17时23分3.487845778秒。

子步骤s2035,采用所述当前的时间信息,生成所述时间戳。

可以采用所述当前的时间信息,根据自身精度需求生成时间戳。例如,当前的时间信息2017年12月25日17时23分3.487845778秒,可以精确度为秒的时间戳:2017年12月25日17时23分3秒。

在一优选实施例中,所述生成与所述执行信息对应的线程信息的步骤可以包括:

子步骤s2036,采用预设的线程获取指令,获取所述线程信息。

可以采用预设的线程获取指令,获取与所述执行信息对应的所述线程信息。

步骤204,采用所述标识信息、所述执行信息、所述线程信息、所述时间戳以及所述序列信息,组成所述日志信息。

标识信息可以是按照自定义规则生成的,与所述运行对象唯一匹配的字符串,从而实现对日志信息进行加密。在查看所述日志信息时,可以通过保存在所述服务端中的所述标识文件,对日志信息进行解密,查看完整、清楚的日志信息。

在一优选实施例中,步骤204可以包括:

子步骤s2041,采用所述标识信息、所述执行信息、所述线程信息、所述时间戳以及所述序列信息,组成日志元素;

在生成与所述执行信息对应的序列信息、时间戳以及线程信息之后,可以采用所述标识信息、所述执行信息、所述线程信息、所述时间戳以及所述序列信息进行组合,生成日志元素。通过所述日志元素,可以获取应用程序中,不同代码执行的全部路径信息。

在实际应用中,所述日志元素包括但不限于所述标识信息、所述执行信息、所述线程信息、所述时间戳以及所述序列信息,还可以包括其他附加信息,例如:应用程序版本号等。

子步骤s2042,将所述日志元素添加至预设的第一队列;

子步骤s2043,判断所述第一队列中的日志元素的数量是否大于预设阈值;

子步骤s2044,若是,则将所述日志元素保存至预置信息库中。

可以将组成得到的日志元素先添加至预设的第一队列,当第一队列中的日志元素的数量达到一定数量(例如,300000)时,采用异步传输的方式,将所述第一队列中的日志元素保存至预置信息库中,生成日志信息,防止保存日志元素的流程会影响应用程序当前线程的运行效率。预置信息库可以设置在本地存储介质(例如,磁盘、光盘)中,通过设置第一队列,可以减少本地存储介质的i/o操作,提高存储介质的寿命。

在一优选实施例中,还可以将日志元素直接保存在云端信息库中,或者将本地信息库与云端服务器连接,进行定时或者实时的数据传输。

在本发明实施例中,通过预设的插桩代码信息,确定需要保存日志信息的目标运行对象,在生成目标运行对象的执行信息后,采用异步方式将执行信息添加至预设的第二队列,防止影响应用程序当前线程的执行效率。然后采用生成的与所述执行信息对应的序列信息、时间戳、线程信息以及插桩代码信息中的标识信息,组成日志元素,形成完整的路径信息。将所述日志元素保存至预设第一队列中,当第一队列中的日志元素数量超过一定的值时,将日志元素保存至预置信息库中,生成日志信息。其中,运行对象可以是应用程序的方法,应用程序中的方法可以具有唯一的插桩代码信息,从而实现对应用程序中的方法自动埋点,能够保存应用程序调用方法时的路径信息,完善了应用程序生成的日志信息的内容,提高了管理人员对应用程序进行维护或问题修复的效率。标识信息可以是按照自定义规则生成的,与所述运行对象唯一匹配的字符串,从而实现对日志信息进行加密。在查看日志时,可以依据标识信息、执行信息、线程信息、时间戳以及序列信息中的至少一项,对日志信息进行搜索,获取需要的日志元素,从而实现可以多种维度获取路径信息。

需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。

参照图3,示出了本发明的一种应用程序的日志生成装置实施例的结构框图,具体可以包括如下模块:

运行对象确定模块301,用于在运行对象运行时,依据对应的插桩代码信息确定目标运行对象;

执行信息生成模块302,用于生成所述目标运行对象的执行信息;

日志信息生成模块303,用于依据所述目标运行对象的插桩代码信息和执行信息,生成日志信息。

在一优选实施例中,所述插桩代码信息包括筛选标记;所述运行对象确定模块301可以包括:

待筛选单元,用于获取与所述筛选标记匹配的待筛选运行对象;

筛选判断单元,用于判断所述待筛选运行对象与预设的黑名单标记信息是否匹配;

目标单元,用于若所述待筛选运行对象与预设的黑名单标记信息不匹配,则确定所述待筛选运行对象为所述目标运行对象。

在一优选实施例中,所述执行信息包括数据使用信息和/或数据输出信息;所述执行信息生成模块302可以包括:

第一数据单元,用于采用预设的数据使用获取指令,获取所述数据使用信息;

和/或第二数据单元,用于采用预设的数据输出获取指令,获取所述数据输出信息;

数据生成单元,用于采用所述数据使用信息和/或所述数据输出信息,生成所述执行信息。

在一优选实施例中,所述插桩代码信息包括标识信息;所述日志信息生成模块303可以包括:

信息生成子模块,用于生成与所述执行信息对应的序列信息、时间戳以及线程信息;

信息组成子模块,用于采用所述标识信息、所述执行信息、所述线程信息、所述时间戳以及所述序列信息,组成所述日志信息。

在一优选实施例中,所述信息生成子模块可以包括:

排序信息单元,用于将所述执行信息添加至预设的第二队列;获取所述执行信息在所述第二队列中的排序信息;

进程信息单元,用于采用预设的进程获取指令,获取进程信息;

序列信息单元,用于采用所述排序信息以及所述进程信息,生成所述序列信息。

时间信息单元,用于采用预设的时间获取指令,获取当前的时间信息;

时间戳单元,用于采用所述当前的时间信息,生成所述时间戳。

线程信息单元,用于采用预设的线程获取指令,获取所述线程信息。

在一优选实施例中,所述信息组成子模块可以包括:

日志元素组成单元,用于采用所述标识信息、所述执行信息、所述线程信息、所述时间戳以及所述序列信息,组成日志元素;

日志元素添加单元,用于将所述日志元素添加至预设的第一队列;

日志元素判断单元,用于判断所述第一队列中的日志元素的数量是否大于预设阈值;

日志元素保存单元,用于若所述第一队列中的日志元素的数量大于预设阈值,则将所述日志元素保存至预置信息库中。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时,执行如本申请实施例中的应用程序的日志生成方法。

本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时,执行如本申请实施例中的应用程序的日志生成方法。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。

以上对本发明所提供的一种应用程序的日志生成方法、装置、电子设备及存储介质,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1