CN110083520A - 数据获取方法及装置 - Google Patents
数据获取方法及装置 Download PDFInfo
- Publication number
- CN110083520A CN110083520A CN201810074997.3A CN201810074997A CN110083520A CN 110083520 A CN110083520 A CN 110083520A CN 201810074997 A CN201810074997 A CN 201810074997A CN 110083520 A CN110083520 A CN 110083520A
- Authority
- CN
- China
- Prior art keywords
- interface function
- data
- title
- data object
- module
- 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.)
- Granted
Links
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
-
- 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
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)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提出一种数据获取方法及装置,涉及WEB应用技术领域。该方法包括:接收数据获取请求,依据所述数据获取请求获得应用程序中具有可查看数据标记的至少一个接口函数以及所述至少一个接口函数对应的数据对象,返回所述至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称,基于被选择的接口函数的名称及被选择的数据对象的名称,获取并返回对应的内存数据,为开发人员提供了更方便地内存数据查看方式,节省了内存数据占用空间,提升了应用程序的运行性能。
Description
技术领域
本发明涉及WEB应用技术领域,具体而言,涉及一种数据获取方法及装置。
背景技术
随着应用软件的不断扩大,其复杂程度也越来越高,在应用软件的开发、测试以及实际使用过程中,避免不了会产生各种各样的问题(也称为BUG),对于这些BUG,开发人员需要进行分析和修改。一般在分析和修改BUG时,都需要查看应用软件的内存数据,针对这些内存数据进行逻辑推演,然后找出问题的关键逻辑错误,进而修改应用软件中出现的BUG。
发明内容
本发明实施例提供一种数据获取方法及装置。
本发明实施例采用的技术方案如下:
第一方面,本发明实施例提出一种数据获取方法,所述方法包括:接收数据获取请求;依据所述数据获取请求获得应用程序中的具有可查看数据标记的至少一个接口函数以及所述至少一个接口函数对应的数据对象;返回所述至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称;基于被选择的接口函数的名称及被选择的数据对象的名称,获取并返回对应的内存数据。
在上述第一方面实施例提供的技术方案中,在需要查看内存数据时,通过分析出应用程序中的具有查看数据标记的至少一个接口函数以及所述至少一个接口函数对应的数据对象,并返回至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称,基于开发人员在该至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称中选择的需要查看的数据对象的名称以及接口函数的名称,获取并返回对应的内存数据以供开发人员查看和分析。也即是说,本申请中只有开发人员需要查看内存数据的时候,才会根据接收的数据获取请求获取并返回相应的内存数据,相比于现有技术中只要应用程序运行,就会将内存数据打印到日志文件的方式,占用内存空间更小;同时,相比现有技术中因为内存数据比较多,只能打印开发人员认为关键的数据到日志文件的方式,本申请提供的数据获取方法能够使开发人员更方便地获取更为全面的内存数据,从而避免因内存数据多不能全部打印输出而把分析BUG需要的数据信息漏掉的问题,实现了便于开发人员实时查看内存数据、提升应用程序运行速度及性能的技术效果。
可选地,结合上述第一方面提供的技术方案,在第一方面的第一种可能的设计中,所述至少一个接口函数对应的数据对象包括所述应用程序中的所有单例对象,所述依据所述数据获取请求获得应用程序中的具有可查看数据标记的至少一个接口函数以及所述至少一个接口函数对应的数据对象,包括:分析所述所有单例对象中每个单例对象的接口函数;将具有可查看数据标记的接口函数以及所述具有可查看数据标记的接口函数对应的单例对象进行缓存。在本申请中,由于在应用程序的实际开发过程中,业务功能的对象通常都是单例模型的对象,也只有这些对象一旦被创建就不会被销毁,才能够随时读取数据,故通过分析应用程序中的所有单例对象以及单例对象中的接口函数,进而找到具有可查看数据标记的接口函数以及所述具有可查看数据标记的接口函数对应的单例对象并进行缓存,以便后续在开发人员选择查看该单例对象及接口函数时,能够获得并返回对应的内存数据以供开发人员查看和分析。
可选地,结合上述第一方面提供的技术方案,在第一方面的第二种可能的设计中,所述至少一个接口函数对应的数据对象包括所述应用程序中的所有类,所述依据所述数据获取请求获得应用程序中的具有可查看数据标记的至少一个接口函数以及所述至少一个接口函数对应的数据对象,包括:分析所述所有类中每个类的接口函数;将具有可查看数据标记的接口函数以及所述具有可查看数据标记的接口函数对应的类进行缓存。在本申请中,由于在应用程序的功能模块中,还存在静态数据,这些静态数据往往是系统运行逻辑处理的关键,故需要对这些静态数据对应的接口函数进行分析,即通过分析应用程序中的所有类以及类中的接口函数,进而找到具有可查看数据标记的接口函数以及所述具有可查看数据标记的接口函数对应的类并进行缓存,以便后续在开发人员选择查看该类及接口函数时,能够获得并返回对应的内存数据以供开发人员查看和分析。
可选地,结合上述第一方面提供的技术方案,在第一方面的第三种可能的设计中,在返回所述至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称之前,所述方法还包括:根据所述至少一个接口函数以及所述至少一个接口函数对应的数据对象生成模块树,其中,所述模块树的叶子节点为所述至少一个接口函数的名称,所述叶子节点的父节点为所述至少一个接口函数对应的数据对象的名称;所述返回所述至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称,包括:返回所述模块树。在本申请中,由于开发人员开发的应用程序中,通常包括大量的数据对象和接口函数,当大量的接口函数的名称以及数据对象的名称直接返回时,不便于开发人员查看和分析,故将所述至少一个接口函数以及所述至少一个接口函数对应的数据对象以模块树的形式呈现给开发人员,实现了为开发人员提供一种更好更方便的方式查看内存数据的技术效果。
可选地,结合上述第一方面的第三种可能的设计提供的技术方案,在第四种可能的设计中,所述根据所述至少一个接口函数以及所述至少一个接口函数对应的数据对象生成模块树,包括:根据所述至少一个接口函数对应的数据对象的包名对所述数据对象进行归类,形成子模块树;将所述至少一个接口函数的名称添加至所述子模块树中作为所述至少一个接口函数对应的数据对象的名称的下一层节点,从而得到所述模块树。在本申请中,由于每一个数据对象都有包名,故根据包名来对所述数据对象进行归类,以使数据对象的结构层次更加分明,开发人员根据模块树中呈现的数据对象结构,能够快速准确地选择需要查看内存数据的数据对象和接口函数。
可选地,结合上述第一方面提供的技术方案,在第一方面的第五种可能的设计中,所述基于被选择的接口函数的名称及被选择的数据对象的名称,获取并返回对应的内存数据,包括:根据所述被选择的接口函数的名称及所述被选择的数据对象的名称,反射调用所述被选择的接口函数,从而获取并返回所述内存数据。在本申请中,在获取到开发人员选择的接口函数的名称及数据对象的名称后,通过JAVA的反射机制,调用所述被选择的接口函数,实现内存数据的获取呈现给开发人员。
可选地,结合上述第一方面提供的技术方案,在第一方面的第六种可能的设计中,所述可查看数据标记设置在所述至少一个接口函数中的每个接口函数的注解中。在本申请中,开发人员在开发应用程序时,采用JAVA的注解技术,在需要提供内存数据查看功能的接口函数的注解中设置可查看数据标记,实现了在接收到数据获取请求时,根据接口函数中是否具有可查看数据标记可判断该接口函数是否具有数据查看的功能,进而实现快速获得具有可查看数据标记的至少一个接口函数以及所述至少一个接口函数对应的数据对象的技术效果。
第二方面,本发明实施例还提出一种数据获取装置,所述装置包括:接收模块,用于接收数据获取请求;数据对象分析模块,用于依据所述数据获取请求获得应用程序中的具有可查看数据标记的至少一个接口函数以及所述至少一个接口函数对应的数据对象;发送模块,用于返回所述至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称;数据获取模块,用于基于被选择的接口函数的名称及被选择的数据对象的名称,获取并返回对应的内存数据。
在上述第二方面实施例提供的技术方案中,在需要查看内存数据时,数据对象分析模块通过分析出应用程序中的具有查看数据标记的至少一个接口函数以及所述至少一个接口函数对应的数据对象,发送模块返回至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称,数据获取模块基于开发人员在该至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称中选择的需要查看的数据对象的名称以及接口函数的名称,获取并返回对应的内存数据以供开发人员查看和分析。也即是说,本申请中只有开发人员需要查看内存数据的时候,才会根据接收数据获取请求获取并返回相应的内存数据,相比于现有技术中只要应用程序运行,就会将内存数据打印到日志文件的方式,占用内存空间更小;同时,相比现有技术中因为内存数据比较多,只能打印开发人员认为关键的数据到日志文件的方式,本申请提供的数据获取方法能够使开发人员更方便地获取更为全面的内存数据,从而避免因内存数据多不能全部打印输出而把分析BUG需要的数据信息漏掉的问题,实现了便于便于实时查看内存数据、提升应用程序运行速度及性能的技术效果。
可选地,结合上述第二方面提供的技术方案,在第二方面的第一种可能的设计中,所述至少一个接口函数对应的数据对象包括所述应用程序中的所有单例对象,所述数据对象分析模块包括:单例对象分析模块,用于分析所述所有单例对象中每个单例对象的接口函数;将具有可查看数据标记的接口函数以及所述具有可查看数据标记的接口函数对应的单例对象进行缓存。在本申请中,由于在应用程序的实际开发过程中,业务功能的对象通常都是单例模型的对象,也只有这些对象一旦被创建就不会被销毁,才能够随时读取数据,故通过分析应用程序中的所有单例对象以及单例对象中的接口函数,进而找到具有可查看数据标记的接口函数以及所述具有可查看数据标记的接口函数对应的单例对象并进行缓存,以便后续在开发人员选择查看该单例对象及接口函数时,能够获得并返回对应的内存数据以供开发人员查看和分析。
可选地,结合上述第二方面提供的技术方案,在第二方面的第二种可能的设计中,所述至少一个接口函数对应的数据对象包括所述应用程序中的所有类,所述数据对象分析模块包括:静态数据分析模块,用于分析所述所有类中每个类的接口函数;将具有可查看数据标记的接口函数以及所述具有可查看数据标记的接口函数对应的类进行缓存。在本申请中,由于在应用程序的功能模块中,还存在静态数据,这些静态数据往往是系统运行逻辑处理的关键,故需要对这些静态数据对应的接口函数进行分析,即通过分析应用程序中的所有类以及类中的接口函数,进而找到具有可查看数据标记的接口函数以及所述具有可查看数据标记的接口函数对应的类并进行缓存,以便后续在开发人员选择查看该类及接口函数时,能够获得并返回对应的内存数据以供开发人员查看和分析。
可选地,结合上述第二方面提供的技术方案,在第二方面的第三种可能的设计中,所述装置还包括:模块树生成模块,用于根据所述至少一个接口函数以及所述至少一个接口函数对应的数据对象生成模块树,其中,所述模块树的叶子节点为所述至少一个接口函数的名称,所述叶子节点的父节点为所述至少一个接口函数对应的数据对象的名称;所述发送模块用于返回所述模块树。在本申请中,由于开发人员开发的应用程序中,通常包括大量的数据对象和接口函数,当大量的接口函数的名称以及数据对象的名称直接返回时,不便于开发人员查看和分析,故将所述至少一个接口函数以及所述至少一个接口函数对应的数据对象以模块树的形式呈现给开发人员,实现了为开发人员提供一种更好更方便的方式查看内存数据的技术效果。
可选地,结合上述第二方面的第三种可能的设计提供的技术方案,在第四种可能的设计中,所述模块树生成模块用于根据所述至少一个接口函数对应的数据对象的包名对所述数据对象进行归类,形成子模块树;将所述至少一个接口函数的名称添加至所述子模块树中作为所述至少一个接口函数对应的数据对象的名称的下一层节点,从而得到所述模块树。在本申请中,由于每一个数据对象都有包名,故根据包名来对所述数据对象进行归类,以使数据对象的结构层次更加分明,开发人员根据模块树中呈现的数据对象结构,能够快速准确地选择需要查看内存数据的数据对象和接口函数。
可选地,结合上述第二方面提供的技术方案,在第二方面的第五种可能的设计中,所述数据获取模块用于根据所述被选择的接口函数的名称及所述被选择的数据对象的名称,反射调用所述被选择的接口函数,从而获取并返回所述内存数据。在本申请中,在获取到开发人员选择的接口函数的名称及数据对象的名称后,通过JAVA的反射机制,调用所述被选择的接口函数,实现内存数据的获取并呈现给开发人员。
本发明的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明实施例了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本发明实施例所提供的数据获取方法及装置的一种应用环境示意图。
图2示出了本发明实施例所提供的服务器的方框示意图。
图3示出了本发明实施例所提供的数据获取方法的流程示意图。
图4示出了本发明另一实施例所提供的数据获取方法的流程示意图
图5示出了本发明实施例所提供的一种子模块树与模块树的示意图。
图6示出了本发明实施例所提供的数据获取装置的功能模块示意图。
图标:100-服务器;200-终端设备;300-网络;400-数据获取装置;110-存储器;120-处理器;130-通信接口;410-接收模块;420-数据对象分析模块;430-模块树生成模块;440-发送模块;450-数据获取模块。
具体实施方式
在实现本发明实施例的技术方案的过程中,本申请发明人发现:
在应用软件出现BUG时,开发人员需要查看应用软件的内存数据,目前查看内存数据是通过系统日志的方式实现,即开发人员开发应用软件的时候在代码中增加日志功能,应用软件在运行过程中,当前的内存数据打印在日志中,开发人员通过查看日志文件来查看内存数据,然后根据这些内存数据对BUG进行修改。
基于上述研究,发明人经过多方调研发现,上述通过日志文件查看内存数据的方式,具有以下缺点:如果开发人员在开发应用软件的时候没有定义日志的数据,此时就没法通过日志文件查看该应用软件当前的内存数据,给BUG的分析带来很大的困难;应用软件在运行时无论有没有产生问题,对于已经定义了日志的内存数据,都会打印到日志文件中,使得日志文件中具有大量的内存数据,如果应用软件运行没有问题,开发人员就不需要查看日志文件,此时日志文件因为占用内存大反而会对应用软件的运行速度及运行性能造成影响;在实际应用中,正是因为内存数据比较多,只能打印开发人员认为关键的数据,很多时候会把分析BUG需要的数据信息漏掉,此时需要开发人员重新修改代码以使BUG重现,但重现BUG也存在一定困难。
以上现有技术中的方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本发明实施例针对上述问题所提出的解决方案,都应该是发明人在本发明过程中对本发明做出的贡献。
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
如图1所示,为本发明实施例提供的数据获取方法及装置的一种应用环境示意图。终端设备200与服务器100可以通过网络300进行通信,以实现服务器100与终端设备200之间的数据通信或交互。其中,服务器100中安装有至少一个应用程序(Application,APP),开发人员使用该终端设备200访问该服务器100后,可以获取至少一个应用程序的内存数据,该内存数据能够以开发人员容易理解的显示方式呈现在终端设备200上,极大地方便了开发人员实时查看应用程序的内存数据以及根据应用程序的内存数据对应用程序进行BUG分析。
其中,所述终端设备200可以是,但不限于,个人电脑(personal computer,PC)、平板电脑等。
如图2所示,为本实施例所提供的服务器100的方框示意图。该服务器100可以包括存储器110、处理器120和通信接口130,所述存储器110、处理器120和通信接口130,各元件之间直接或间接地电性连接,以实现数据的传输或者交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。处理器120用于执行存储器110中存储的可执行模块,例如计算机程序。
请参照图3,为本发明实施例所提供的数据获取方法的流程示意图。需要说明的是,本发明实施例所述的数据获取方法并不以图3以及以下所述的具体顺序为限制,应当理解,在其它实施例中,本发明所述的数据获取方法其中部分步骤的顺序可以根据实际需要相互交换,或者其中的部分步骤也可以省略或删除。该数据获取方法可应用于上述的服务器100,下面将对图3所示的具体流程进行详细阐述。
步骤S101,接收数据获取请求。
在实践中,开发人员开发的应用程序不可避免会出现BUG,当应用程序出现BUG时,开发人员需要知道当前应用程序中的内存数据,根据内存数据进行BUG分析。例如,当开发人员需要查看应用程序的内存数据时,可以直接在终端设备200中安装的浏览器上输入内存数据查看的页面地址,浏览器根据该页面地址生成对应的数据获取请求发送到应用程序所在的服务器100上。
步骤S102,依据所述数据获取请求获得应用程序中的具有可查看数据标记的至少一个接口函数以及所述至少一个接口函数对应的数据对象。
在本实施例中,当安装有该应用程序的服务器100接收到该数据获取请求后,需要分析出该应用程序中所有可以查看内存数据的接口函数及接口函数对应的数据对象。该可以查看内存数据的接口函数为具有可查看数据标记的接口函数,开发人员在开发应用程序的过程中,对于需要实时查看的数据,则需要在开发的数据对象中增加用于查看内存数据的接口函数,并在该接口函数中增加可查看数据标记,从而指明该接口函数为可以查看内存数据的接口函数。其中,该可查看数据标记可以采用JAVA的注解技术实现,即可查看数据标记可设置在用于查询内存数据的接口函数的注解中。需要说明的是,在本实施例中,该可以查看内存数据的接口函数可以理解为数据对象中的方法,并且该方法是Public属性、不带参数、具有返回值的方法,该方法返回数据的结构可以是String或者JSON对象。
服务器100接收到该数据获取请求后,分析出具有可查看数据标记至少一个接口函数以及所述至少一个接口函数对应的数据对象,并将该至少一个接口函数以及所述至少一个接口函数对应的数据对象放入缓存以供后续使用分析,容易理解地,所述可查看数据标记设置在所述至少一个接口函数中的每个接口函数的注解中。
在实践中,应用程序中的业务功能模块的对象都是单例模型的对象,也只有这些对象一旦被创建就不会被销毁,才可能随时查看数据,而非单例模型的对象在运行过程中可能随时出现、随时销毁,不能随时查看数据,故该服务器100分析出的至少一个接口函数对应的数据对象应包括所述应用程序中的所有单例对象,该步骤S102具体包括:
分析所述所有单例对象中每个单例对象的接口函数,将具有可查看数据标记的接口函数以及所述具有可查看数据标记的接口函数对应的单例对象进行缓存。
由于目前JAVA应用中都会采用Spring来构建自己的框架,故Spring可提供所有对象的读取方法,故在本实施例中,服务器100可采用Spring的beans对象的读取方法,来读取出JAVA进程中的所有单例对象。针对每个单例对象,进一步分析每个单例对象中的Public方法,找出没有参数并且有返回值的方法,读取方法中的注解是否存在可查看数据标记,如果存在,则表示该方法为可以查看内存数据的接口函数,将该接口函数以及该接口函数对应的单例对象进行缓存。
可选地,在应用程序的功能模块中还存在静态数据,这些静态数据在JAVA应用中采用static的模式进行标记,且往往是系统运行逻辑处理的关键,故需要对这些静态数据对应的接口函数进行分析,静态数据对应的接口函数通常属于类中的静态方法,因此在本实施例中,该服务器100分析出的至少一个接口函数对应的数据对象还包括所述应用程序中的所有类,该步骤S102具体包括:
分析所述所有类中每个类的接口函数,将具有可查看数据标记的接口函数以及所述具有可查看数据标记的接口函数对应的类进行缓存。
在本实施例中,可以采用JAVA中的模块功能库(*.jar文件)分析应用程序中的所有类,包括分析JAR包中的所有类以及分析classes路径下的所有类,针对每个类,读取每个类中静态的、没有参数的、有返回值的方法,再读取方法中的注解是否存在可查看数据标记,如果存在,则表示该方法为可以查看内存数据的接口函数,将该接口函数以及该接口函数对应的类进行缓存。
可选地,由于内存数据是保密的,故在开发人员查看内存数据时,服务器100需要进行安全控制。在本实施例中,可在JAVA应用系统中增加一个配置文件,如果该配置文件为打开状态,则表明开发人员可以进行安全访问;如果该配置文件是关闭状态,则开发人员需要到应用程序所在的服务器100上修改配置,将配置文件打开后才能实现内存数据的查看,在数据查看结束后,开发人员也可以将配置文件关闭,从而实现内存数据查看的安全控制。例如,服务器100在接收到数据获取请求后,首先进行安全检查,判断该配置文件是否打开,如果没有打开,则终端设备200的页面上不显示查看数据的界面,并提示开发人员需要先打开配置文件才能访问,在配置文件打开后,服务器100再根据数据获取请求获得应用程序中的具有可查看数据标记的至少一个接口函数以及所述至少一个接口函数对应的数据对象。
步骤S103,返回所述至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称。
在本实施例中,服务器100在分析出至少一个接口函数以及所述至少一个接口函数对应的数据对象后,将所述至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称返回至终端设备200,并呈现在终端设备200的页面上,供开发人员查看和选择。
步骤S104,基于被选择的接口函数的名称及被选择的数据对象的名称,获取并返回对应的内存数据。
其中,所述步骤S104包括:根据所述被选择的接口函数的名称及所述被选择的数据对象的名称,反射调用所述被选择的接口函数,从而获取并返回所述内存数据。在本实施例中,开发人员根据终端设备200页面上显示的至少一个接口函数的名称及所述至少一个接口函数对应的数据对象的名称,可选择需要查看内存数据的接口函数的名称及数据对象的名称(例如,点击页面上显示的至少一个接口函数的名称),发送相应的请求至服务器100,服务器100根据请求中所述被选择的接口函数的名称及被选择的数据对象的名称,在缓存中找到对应的被选择的数据对象和被选择的接口函数,通过反射调用的方式,获取所述内存数据并返回给所述终端设备200以供开发人员查看和分析。
可选地,服务器100在获取内存数据后,将内存数据转换为用户数据格式返回至终端设备200显示,以便开发人员理解,不需要再对数据进行特殊的分析。其中,内存数据可以采用toString方法或采用JSON的数据格式进行转换,转换后的内存数据直接返回至终端设备200并呈现在页面上。
请参照图4,为本发明另一实施例所提供的数据获取方法的流程示意图,其与上一个实施例不同的是,本发明实施例所提供的数据获取方法还包括:
步骤S203,根据所述至少一个接口函数以及所述至少一个接口函数对应的数据对象生成模块树,其中,所述模块树的叶子节点为所述至少一个接口函数的名称,所述叶子节点的父节点为所述至少一个接口函数对应的数据对象的名称。
在本实施例中,对于一个应用程序,其所包括的数据对象通常有很多个,因此,为了方便开发人员能够在所述至少一个接口函数以及所述至少一个接口函数对应的数据对象中快速找到和选择自己需要查看的数据对象和接口函数,服务器100将所述至少一个接口函数以及所述至少一个接口函数对应的数据对象生成模块树,该模块树能够很清晰地展现出数据对象的结构以及每个数据对象包括的具有可查看数据标记的接口函数。
其中,在本实施例中,服务器100通过分析缓存中的数据对象(包括单例对象和类)的包名,按照包名对数据对象进行归类,形成一个子模块树,该子模块树的叶子节点是数据对象的名称,但该子模块树中没有体现出数据对象与接口函数的关系,故为了更清楚地展现出数据对象中具有可查看数据标记的接口函数,将所述至少一个接口函数的名称添加至所述子模块树中作为所述至少一个接口函数对应的数据对象的名称的下一层节点,从而得到所述模块树。容易理解地,在将所述至少一个接口函数的名称添加至所述子模块树中后,所得到的模块树中的叶子节点为所述至少一个接口函数的名称,所述叶子节点的父节点为所述至少一个接口函数对应的单例对象的名称或者类的名称。例如,图5示出了本实施例所提供的一种子模块树与模块树的示意图,A、B为类的名称,a、b为单例对象的名称,A1、A2为类A中具有可查看数据标记的接口函数的名称,B1、B2为类B中具有可查看数据标记的接口函数的名称,a1、a2为单例对象a中具有可查看数据标记的接口函数的名称,b1为单例对象b中具有可查看数据标记的接口函数的名称,按照包名对类A、类B、单例对象a、单例对象b等数据对象进行归类,类A、类B归类为AB,单例对象a、单例对象b归类为ab,然后继续对AB、ab进行归类,直到得到根节点T,生成图5所示的子模块树,再将A1、A2、B1、B2、a1、a2、b1等可查看数据标记的接口函数的名称添加到该子模块树中,作为对应的类或单例对象的名称的下一层节点,从而生成图5所示的模块树。
步骤S204,返回所述模块树。
在本实施例中,服务器100将所述至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称以模块树的形式呈现在终端设备200,开发人员根据该模块树可以很方便地选择需要查看内存数据的接口函数的名称(即所述被选择的接口函数的名称)及数据对象的名称(即所述被选择的数据对象的名称),进而服务器100可以基于该被选择的接口函数的名称及被选择的数据对象的名称,获取对应的内存数据返回至终端设备200,供开发人员查看和分析。
请参照图6,为本发明实施例所提供的数据获取装置400的功能模块示意图。需要说明的是,本实施例所提供的数据获取装置400,其基本原理及产生的技术效果与上述方法实施例相同,为简要描述,本实施例中未提及部分,可参考方法实施例中的相应内容。所述数据获取装置400可应用于上述的服务器100,其包括接收模块410、数据对象分析模块420、模块树生成模块430、发送模块440以及数据获取模块450。
所述接收模块410用于接收数据获取请求。
可以理解,所述接收模块410可以执行上述步骤S101。
所述数据对象分析模块420用于依据所述数据获取请求获得应用程序中的具有可查看数据标记的至少一个接口函数以及所述至少一个接口函数对应的数据对象。
可选地,在本实施例中,所述至少一个接口函数对应的数据对象包括所述应用程序中的所有单例对象,所述数据对象分析模块420可以包括单例对象分析模块,所述单例对象分析模块用于分析所述所有单例对象中每个单例对象的接口函数;将具有可查看数据标记的接口函数以及所述具有可查看数据标记的接口函数对应的单例对象进行缓存。
可选地,在本实施例中,所述至少一个接口函数对应的数据对象包括所述应用程序中的所有类,所述数据对象分析模块420可以包括静态数据分析模块,所述静态数据分析模块用于分析所述所有类中每个类的接口函数;将具有可查看数据标记的接口函数以及所述具有可查看数据标记的接口函数对应的类进行缓存。
可以理解,所述数据对象分析模块420可以执行上述步骤S102。
所述模块树生成模块430用于根据所述至少一个接口函数以及所述至少一个接口函数对应的数据对象生成模块树,其中,所述模块树的叶子节点为所述至少一个接口函数的名称,所述叶子节点的父节点为所述至少一个接口函数对应的数据对象的名称。
其中,所述模块树生成模块430具体用于根据所述至少一个接口函数对应的数据对象的包名对所述数据对象进行归类,形成子模块树;将所述至少一个接口函数的名称添加至所述子模块树中作为所述至少一个接口函数对应的数据对象的名称的下一层节点,从而得到所述模块树。
可以理解,所述模块树生成模块430可以执行上述步骤S203。
所述发送模块440用于返回所述至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称。
在本实施例中,当所述模块树生成模块430生成模块树时,所述发送模块440用于将所述模块树返回给所述终端设备200。
可以理解,所述发送模块440可以执行上述步骤S103、S204。
所述数据获取模块450用于被选择的接口函数的名称及被选择的数据对象的名称,获取并返回对应的内存数据。
在本实施例中,所述数据获取模块450具体可用于根据所述被选择的接口函数的名称及所述被选择的数据对象的名称,反射调用所述被选择的接口函数,从而获取并返回所述内存数据。
可以理解,所述数据获取模块450可以执行上述步骤S104。
综上所述,本发明实施例所提供的数据获取方法及装置,服务器接收数据获取请求;依据所述数据获取请求获得应用程序中的具有可查看数据标记的至少一个接口函数以及所述至少一个接口函数对应的数据对象;返回所述至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称;基于被选择的接口函数的名称及被选择的数据对象的名称,获取并返回对应的内存数据供开发人员查看和分析。在本申请中,当服务器接收到开发人员需要查看内存数据的数据获取请求时,通过分析出应用程序中的具有查看数据标记的至少一个接口函数以及所述至少一个接口函数对应的数据对象,并将至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称返回至终端设备供开发人员选择,基于开发人员在该至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称中选择的需要查看的数据对象的名称以及接口函数的名称,获取对应的内存数据返回给开发人员以供开发人员查看和分析。因此,只有开发人员需要查看内存数据的时候,服务器才会根据数据获取请求获取并返回相应的内存数据,相比于现有技术中只要应用程序运行,就会将内存数据打印到日志文件的方式,占用内存空间更小;同时,相比现有技术中因内存数据比较多,只能打印开发人员认为关键的数据到日志文件的方式,本申请提供的数据获取方法能够使开发人员更方便地获取更为全面的内存数据,从而避免因内存数据多不能全部打印输出而把分析BUG需要的数据信息漏掉的问题。
本领域内的技术人员应明白,本发明实施例可提供为方法、装置、设备或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、装置、设备和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在本发明实施例所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置和方法实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本发明的可选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
Claims (13)
1.一种数据获取方法,其特征在于,所述方法包括:
接收数据获取请求;
依据所述数据获取请求获得应用程序中的具有可查看数据标记的至少一个接口函数以及所述至少一个接口函数对应的数据对象;
返回所述至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称;
基于被选择的接口函数的名称及被选择的数据对象的名称,获取并返回对应的内存数据。
2.如权利要求1所述的数据获取方法,其特征在于,所述至少一个接口函数对应的数据对象包括所述应用程序中的所有单例对象,所述依据所述数据获取请求获得应用程序中的具有可查看数据标记的至少一个接口函数以及所述至少一个接口函数对应的数据对象,包括:
分析所述所有单例对象中每个单例对象的接口函数;
将具有可查看数据标记的接口函数以及所述具有可查看数据标记的接口函数对应的单例对象进行缓存。
3.如权利要求1所述的数据获取方法,其特征在于,所述至少一个接口函数对应的数据对象包括所述应用程序中的所有类,所述依据所述数据获取请求获得应用程序中的具有可查看数据标记的至少一个接口函数以及所述至少一个接口函数对应的数据对象,包括:
分析所述所有类中每个类的接口函数;
将具有可查看数据标记的接口函数以及所述具有可查看数据标记的接口函数对应的类进行缓存。
4.如权利要求1所述的数据获取方法,其特征在于,在返回所述至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称之前,所述方法还包括:
根据所述至少一个接口函数以及所述至少一个接口函数对应的数据对象生成模块树,其中,所述模块树的叶子节点为所述至少一个接口函数的名称,所述叶子节点的父节点为所述至少一个接口函数对应的数据对象的名称;
所述返回所述至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称,包括:
返回所述模块树。
5.如权利要求4所述的数据获取方法,其特征在于,所述根据所述至少一个接口函数以及所述至少一个接口函数对应的数据对象生成模块树,包括:
根据所述至少一个接口函数对应的数据对象的包名对所述数据对象进行归类,形成子模块树;
将所述至少一个接口函数的名称添加至所述子模块树中作为所述至少一个接口函数对应的数据对象的名称的下一层节点,从而得到所述模块树。
6.如权利要求1所述的数据获取方法,其特征在于,所述基于被选择的接口函数的名称及被选择的数据对象的名称,获取并返回对应的内存数据,包括:
根据所述被选择的接口函数的名称及所述被选择的数据对象的名称,反射调用所述被选择的接口函数,从而获取并返回所述内存数据。
7.如权利要求1-6任一项所述的数据获取方法,其特征在于,所述可查看数据标记设置在所述至少一个接口函数中的每个接口函数的注解中。
8.一种数据获取装置,其特征在于,所述装置包括:
接收模块,用于接收数据获取请求;
数据对象分析模块,用于依据所述数据获取请求获得应用程序中的具有可查看数据标记的至少一个接口函数以及所述至少一个接口函数对应的数据对象;
发送模块,用于返回所述至少一个接口函数的名称以及所述至少一个接口函数对应的数据对象的名称;
数据获取模块,用于基于被选择的接口函数的名称及被选择的数据对象的名称,获取并返回对应的内存数据。
9.如权利要求8所述的数据获取装置,其特征在于,所述至少一个接口函数对应的数据对象包括所述应用程序中的所有单例对象,所述数据对象分析模块包括:
单例对象分析模块,用于分析所述所有单例对象中每个单例对象的接口函数;将具有可查看数据标记的接口函数以及所述具有可查看数据标记的接口函数对应的单例对象进行缓存。
10.如权利要求8所述的数据获取装置,其特征在于,所述至少一个接口函数对应的数据对象包括所述应用程序中的所有类,所述数据对象分析模块包括:
静态数据分析模块,用于分析所述所有类中每个类的接口函数;将具有可查看数据标记的接口函数以及所述具有可查看数据标记的接口函数对应的类进行缓存。
11.如权利要求8所述的数据获取装置,其特征在于,所述装置还包括:
模块树生成模块,用于根据所述至少一个接口函数以及所述至少一个接口函数对应的数据对象生成模块树,其中,所述模块树的叶子节点为所述至少一个接口函数的名称,所述叶子节点的父节点为所述至少一个接口函数对应的数据对象的名称;
所述发送模块用于返回所述模块树。
12.如权利要求11所述的数据获取装置,其特征在于,所述模块树生成模块用于根据所述至少一个接口函数对应的数据对象的包名对所述数据对象进行归类,形成子模块树;将所述至少一个接口函数的名称添加至所述子模块树中作为所述至少一个接口函数对应的数据对象的名称的下一层节点,从而得到所述模块树。
13.如权利要求8所述的数据获取装置,其特征在于,所述数据获取模块用于根据所述被选择的接口函数的名称及所述被选择的数据对象的名称,反射调用所述被选择的接口函数,从而获取并返回所述内存数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810074997.3A CN110083520B (zh) | 2018-01-25 | 2018-01-25 | 数据获取方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810074997.3A CN110083520B (zh) | 2018-01-25 | 2018-01-25 | 数据获取方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110083520A true CN110083520A (zh) | 2019-08-02 |
CN110083520B CN110083520B (zh) | 2022-09-13 |
Family
ID=67412100
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810074997.3A Active CN110083520B (zh) | 2018-01-25 | 2018-01-25 | 数据获取方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110083520B (zh) |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2002097610A1 (en) * | 2001-05-30 | 2002-12-05 | Bea Systems, Inc. | System and method for software component plug-in framework |
CN1632761A (zh) * | 2003-12-24 | 2005-06-29 | 华为技术有限公司 | 一种遍历和访问被测应用程序中对象的方法 |
CN102521136A (zh) * | 2011-12-31 | 2012-06-27 | 山东中创软件商用中间件股份有限公司 | 一种应用程序监控装置及方法 |
CN105528179A (zh) * | 2014-10-17 | 2016-04-27 | 卡巴斯基实验室股份制公司 | 存储器位置之间控制的转移的系统和方法 |
CN106130959A (zh) * | 2016-06-12 | 2016-11-16 | 微梦创科网络科技(中国)有限公司 | 恶意应用识别方法及装置 |
CN106293967A (zh) * | 2016-08-03 | 2017-01-04 | 武汉斗鱼网络科技有限公司 | 一种远程注入代码的方法及系统 |
CN106528430A (zh) * | 2016-12-01 | 2017-03-22 | 北京金山安全软件有限公司 | 一种应用程序的检测方法、装置及电子设备 |
CN106557424A (zh) * | 2016-11-18 | 2017-04-05 | 腾讯科技(深圳)有限公司 | 内存测试方法、被测终端、测试客户端及系统 |
CN106933683A (zh) * | 2017-03-07 | 2017-07-07 | 深圳市盛弘电气股份有限公司 | 用于不同对象间信号与槽函数的通信方法及装置 |
CN107220258A (zh) * | 2016-03-22 | 2017-09-29 | 阿里巴巴集团控股有限公司 | 用于抓取应用页面的数据的方法、装置及终端 |
CN107391719A (zh) * | 2017-07-31 | 2017-11-24 | 南京邮电大学 | 一种云环境中分布式流数据处理方法及系统 |
US20170371688A1 (en) * | 2016-06-22 | 2017-12-28 | Samsung Electronics Co., Ltd. | Method for providing additional information about application and electronic device for supporting the same |
-
2018
- 2018-01-25 CN CN201810074997.3A patent/CN110083520B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2002097610A1 (en) * | 2001-05-30 | 2002-12-05 | Bea Systems, Inc. | System and method for software component plug-in framework |
CN1632761A (zh) * | 2003-12-24 | 2005-06-29 | 华为技术有限公司 | 一种遍历和访问被测应用程序中对象的方法 |
CN102521136A (zh) * | 2011-12-31 | 2012-06-27 | 山东中创软件商用中间件股份有限公司 | 一种应用程序监控装置及方法 |
CN105528179A (zh) * | 2014-10-17 | 2016-04-27 | 卡巴斯基实验室股份制公司 | 存储器位置之间控制的转移的系统和方法 |
CN107220258A (zh) * | 2016-03-22 | 2017-09-29 | 阿里巴巴集团控股有限公司 | 用于抓取应用页面的数据的方法、装置及终端 |
CN106130959A (zh) * | 2016-06-12 | 2016-11-16 | 微梦创科网络科技(中国)有限公司 | 恶意应用识别方法及装置 |
US20170371688A1 (en) * | 2016-06-22 | 2017-12-28 | Samsung Electronics Co., Ltd. | Method for providing additional information about application and electronic device for supporting the same |
CN106293967A (zh) * | 2016-08-03 | 2017-01-04 | 武汉斗鱼网络科技有限公司 | 一种远程注入代码的方法及系统 |
CN106557424A (zh) * | 2016-11-18 | 2017-04-05 | 腾讯科技(深圳)有限公司 | 内存测试方法、被测终端、测试客户端及系统 |
CN106528430A (zh) * | 2016-12-01 | 2017-03-22 | 北京金山安全软件有限公司 | 一种应用程序的检测方法、装置及电子设备 |
CN106933683A (zh) * | 2017-03-07 | 2017-07-07 | 深圳市盛弘电气股份有限公司 | 用于不同对象间信号与槽函数的通信方法及装置 |
CN107391719A (zh) * | 2017-07-31 | 2017-11-24 | 南京邮电大学 | 一种云环境中分布式流数据处理方法及系统 |
Non-Patent Citations (2)
Title |
---|
李红竹: "基于OpenGL的事件信息展示平台设计与开发", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
连仁包等: "基于共享内存的松耦合日志系统研究和设计", 《计算机应用与软件》 * |
Also Published As
Publication number | Publication date |
---|---|
CN110083520B (zh) | 2022-09-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU2016204068B2 (en) | Data acceleration | |
Dallmeier et al. | Mining object behavior with ADABU | |
WO2019085061A1 (zh) | 基金系统自动化测试管理方法、装置、设备及存储介质 | |
US9483648B2 (en) | Security testing for software applications | |
CN109684370A (zh) | 日志数据处理方法、系统、设备及存储介质 | |
CN109302522A (zh) | 测试方法、装置以及计算机系统和介质 | |
CN107133174A (zh) | 测试用例代码自动生成装置与方法 | |
CN107832207A (zh) | 接口性能测试方法、装置、存储介质和计算机设备 | |
CN108763091A (zh) | 用于回归测试的方法、装置及系统 | |
US10509719B2 (en) | Automatic regression identification | |
CN109684052A (zh) | 事务分析方法、装置、设备及存储介质 | |
CN105653949B (zh) | 一种恶意程序检测方法及装置 | |
US10365995B2 (en) | Composing future application tests including test action data | |
CN109460663A (zh) | 一种智能合约审计方法、装置及其存储介质 | |
US20210157671A1 (en) | Automated generation of an information technology asset ontology | |
CN104899016A (zh) | 调用堆栈关系获取方法及装置 | |
US20220269736A1 (en) | Identifying web elements based on user browsing activity and machine learning | |
CN109753286A (zh) | 一种基于功能标签的代码方法统计其调用次数的方法 | |
Theisen et al. | Risk-based attack surface approximation: how much data is enough? | |
WO2017164856A1 (en) | Comparable user interface object identifications | |
CN109840210A (zh) | 一种测试方法、装置及电子设备 | |
US10719482B2 (en) | Data comparison | |
CN107016043A (zh) | 一种信息处理方法及装置 | |
US10042638B2 (en) | Evaluating documentation coverage | |
Arcaini et al. | ROBY: a tool for robustness analysis of neural network classifiers |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |