CN110609703A - 性能检测工具实现方法、装置、可读存储介质及终端设备 - Google Patents

性能检测工具实现方法、装置、可读存储介质及终端设备 Download PDF

Info

Publication number
CN110609703A
CN110609703A CN201910882724.6A CN201910882724A CN110609703A CN 110609703 A CN110609703 A CN 110609703A CN 201910882724 A CN201910882724 A CN 201910882724A CN 110609703 A CN110609703 A CN 110609703A
Authority
CN
China
Prior art keywords
target
configuration information
plug
file
configuration
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
Application number
CN201910882724.6A
Other languages
English (en)
Other versions
CN110609703B (zh
Inventor
姜凡
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201910882724.6A priority Critical patent/CN110609703B/zh
Publication of CN110609703A publication Critical patent/CN110609703A/zh
Application granted granted Critical
Publication of CN110609703B publication Critical patent/CN110609703B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Computer Security & Cryptography (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明实施例提供一种性能检测工具实现方法、装置、可读存储介质及终端设备,通过插件可以读取的文件进行信息配置,通过插件读取配置信息并在编译阶段在源文件中确定目标源代码,并在由目标源代码编译得到的字节码文件中注入预置的测试代码;还通过插件将配置信息传递到库,以便访问库的代码在待检测应用程序运行过程中能够读取到配置信息,并根据配置信息确定目标线程和/或目标进程,对目标线程和/或目标进程进行检测。实现了性能检测工具的灵活可配置。

Description

性能检测工具实现方法、装置、可读存储介质及终端设备
技术领域
本发明涉及信息处理技术领域,具体涉及一种性能检测工具实现方法、装置、可读存储介质及终端设备。
背景技术
在应用程序(Application,APP)的开发过程中,对应用程序的性能进行检测是对应用程序进行优化的重要环节之一。而目前的性能检测工具虽然多种多样,但都普遍存在灵活性差的问题,具体表现为无法进行配置,使得检测输出过于详细或不够详细,无法满足分析人员的具体需求。
因而,如何提高性能检测工具的灵活性成为亟待解决的技术问题。
发明内容
有鉴于此,本发明实施例提供一种性能检测工具实现方法、装置、可读存储介质及终端设备,以提高性能检测工具的灵活性。
为实现上述目的,本发明实施例提供如下技术方案:
第一方面,提供一种性能检测工具实现方法,包括:
插件从配置文件中读取配置信息,所述配置信息中包括源文件相关配置信息,以及线程和进程相关配置信息;
所述插件根据所述源文件相关配置信息在待检测应用程序的源文件中确定目标源代码,并在由所述目标源代码编译得到的字节码文件中注入预置的测试代码;
所述插件将所述配置信息传递到库,以便访问库的代码在所述待检测应用程序运行过程中读取所述配置信息,并根据所述配置信息确定目标线程和/或目标进程,对所述目标线程和/或目标进程进行检测。
第二方面,提供一种性能检测工具实现装置,包括:
读取模块,用于通过插件从配置文件中读取配置信息,所述配置信息中包括源文件相关配置信息,以及线程和进程相关配置信息;
确定模块,用于通过所述插件根据所述源文件相关配置信息在待检测应用程序的源文件中确定目标源代码,并在由所述目标源代码编译得到的字节码文件中注入预置的测试代码;
传递模块,用于通过所述插件将所述配置信息传递到库,以便访问库的代码在所述待检测应用程序运行过程中读取所述配置信息,并根据所述配置信息确定目标线程和/或目标进程,对所述目标线程和/或目标进程进行检测。
第三方面,提供一种终端设备,包括存储器和处理器;
所述存储器,用于存储程序;
所述处理器,用于执行所述程序,实现如上任一项所述的性能检测工具实现方法的各个步骤。
第四方面,提供一种可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现如上任一项所述的性能检测工具实现方法的各个步骤。
本发明实施例提供的性能检测工具实现方法、装置、可读存储介质及终端设备,通过插件可以读取的文件进行信息配置,通过插件读取配置信息并在编译阶段在源文件中确定目标源代码,并在由目标源代码编译得到的字节码文件中注入预置的测试代码;还通过插件将配置信息传递到库,以便访问库的代码在待检测应用程序运行过程中能够读取到配置信息,并根据配置信息确定目标线程和/或目标进程,对目标线程和/或目标进程进行检测。实现了性能检测工具的灵活可配置。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的检测工具实现方法的架构图;
图2为本发明实施例提供的性能检测工具实现方法的一种实现流程图;
图3为本发明实施例提供的插件将配置信息传递到库的一种实现流程图;
图4为本发明实施例提供的性能检测工具实现装置的一种结构示意图;
图5为本发明实施例提供的终端设备的硬件结构框图的示例图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了方便对本申请方案进行理解,首先对本申请涉及到的一些概念进行解释说明:
AOP—Aspect Oriented Programming,面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
Gradle插件—Android中的开发完成的AOP能力最终会打包输出成Gradle插件的形式,发布出去给各APP工程使用。
ASM—字节码操控框架,一款基于Java字节码层面的代码分析和修改工具。是用来实现AOP的常用工具之一。
库—Android开发中的一种对外发布的SDK工具。可以和Gradle插件进行合作,Gradle插件可以基于ASM,将使用库的代码***到主工程的源码中。
本申请公开的性能检测工具实现方法的基本思想是:通过插件可以读取的文件与分析人员进行交互,使得分析人员通过一个文件就可以实现对性能检测工具的所有可配置项的配置;对配置项配置完成后,可以通过插件读取配置文件中的配置信息,插件一方面在编译阶段根据配置信息在源文件中确定目标源代码,并在由目标源代码编译得到的字节码文件中注入预置的测试代码;插件另一方面将配置信息传递到库,以便访问库的代码在待检测应用程序运行过程中能够读取到配置信息,并根据配置信息确定目标线程和/或目标进程,对目标线程和/或目标进程进行检测,从而实现了性能检测工具的灵活可配置。
本申请实施例中,性能检测工具的配置项分为两大类:
1、源文件相关配置,也可称为AOP配置,包括:源文件白名单配置,任务类型配置等。其中,源文件白名单用于定义源文件中不需要进行性能检测的目标源代码。而任务类型则是用于定义需要进行检测的源文件的目标编译打包类型,即只有源文件的编译打包类型为任务类型定义的目标编译打包类型时,才会对源文件进行性能测试。
2、线程和进程相关配置,即库相关配置,包括:目标线程配置,目标进程配置,最小执行耗时阈值配置等。其中,目标线程用于定义需要被检测的线程;目标进程用于定义需要被检测的进程;最小执行耗时阈值用于定义需要输出检测结果的线程和进程,即对于线程而言,只有线程的执行耗时大于该最小执行耗时阈值时,才会输出该线程的执行耗时,否则不输出该线程的执行耗时,同理,对于进程而言,只有进程的执行耗时大于该最小执行耗时阈值时,才会输出该进程的执行耗时,否则不输出该进程的执行耗时。在一可选的实施例中,进程和线程可以对应不同的最小执行耗时阈值,即针对进程设置第一最小执行耗时阈值,针对线程设置第二最小执行耗时阈值,第一最小执行耗时阈值和第二最小执行耗时阈值可以相同,也可以不同。
在配置文件中,针对不同的配置项,分别定义了不同的属性键KEY,每个属性KEY的取值可以由至少一个关键字构成,不同的关键字之间可以用空格进行分割。例如,
对于源文件白名单配置,定义属性KEY为MethodTraceByPass。具体属性定义示例如下:MethodTraceByPass=android.support com.facebook okhttp3,本示例中,MethodTraceByPass的取值定义了三个白名单关键字:android.support、com.facebook和okhttp3。只要源文件中某个类文件的类名包含以上三个包名的其中一个,则该某个类文件就不会被性能检测工具检测,即不会进行测试代码注入。
对于任务类型配置,定义属性KEY为MethodTraceTarget。具体属性定义示例如下:MethodTraceTarget=debug,本示例中,定义了一个关键字debug。只要当前编译打包的打包类型buildType是debug结尾的。就会进行测试代码注入。其他编译打包类型(比如release包)就不会做任何注入。
对于目标线程配置,定义属性KEY为MethodTraceThread。具体属性定义示例如下:MethodTraceThread=main SurfaceDrawThread IOThread,该示例中,定义了三个关键字:main、SurfaceDrawThread和IOThread。只有线程名包含以上三个关键字的其中一个,才会被记录方法耗时,并输出到检测结果文件。其他线程的执行耗时,会被忽略掉,即不输出。避免输出过大。
对于目标进程配置,定义属性KEY:MethodTraceProcess。具体属性定义示例如下:MethodTraceProcess=main push,该示例中,定义了两个关键字:main和push。只有进程名包含以上两个关键字的其中一个,才会被记录方法耗时,并输出到检测结果文件。其他进程的执行耗时,会被忽略掉,即不输出。避免输出过大。
对于最小执行耗时阈值配置。定义了属性KEY:MethodTraceMinThreshold。具体属性定义示例如下:
MethodTraceMinThreshold=10,该示例中,定义了最小阈值10毫秒。方法(线程或进程)执行耗时大于10毫秒的才会被记录,并输出到检测结果文件。执行耗时小于10毫秒的方法,会被忽略掉,即不输出。避免输出过大。
如图1所示,为本申请实施例公开的基于上述配置项的性能检测工具实现方法的架构图。
对配置项配置完成后,通过插件读取配置文件中的配置信息,插件一方面在编译阶段根据白名单配置信息和任务类型配置信息在源文件中确定目标源代码,并在由目标源代码编译得到的字节码文件中注入预置的测试代码;插件另一方面将配置信息传递到库,以便访问库的代码在待检测应用程序运行过程中能够读取到线/进程配置信息和执行最小耗时阈值配置信息,并根据读取配置信息确定目标线程和/或目标进程,对目标线程和/或目标进程进行检测,从而实现了性能检测工具的灵活可配置。
基于上述基本思想,本申请实施例提供的性能检测工具实现方法的一种实现流程图如图2所示,可以包括:
步骤S21:插件从配置文件中读取配置信息,该配置信息中包括源文件相关配置信息,以及线程和进程相关配置信息。
其中,源文件相关配置信息用于源文件编译期(通常是在PC端实现)的配置,而线程和进程相关配置信息用于源文件对应的应用程序的运行期(在应用程序的可运行终端,例如手机端实现)的配置。也就是说,本申请实施例中,编译期和运行期的相关配置在同一个配置文件中配置即可。
源文件相关配置信息用于确定源文件中需要进行性能检测的目标源代码。该目标源代码可以为源文件中的至少一个类文件。线程相关配置信息用于确定运行阶段需要检测的目标线程,进程相关配置信息用于确定运行阶段需要检测的目标进程。
可选的,配置文件具体可以用于进行源文件白名单配置,任务类型配置,目标线程配置,目标进程配置和最小执行耗时阈值配置。其中,
源文件白名单用于定义源文件中无需进行检测的目标源代码;任务类型用于定义需要进行检测的源文件的目标编译打包类型;目标线程、目标进程用于定义需要被检测的线程和进程;最小执行耗时阈值用于定义需要输出检测结果的线程和进程。
步骤S22:插件根据源文件相关配置信息在待检测应用程序的源文件中确定目标源代码,并在由目标源代码编译得到的字节码文件中注入预置的测试代码。
插件可以通过ClassVisitor类中的visit函数获取源文件中的类文件的类名,然后将该类名与源文件白名单匹配,以确定类名中是否包含白名单中定义的任意一个包名,如果包括,说明该类文件不需要测试,则不会对该类文件注入测试代码,如果不包括,说明该类文件需要进行测试,则将该类文件确定为目标源代码,以在由该类文件编译得到的字节码文件中注入测试代码。
插件可以通过project.gradle.startParameter.taskNames获取当前任务的名字列表,对于名字列表中的任意一任务名,将该任务名中携带的任务类型信息与任务类型配置中定义的任务类型匹配,如果该任务名中携带的任务类型信息为任务类型配置中定义的任意一任务类型,则将该任务名对应的任务确定为目标源代码,以在当前打包的任务中注入测试代码。
具体注入测试代码的过程不是本申请的关注重点,其实现过程可以参看现有的实现方式,这里不再详述。
步骤S23:插件将配置信息传递到库,以便访问库的代码在待检测应用程序运行过程中读取配置信息,并根据配置信息确定目标线程和/或目标进程,对目标线程和/或目标进程进行检测。
对于库相关配置来说,必须要在组件库里面实现动态配置的能力,但配置文件只有插件能够读取,而组件库无法读取,基于此,本申请提出由插件将配置信息传递到库。
可选的,访问库的代码可以通过读取文件“/proc/<pid>/cmdline”的文件内容获取进程名,该方案是外部依赖最少的获取进程名的方案。作为一个组件库,要足够的内聚,外部使用越简单越好,如果外部使用需要提供很多信息给组件,就是外部依赖太多,则组件库易用性不够。因此,组件库的外部依赖越少越好。
可选的,访问库的代码通过Thread.currentThread().getName()可以非常容易的获取到线程名。
在获取到进程名后,可以将获取的进程名与配置文件中定义的进程名进行匹配,若获取的进程名为配置文件中定义的进程名中的任意一个,则对获取的进程名对应的进程进行耗时计算。进行耗时计算的过程具体可以为:对于每一个需要记录耗时的进程,记录该进程的启动时间和结束时间,将结束时间与启动时间的差值确定为该进程的运行耗时。
同理,获取到线程名后,可以将获取的线程名与配置文件中定义的线程名进行匹配,若获取的线程名为配置文件中定义的线程名中的任意一个,则对获取的线程名对应的线程进行耗时计算。进行耗时计算的过程具体可以为:对于每一个需要记录耗时的线程,记录该线程的启动时间和结束时间,将结束时间与启动时间的差值确定为该线程的运行耗时。
对于任意一计算运行耗时的进程,在计算出该进程的运行耗时后,将该进程的运行耗时与配置信息中的进程对应的最小执行耗时阈值进行匹配,若该进程的运行耗时大于进程对应的最小执行耗时阈值,则输出该进程的运行耗时,否则,不输出该进程的运行耗时。
同理,对于任意一计算运行耗时的线程,在计算出该线程的运行耗时后,将该线程的运行耗时与配置信息中的线程对应的最小执行耗时阈值进行匹配,若该线程的运行耗时大于线程对应的最小执行耗时阈值,则输出该线程的运行耗时,否则,不输出该线程的运行耗时。
本申请公开的性能检测工具实现方法,通过插件可以读取的文件进行信息配置,通过插件读取配置信息并在编译阶段在源文件中确定目标源代码,并在由目标源代码编译得到的字节码文件中注入预置的测试代码;还通过插件将配置信息传递到库,以便访问库的代码在待检测应用程序运行过程中能够读取到配置信息,并根据配置信息确定目标线程和/或目标进程,对目标线程和/或目标进程进行检测。实现了性能检测工具的灵活可配置。
在一可选的实施例中,上述插件将配置信息传递到库的一种实现流程图如图3所示,可以包括:
步骤S31:插件将配置信息转换为字符串。
可选的,可以将配置信息转换为Json字符串。
步骤S32:插件在源文件中与库访问相关的目标类中添加常量属性,该常量属性的值为上述字符串,以便由源文件中的访问库的代码编译得到的字节码文件在待检测应用程序运行过程中通过反射读取上述字符串,并根据读取的字符串确定目标线程和/或目标进程,对目标线程和/或目标进程进行检测。
可选的,目标类可以为配置相关的类,例如,Config类。
在一可选的实施例中,上述插件从配置文件中读取配置信息的一种实现方式可以为:
插件根据内置的属性键,从配置文件中读取属性键的取值;属性键包括源文件相关的属性键,以及线程和进程相关的属性键。
本申请实施例中,插件中预置了所有属性的KEY,插件在初始化的时候,可以根据属性KEY,逐个读取配置文件里的属性取值。
将属性键及对应的取值按照映射数据结构保存为配置信息。
可选的,可以将属性键及对应的取值保存到一个Map<String,String[]>的数据结构里面。
在一可选的实施例中,上述插件可以为gradle插件,上述配置文件可以为gradle.properties文件。
gradle插件可以通过project.findProperty(String KEY)函数直接在gradle.properties文件中读取属性值。
在一可选的实施例中,上述插件在源文件的目标类中添加常量属性的一种实现方式可以为:
插件通过字节码操控框架ASM在源文件的目标类中添加常量属性。具体的,可以通过ASM提供的ClassVisitor.visitField()函数在源文件的目标类中添加常量属性。
常量属性被代码注入生成以后,因为是编译后才生成的代码,所以访问库的代码是不能直接读取该属性值的,需要通过反射,才能读取到由配置信息转换为的字符串,然后将字符串转换成可以读取的配置信息。
与方法实施例相对应,本申请还提供一种性能检测工具实现装置,本申请实施例提供的性能检测工具实现装置的一种结构示意图如图4所示,可以包括:
读取模块41,确定模块42和传递模块43;其中,
读取模块41用于通过插件从配置文件中读取配置信息,所述配置信息中包括源文件相关配置信息,以及线程和进程相关配置信息;
确定模块42用于通过所述插件根据所述源文件相关配置信息在待检测应用程序的源文件中确定目标源代码,并在由所述目标源代码编译得到的字节码文件中注入预置的测试代码;
传递模块43用于通过所述插件将所述配置信息传递到库,以便访问库的代码在所述待检测应用程序运行过程中读取所述配置信息,并根据所述配置信息确定目标线程和/或目标进程,对所述目标线程和/或目标进程进行检测。
本申请实施例提供的性能检测工具实现装置,通过插件可以读取的文件进行信息配置,通过插件读取配置信息并在编译阶段在源文件中确定目标源代码,并在由目标源代码编译得到的字节码文件中注入预置的测试代码;还通过插件将配置信息传递到库,以便访问库的代码在待检测应用程序运行过程中能够读取到配置信息,并根据配置信息确定目标线程和/或目标进程,对目标线程和/或目标进程进行检测。实现了性能检测工具的灵活可配置。
在一可选的实施例中,所述传递模块43包括:
转换单元,用于通过所述插件将所述配置信息转换为字符串;
添加单元,用于通过所述插件在所述源文件中与库访问相关的目标类中添加常量属性,所述常量属性的值为所述字符串,以便由所述源文件中的访问库的代码编译得到的字节码文件在所述待检测应用程序运行过程中通过反射读取所述字符串,并根据所述字符串确定目标线程和/或目标进程,对所述目标线程和/或目标进程进行检测。
在一可选的实施例中,所述配置文件用于进行源文件白名单配置,任务类型配置,目标线程配置,目标进程配置和最小执行耗时阈值配置;
其中,所述源文件白名单用于定义源文件中无需进行检测的目标源代码,所述任务类型用于定义需要进行检测的源文件的目标编译打包类型;所述目标线程、所述目标进程用于定义需要被检测的线程和进程;所述最小执行耗时阈值用于定义需要输出检测结果的线程和进程。
在一可选的实施例中,读取模块41包括:
读取单元,用于通过所述插件,根据内置的属性键,从所述配置文件中读取所述属性键的取值;所述属性键包括源文件相关的属性键,以及线程和进程相关的属性键;
保存单元,用于将所述属性键及对应的取值按照映射数据结构保存为配置信息。
在一可选的实施例中,所述插件可以为gradle插件,所述配置文件可以为gradle.properties文件。
在一可选的实施例中,所述插件在所述源文件的目标类中添加常量属性,可以包括:
所述插件通过字节码操控框架ASM在所述源文件的目标类中添加常量属性。
本发明实施例还提供一种终端设备,该终端设备可以配置上述性能检测工具实现装置。本发明实施例提供的终端设备的硬件结构框图的示例图如图5所示,可以包括:
处理器1,通信接口2,存储器3和通信总线4;
其中处理器1、通信接口2、存储器3通过通信总线4完成相互间的通信;
可选的,通信接口2可以为通信模块的接口,如GSM模块的接口;
处理器1可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
存储器3可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。
其中,处理器1具体用于执行存储3中存储的程序,以实现如下步骤:
通过插件从配置文件中读取配置信息,所述配置信息中包括源文件相关配置信息,以及线程和进程相关配置信息;
通过所述插件根据所述源文件相关配置信息在待检测应用程序的源文件中确定目标源代码,并在由所述目标源代码编译得到的字节码文件中注入预置的测试代码;
通过所述插件将所述配置信息传递到库,以便访问库的代码在所述待检测应用程序运行过程中读取所述配置信息,并根据所述配置信息确定目标线程和/或目标进程,对所述目标线程和/或目标进程进行检测。
可选的,处理器1在通过所述插件将所述配置信息传递到库时,具体可以用于:
通过所述插件将所述配置信息转换为字符串;
通过所述插件在所述源文件中与库访问相关的目标类中添加常量属性,所述常量属性的值为所述字符串,以便由所述源文件中的访问库的代码编译得到的字节码文件在所述待检测应用程序运行过程中通过反射读取所述字符串,并根据所述字符串确定目标线程和/或目标进程,对所述目标线程和/或目标进程进行检测。
可选的,所述配置文件用于进行源文件白名单配置,任务类型配置,目标线程配置,目标进程配置和最小执行耗时阈值配置;
其中,所述源文件白名单用于定义源文件中无需进行检测的目标源代码,所述任务类型用于定义需要进行检测的源文件的目标编译打包类型;所述目标线程、所述目标进程用于定义需要被检测的线程和进程;所述最小执行耗时阈值用于定义需要输出检测结果的线程和进程。
可选的,处理器1通过所述插件从配置文件中读取配置信息时,具体可以用于:
通过所述插件,根据内置的属性键,从所述配置文件中读取所述属性键的取值;所述属性键包括源文件相关的属性键,以及线程和进程相关的属性键;
将所述属性键及对应的取值按照映射数据结构保存为配置信息。
可选的,所述插件为gradle插件,所述配置文件为gradle.properties文件。
可选的,处理器1通过所述插件在所述源文件的目标类中添加常量属性时,具体可以用于:
通过所述插件利用字节码操控框架ASM在所述源文件的目标类中添加常量属性。
本申请实施例还提供一种可读存储介质,该存储介质可存储有适于处理器执行的程序,所述程序用于:
通过插件从配置文件中读取配置信息,所述配置信息中包括源文件相关配置信息,以及线程和进程相关配置信息;
通过所述插件根据所述源文件相关配置信息在待检测应用程序的源文件中确定目标源代码,并在由所述目标源代码编译得到的字节码文件中注入预置的测试代码;
通过所述插件将所述配置信息传递到库,以便访问库的代码在所述待检测应用程序运行过程中读取所述配置信息,并根据所述配置信息确定目标线程和/或目标进程,对所述目标线程和/或目标进程进行检测。
可选的,所述程序的细化功能和扩展功能可参照上文描述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的核心思想或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (10)

1.一种性能检测工具实现方法,其特征在于,包括:
插件从配置文件中读取配置信息,所述配置信息中包括源文件相关配置信息,以及线程和进程相关配置信息;
所述插件根据所述源文件相关配置信息在待检测应用程序的源文件中确定目标源代码,并在由所述目标源代码编译得到的字节码文件中注入预置的测试代码;
所述插件将所述配置信息传递到库,以便访问库的代码在所述待检测应用程序运行过程中读取所述配置信息,并根据所述配置信息确定目标线程和/或目标进程,对所述目标线程和/或目标进程进行检测。
2.根据权利要求1所述的方法,其特征在于,所述插件将所述配置信息传递到库,包括:
所述插件将所述配置信息转换为字符串;
所述插件在所述源文件中与库访问相关的目标类中添加常量属性,所述常量属性的值为所述字符串,以便由所述源文件中的访问库的代码编译得到的字节码文件在所述待检测应用程序运行过程中通过反射读取所述字符串,并根据所述字符串确定目标线程和/或目标进程,对所述目标线程和/或目标进程进行检测。
3.根据权利要求1所述的方法,其特征在于,所述配置文件用于进行源文件白名单配置,任务类型配置,目标线程配置,目标进程配置和最小执行耗时阈值配置;
其中,所述源文件白名单用于定义源文件中无需进行检测的目标源代码,所述任务类型用于定义需要进行检测的源文件的目标编译打包类型;所述目标线程、所述目标进程用于定义需要被检测的线程和进程;所述最小执行耗时阈值用于定义需要输出检测结果的线程和进程。
4.根据权利要求1所述的方法,其特征在于,所述插件从配置文件中读取配置信息包括:
所述插件根据内置的属性键,从所述配置文件中读取所述属性键的取值;所述属性键包括源文件相关的属性键,以及线程和进程相关的属性键;
将所述属性键及对应的取值按照映射数据结构保存为配置信息。
5.根据权利要求1所述的方法,其特征在于,所述插件为gradle插件,所述配置文件为gradle.properties文件。
6.根据权利要求1所述的方法,其特征在于,所述插件在所述源文件的目标类中添加常量属性,包括:
所述插件通过字节码操控框架ASM在所述源文件的目标类中添加常量属性。
7.一种性能检测工具实现装置,其特征在于,包括:
读取模块,用于通过插件从配置文件中读取配置信息,所述配置信息中包括源文件相关配置信息,以及线程和进程相关配置信息;
确定模块,用于通过所述插件根据所述源文件相关配置信息在待检测应用程序的源文件中确定目标源代码,并在由所述目标源代码编译得到的字节码文件中注入预置的测试代码;
传递模块,用于通过所述插件将所述配置信息传递到库,以便访问库的代码在所述待检测应用程序运行过程中读取所述配置信息,并根据所述配置信息确定目标线程和/或目标进程,对所述目标线程和/或目标进程进行检测。
8.根据权利要求7所述的装置,其特征在于,所述传递模块包括:
转换单元,用于通过所述插件将所述配置信息转换为字符串;
添加单元,用于通过所述插件在所述源文件中与库访问相关的目标类中添加常量属性,所述常量属性的值为所述字符串,以便由所述源文件中的访问库的代码编译得到的字节码文件在所述待检测应用程序运行过程中通过反射读取所述字符串,并根据所述字符串确定目标线程和/或目标进程,对所述目标线程和/或目标进程进行检测。
9.一种终端设备,其特征在于,包括存储器和处理器;
所述存储器,用于存储程序;
所述处理器,用于执行所述程序,实现如权利要求1-6中任一项所述的性能检测工具实现方法的各个步骤。
10.一种可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现如权利要求1-6中任一项所述的性能检测工具实现方法的各个步骤。
CN201910882724.6A 2019-09-18 2019-09-18 性能检测工具实现方法、装置、可读存储介质及终端设备 Active CN110609703B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910882724.6A CN110609703B (zh) 2019-09-18 2019-09-18 性能检测工具实现方法、装置、可读存储介质及终端设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910882724.6A CN110609703B (zh) 2019-09-18 2019-09-18 性能检测工具实现方法、装置、可读存储介质及终端设备

Publications (2)

Publication Number Publication Date
CN110609703A true CN110609703A (zh) 2019-12-24
CN110609703B CN110609703B (zh) 2024-02-23

Family

ID=68891737

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910882724.6A Active CN110609703B (zh) 2019-09-18 2019-09-18 性能检测工具实现方法、装置、可读存储介质及终端设备

Country Status (1)

Country Link
CN (1) CN110609703B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111931185A (zh) * 2020-08-11 2020-11-13 深信服科技股份有限公司 一种Java反序列化漏洞检测方法及组件
CN112114810A (zh) * 2020-08-13 2020-12-22 浙江大搜车融资租赁有限公司 编译处理方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103297381A (zh) * 2012-02-22 2013-09-11 阿里巴巴集团控股有限公司 一种基于插件的业务访问方法及其***
CN104156235A (zh) * 2014-07-22 2014-11-19 北京奇虎科技有限公司 一种浏览器插件和/或扩展的更新方法和装置
CN110134400A (zh) * 2019-04-02 2019-08-16 北京奇艺世纪科技有限公司 数据获取方法、装置、电子设备及计算机可读存储介质

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103297381A (zh) * 2012-02-22 2013-09-11 阿里巴巴集团控股有限公司 一种基于插件的业务访问方法及其***
CN104156235A (zh) * 2014-07-22 2014-11-19 北京奇虎科技有限公司 一种浏览器插件和/或扩展的更新方法和装置
CN110134400A (zh) * 2019-04-02 2019-08-16 北京奇艺世纪科技有限公司 数据获取方法、装置、电子设备及计算机可读存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111931185A (zh) * 2020-08-11 2020-11-13 深信服科技股份有限公司 一种Java反序列化漏洞检测方法及组件
CN112114810A (zh) * 2020-08-13 2020-12-22 浙江大搜车融资租赁有限公司 编译处理方法及装置

Also Published As

Publication number Publication date
CN110609703B (zh) 2024-02-23

Similar Documents

Publication Publication Date Title
Sen et al. Jalangi: A selective record-replay and dynamic analysis framework for JavaScript
US8997070B2 (en) Extension mechanism for scripting language compiler
US8381175B2 (en) Low-level code rewriter verification
CN104050080B (zh) 用户态调试linux内核的方法及***
US20120005650A1 (en) Hardware specific code generation
CN111309335B (zh) 插件应用的编译方法、装置及计算机可读存储介质
Li et al. Program tailoring: Slicing by sequential criteria
EP2706459B1 (en) Apparatus and method for validating a compiler for a reconfigurable processor
JP6142705B2 (ja) オブジェクト指向言語のための記号テストドライバの反復生成
CN111913741B (zh) 对象拦截方法、装置、介质及电子设备
CN107832059A (zh) 一种基于Makefile的代码静态分析方法和装置
CN110609703B (zh) 性能检测工具实现方法、装置、可读存储介质及终端设备
WO2013160732A1 (en) Method and system for generating a memory trace of a program code executable on a programmable target
CN110825386A (zh) 代码的编译方法和装置、存储介质
WO2014200803A1 (en) Using a static analysis for configuring a follow-on dynamic analysis for the evaluation of program code
CN111290740B (zh) 应用程序的开发方法、装置、计算机设备和存储介质
CN112527386B (zh) 应用程序发布方法及装置
US11474795B2 (en) Static enforcement of provable assertions at compile
CN106933642B (zh) 应用程序的处理方法及处理装置
CN108664389B (zh) 一种测试方法、装置及终端
CN112861138A (zh) 软件安全性分析方法及分析装置、电子设备及存储介质
CN116578282A (zh) 代码生成方法、装置、电子设备及介质
CN107451050B (zh) 函数获取方法和装置、服务器
CN112953721B (zh) 一种ipa文件的解析方法、装置、设备及存储介质
KR101476536B1 (ko) 프로그램 검수 방법 및 시스템

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