CN113900896B - 一种代码运行的监测方法、装置、设备及存储介质 - Google Patents
一种代码运行的监测方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN113900896B CN113900896B CN202111180699.0A CN202111180699A CN113900896B CN 113900896 B CN113900896 B CN 113900896B CN 202111180699 A CN202111180699 A CN 202111180699A CN 113900896 B CN113900896 B CN 113900896B
- Authority
- CN
- China
- Prior art keywords
- target
- monitoring
- obtaining
- methods
- code
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 263
- 238000012544 monitoring process Methods 0.000 title claims abstract description 125
- 230000006870 function Effects 0.000 claims abstract description 90
- 238000013507 mapping Methods 0.000 claims description 18
- 238000009941 weaving Methods 0.000 claims description 14
- 230000003068 static effect Effects 0.000 claims description 11
- 238000012545 processing Methods 0.000 claims description 8
- 238000004590 computer program Methods 0.000 claims description 7
- 238000012806 monitoring device Methods 0.000 claims description 7
- 238000012423 maintenance Methods 0.000 abstract description 9
- 239000003795 chemical substances by application Substances 0.000 description 28
- 230000006399 behavior Effects 0.000 description 8
- 239000000243 solution Substances 0.000 description 8
- 238000010586 diagram Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000007639 printing Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例公开了一种代码运行的监测方法、装置、设备及存储介质,该方法包括:获取待面向切面编程AOP的目标类,并在目标类中确定至少一个目标方法;获取各目标方法对应的目标对象,并通过分别对目标对象进行动态代理,获取各目标对象匹配的目标代理函数;对各目标代理函数的运行情况进行监测,获取运行监测结果,并根据运行监测结果,确定各目标方法的运行情况。本发明实施例的技术方案,通过获取待监测方法对应的目标对象,并对该目标对象进行统一的动态代理,实现了对大量方法的高效监测,同时降低了进行AOP时需要编写织入代码的代码数量和代码复杂度,进而降低了织入代码的维护成本。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种代码运行的监测方法、装置、设备及存储介质。
背景技术
通过面向切面编程(Aspect Oriented Programming,AOP)对类中方法进行代码插桩,可以实现对一个类中某些特征方法或者全部方法的运行监测或拦截,对提升方法的改写或者采集效率具有重要意义。
目前,在现有的AOP方法中,如果需要对某些特征性方法,或者整个类中的所有方法进行方法注入时,由于字节码静态存储的特性,针对每一个需要织入逻辑的方法都需要单独编写对应织入代码。而当待AOP的方法数量级较大时,会大大增加织入代码的编码工作量和编码复杂度,同时也会增加织入代码的维护成本。
发明内容
本发明实施例提供一种代码运行的监测方法、装置、设备及存储介质,可以实现对大量方法的高效监测,降低AOP织入代码的代码数量和代码复杂度,降低织入代码的维护成本。
第一方面,本发明实施例提供了一种代码运行的监测方法,包括:
获取待面向切面编程AOP的目标类,并在所述目标类中确定至少一个目标方法;
获取各目标方法对应的目标对象,并通过分别对各所述目标对象进行动态代理,获取各所述目标对象匹配的目标代理函数;
对各目标代理函数的运行情况进行监测,获取运行监测结果,并根据所述运行监测结果,确定所述各目标方法的运行情况。
第二方面,本发明实施例还提供了一种代码运行的监测装置,包括:
目标方法确定模块,用于获取待面向切面编程AOP的目标类,并在所述目标类中确定至少一个目标方法;
目标代理函数确定模块,用于获取各目标方法对应的目标对象,并通过分别对各所述目标对象进行动态代理,获取各所述目标对象匹配的目标代理函数;
运行监测模块,用于对各目标代理函数的运行情况进行监测,获取运行监测结果,并根据所述运行监测结果,确定所述各目标方法的运行情况。
第三方面,本发明实施例还提供了一种计算机设备,该计算机设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器执行本发明任意实施例提供的代码运行的监测方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,该存储介质上存储有计算机程序,该程序被处理器执行时实现本发明任意实施例提供的代码运行的监测方法。
本发明实施例提供的技术方案,首先,获取待面向切面编程AOP的目标类,并在目标类中确定多个目标方法;其次,获取各目标方法对应的目标对象,并通过分别对各目标对象进行动态代理,获取各目标对象匹配的目标代理函数;最终,对各目标代理函数的运行情况进行监测,获取运行监测结果,并根据运行监测结果,确定各目标方法的运行情况;通过获取待监测方法对应的目标对象,并对该目标对象进行统一的动态代理,实现了对大量方法的高效监测,同时降低了进行AOP时需要编写织入代码的代码数量和代码复杂度,进而降低了织入代码的维护成本。
附图说明
图1是本发明一实施例中的一种代码运行的监测方法的流程图;
图2A是本发明另一实施例中的一种代码运行的监测方法的流程图;
图2B是本发明另一实施例中的一种代码运行的监测方法的流程示意图;
图3是本发明另一实施例中的一种代码运行的监测装置的结构示意图;
图4是本发明另一实施例中的一种计算机设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本发明的实施例。虽然附图中显示了本发明的某些实施例,然而应当理解的是,本发明可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本发明。应当理解的是,本发明的附图及实施例仅用于示例性作用,并非用于限制本发明的保护范围。
应当理解,本发明的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本发明的范围在此方面不受限制。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
需要注意,本发明中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
需要注意,本发明中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
本发明实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
图1为本发明一实施例提供的一种代码运行的监测方法的流程图,本发明实施例可适用于通过对待监测方法的对象进行统一的动态代理,实现对大量方法运行监测的情况,该方法可以由代码运行的监测装置来执行,该装置可由硬件和/或软件组成,并一般可集成在计算机设备中。如图1所示,该方法具体包括如下步骤:
S110、获取待面向切面编程AOP的目标类,并在所述目标类中确定至少一个目标方法。
其中,面向切面编程(Aspect Oriented Programming,AOP),可以通过预编译和运行期动态代理方式,实现在不修改源代码的情况下为程序动态统一添加功能。通过AOP,可以将日志记录、性能统计、安全控制、事务处理以及异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,后续在需要对这些行为进行调整时,可以不影响业务逻辑代码;由此,可以实现业务逻辑代码的复用,降低业务逻辑各部分之间的耦合度,提升整体开发代码的复用性,提升代码开发效率。
目标类,为当前需要进行运行监测的类,是对某种类型的对象定义变量和方法的原型;在本实施例中,目标类的数量可以是一个,也可以是多个。目标方法,是指目标类的全部方法中,当前需要进行AOP的方法;目标方法的数量同样可以是一个,也可以是多个;以目标类为SharedPreferences,当需要对SharedPreferences中的全部get方法进行运行监控时,则目标方法为SharedPreferences中的全部get方法,例如,getALL、getBoolean以及getFloat等。
在本实施例中,可以通过获取代码监测任务,并对代码监测任务进行解析,以获取需要进行AOP的目标类和对应的目标方法;进一步的,可以通过ASM框架,在业务代码中提取目标类,以及在目标类中提取多个目标方法。其中,ASM是一个Java字节码操控框架,可以以二进制形式直接修改已有类或者动态生成类,实现对类行为的修改。
在本实施例的一个可选的实施方式中,在所述目标类中确定至少一个目标方法,可以包括:获取目标关键字,并根据所述目标关键字,在所述目标类中获取至少一个包括所述目标关键字的目标方法。
其中,目标关键字,可以是需要查找的目标方法的关键字或词;在本实施例中,可以根据代码监测任务,获取目标关键字,进而可以根据该目标关键字,在业务代码中进行匹配查找,以定位和获取包括该目标关键字的目标方法。值的注意的是,在本实施例中,由于不需要针对每一个方法进行代码织入,故不需获取各目标方法的完整代码,只需获取目标方法对应的首行代码即可,可以降低目标方法的获取难度。
S120、获取各目标方法对应的目标对象,并通过分别对各所述目标对象进行动态代理,获取各所述目标对象匹配的目标代理函数。
其中,目标对象,是指目标类对应的一个实例,可以实现对类中多个方法的调用;一个目标对象可以对应一个目标方法,也可以对应多个目标方法。
动态代理,是指在在程序运行期间,创建目标对象的代理对象,并对目标对象中的方法进行功能性调整或者增强。值的注意的是,在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法。在本实施例中,在获取到目标对象之后,通过对目标对象进行动态代理,可以在程序代码运行期间,实现对目标对象对应目标方法的动态拦截。
在本实施例中,在确定需要进行AOP的多个目标方法之后,可以获取每一个目标方法的变量作为对应的目标对象;例如,目标方法为getSharedProferences,则可以通过Context.getSharedProferences(Context,int),获取目标方法中的目标对象,或者可以通过new关键字生成进行获取。在获取到目标对象之后,可以根据目标对象,以及需要实现的增强办法,构建与目标对象对应的目标代理函数。其中,目标代理函数与目标对象一一对应。
在本实施例的一个可选的实施方式中,获取各目标方法对应的目标对象,可以包括:通过静态代理函数,对各目标方法进行对象实例化,获取各目标方法对应的目标对象。
其中,静态代理,是指为某个对象提供一个代理对象,代理对象的角色固定,以通过代理对象替代原对象进行方法的访问;对应的,静态代理函数,是指实现静态代理的程序代码。在本实施例中,通过静态代理机制,将目标方法的对象实例化出来,以获取目标方法对应的目标对象,可以实现对目标对象的高效获取。
S130、对各目标代理函数的运行情况进行监测,获取运行监测结果,并根据所述运行监测结果,确定所述各目标方法的运行情况。
需要说明的是,在获取到与各目标对象匹配的目标代理函数之后,当目标对象需要调用目标方法时,由于已经对目标对象进行了动态代理,此时,目标对象将变更为调用目标代理函数,以通过目标代理函数实现对数据的访问或计算。由此,通过对各目标代理函数的运行情况进行实时监测,可以获取目标对象的调用行为以及其需要请求的数据,进而可以实现对目标方法的间接监控。
在本实施例中,当需要进行代码织入时,通过获取各目标方法对应的目标对象,进而对每个目标对象进行对应的动态代理,则可以实现对目标对象对应全部调用方法的监控;可以避免相关技术中针对每一个方法都需要单独的织入代码,以实现对当前类下大量方法的监控,可以极大降低织入代码的代码量和复杂度;同时,当需要对方法的行为进行调整时,只需对匹配目标对象的目标代理函数进行对应的修改即可,可以降低织入代码的维护成本。
本发明实施例提供的技术方案,首先,获取待面向切面编程AOP的目标类,并在目标类中确定多个目标方法;其次,获取各目标方法对应的目标对象,并通过分别对各目标对象进行动态代理,获取各目标对象匹配的目标代理函数;最终,对各目标代理函数的运行情况进行监测,获取运行监测结果,并根据运行监测结果,确定各目标方法的运行情况;通过获取待监测方法对应的目标对象,并对该目标对象进行统一的动态代理,实现了对大量方法的高效监测,同时降低了进行AOP时需要编写织入代码的代码数量和代码复杂度,进而降低了织入代码的维护成本。
本发明又一实施例提供了一种代码运行的监测方法,本实施例以上述实施例为基础,具体介绍在获取到与各目标对象匹配的目标代理函数之后,获取各目标方法对应的目标织入方法。
图2A为本发明又一实施例提供的代码运行的监测方法的流程图,本实施例以上述技术方案为基础,提供了一种代码运行的监测方法,该方法包括:
S210、获取待面向切面编程AOP的目标类,并在所述目标类中确定至少一个目标方法。
S220、获取各目标方法对应的目标对象,并通过分别对各所述目标对象进行动态代理,获取各所述目标对象匹配的目标代理函数。
在本实施例的一个可选的实施方式中,在获取各目标方法对应的目标对象之后,还可以包括:获取各目标方法与对应目标对象的目标映射关系,并对所述目标映射关系进行去重处理,获取无重复的目标映射关系。
在本实施例中,在每获取到一个目标方法对应的目标对象之后,可以对当前目标方法与目标对象的目标映射关系进行存储,直至完成对全部目标方法对应的目标对象的获取,可以获取到对应数量的目标方法和目标对象的目标映射关系。
需要说明的是,在同一目标类中,可能存在目标对象对某一目标方法重复调用情况;此时,获取的目标映射关系中,将存在许多重复的映射关系,可以对获取的目标映射关系进行去重处理,以获取无重复的目标映射关系。通过获取目标方法与目标对象的目标映射关系,后续在获取到目标对象针对目标代理函数的请求行为时,可以根据存储的目标映射关系,确定对应的目标方法,进而实现对目标方法的请求行为的监控。
在本实施例的另一个可选的实施方式中,通过分别对各所述目标对象进行动态代理,获取各所述目标对象匹配的目标代理函数,可以包括:获取预设监测任务,并根据所述预设监测任务、各目标方法和分别对应的各目标对象,获取各目标对象匹配的invoke函数。
其中,invoke函数,是一种动态代理方法,主要包括两个参数,分别为调用这个方法的实例和方法的属性;例如,test类中有一系列名字相似的方法setValue1、setValue2等,则可以把方法名存进数组v[],然后循环invoke(test,v[i]),就可以顺序调用全部setValue方法。在本实施例中,通过invoke函数,可以实现对目标对象的动态代理,进而实现对目标对象对应目标方法的运行监测,可以降低代码运行监测需要织入代码的代码数量,提升代码运行监测的效率。
预设监测任务,是指预先设置的方法运行监测任务,例如,目标方法的实现耗时监测和目标方法的行为改变等。在本实施例中,在获取到预设监测任务之后,可以获取各目标方法分别对应的监测任务,进而根据目标方法与目标对象的映射关系,编写各目标对象对应的invoke函数,以通过invoke函数实现对目标对象的动态代理。
S230、根据各目标代理函数,分别对匹配的目标方法进行代码织入,获取各目标方法对应的目标织入方法。
其中,目标织入方法用于调用对应的目标代理函数。
在本实施例中,在完成对目标对象对应的目标代理函数的构建之后,可以对目标方法进行代码织入,以对目标对象的调用方法进行调整,实现对目标代理函数的调用,进而实现目标对象对目标方法访问的拦截;例如,目标方法为SharedPreferencesSharedPreferences=getSharedPreferences(name:“testSP”,Context.MODE_PRIVATE),对应的目标织入方法可以为SharedPreferencesSharedPreferences=SharedPreferencesProxy.getSharedPreferences(context:this,name:“testSP”,Context.MODE_PRIVATE),此时,目标对象SharedPreferences对应的目标方法由getSharedPreferences变更为目标织入方法SharedPreferencesProxy。对应的,可以编写对应程序以实现SharedPreferencesProxy.getSharedPreferences方法。
在本实施例中,在进行目标方法的AOP时,只需将目标对象的目标方法变更为目标织入方法,无需插入方法的具体实现代码,而是在Java层中编写对应的目标代理函数,通过目标织入方法对目标代理函数的调用,实现对目标方法的运行监测,可以减少在业务代码中需要织入的代码数量,实现对AOP层代码的减负。
S240、对各目标代理函数的运行情况进行监测,获取运行监测结果,并根据所述运行监测结果,确定所述各目标方法的运行情况。
在本实施例中,通过对各目标方法进行静态代理,以获取对应的目标对象,进而对各目标对象进行统一的动态代理,可以实现对各目标对象对应全部方法的Hook,降低了进行AOP时需要织入代码的代码量和代码复杂度;其中,HOOK(钩子),是一种劫持程序原有执行流程,并添加额外处理逻辑的技术,AOP的编程方式,也可以视为HOOK。
在本实施例的一个具体的实施方式中,首先编写业务代码,以获取Logcat中名称为“testSP”的SP文件中“isFirstInstall”字段的值。对上述方法进行运行监测,首先通过在业务代码中获取目标方法,并在目标方法中确定目标对象,进而对目标对象进行动态代理,以使目标对象指向字段值的打印方法和耗时计算方法;最终在业务代码运行期间,可以通过动态代理方法,实现对“isFirstInstall”字段值的打印,以及方法执行耗时的获取。
在本实施例的一个可选的实施方式中,对各目标代理函数的运行情况进行监测,获取运行监测结果,并根据所述运行监测结果,确定所述各目标方法的运行情况,可以包括:
对各目标代理函数的调用时长进行监测,获取对应的监测调用时长,并根据各监测调用时长,确定各目标对象对匹配目标方法的调用时长;以及对各目标代理函数的数据请求进行监测,获取对应的数据请求结果,并根据各数据请求结果,确定各目标对象对匹配目标方法的数据请求结果。
在本实施例中,可以对目标代理函数的调用时间进行监测,以实现对目标方法的实现耗时进行监测,也可以对目标对象对目标代理函数的数据请求进行监测,获取匹配目标方法的数据请求结果。此外,可以在目标方法实现代码的基础上进行功能调整,以获取对应的目标代理函数的具体实现代码,以实现对目标方法功能的调整,可以降低业务代码后期维护的工作量,避免对整体业务代码的修改。
在本实施例的一个具体的实施方式中,如图2B所示,首先确定需要HOOK的目标类,并针对当前目标类进行基于AOP的代码织入;具体的,首先通过newInstance方法进行对象实例化,以获取各目标方法对应的目标对象;其中,newInstance,是一种静态的对象实例化方法,方法返回的是对象Object。其次,通过Proxy获取目标对象的代理对象,例如,Proxy.newProxyInstance(Object)。最终,通过invoke函数执行指向代理对象的方法,例如,InvocationHandler.invoke()。通过对代理对象指向方法的运行监测,间接实现对原始目标方法的运行监测,实现对目标类中大量目标方法的高效监测。
本发明实施例提供的技术方案,首先,获取待面向切面编程AOP的目标类,并在目标类中确定多个目标方法;其次,获取各目标方法对应的目标对象,并通过分别对各目标对象进行动态代理,获取各目标对象匹配的目标代理函数;并根据各目标代理函数,分别对匹配的目标方法进行代码织入,获取各目标方法对应的目标织入方法;最终,对各目标代理函数的运行情况进行监测,获取运行监测结果,并根据运行监测结果,确定各目标方法的运行情况;通过获取待监测方法对应的目标对象,并对该目标对象进行统一的动态代理,实现了对大量方法的高效监测,同时降低了进行AOP时需要编写织入代码的代码数量和代码复杂度,进而降低了织入代码的维护成本。
图3为本发明另一实施例提供的一种代码运行的监测装置的结构示意图。如图3所示,该装置包括:目标方法确定模块310、目标代理函数确定模块320和运行监测模块330。其中,
目标方法确定模块310,用于获取待面向切面编程AOP的目标类,并在所述目标类中确定至少一个目标方法;
目标代理函数确定模块320,用于获取各目标方法对应的目标对象,并通过分别对各所述目标对象进行动态代理,获取各所述目标对象匹配的目标代理函数;
运行监测模块330,用于对各目标代理函数的运行情况进行监测,获取运行监测结果,并根据所述运行监测结果,确定所述各目标方法的运行情况。
本发明实施例提供的技术方案,首先,获取待面向切面编程AOP的目标类,并在目标类中确定多个目标方法;其次,获取各目标方法对应的目标对象,并通过分别对各目标对象进行动态代理,获取各目标对象匹配的目标代理函数;最终,对各目标代理函数的运行情况进行监测,获取运行监测结果,并根据运行监测结果,确定各目标方法的运行情况;通过获取待监测方法对应的目标对象,并对该目标对象进行统一的动态代理,实现了对大量方法的高效监测,同时降低了进行AOP时需要编写织入代码的代码数量和代码复杂度,进而降低了织入代码的维护成本。
可选的,在上述技术方案的基础上,目标方法确定模块310,具体用于获取目标关键字,并根据所述目标关键字,在所述目标类中获取至少一个包括所述目标关键字的目标方法。
可选的,在上述技术方案的基础上,目标代理函数确定模块320,具体用于通过静态代理函数,对各目标方法进行对象实例化,获取各目标方法对应的目标对象。
可选的,在上述技术方案的基础上,所述代码运行的监测装置,还包括:
目标织入方法获取模块,用于根据各目标代理函数,分别对匹配的目标方法进行代码织入,获取各目标方法对应的目标织入方法;其中,目标织入方法用于调用对应的目标代理函数。
可选的,在上述技术方案的基础上,运行监测模块330,包括:
时长监测单元,用于对各目标代理函数的调用时长进行监测,获取对应的监测调用时长,并根据各监测调用时长,确定各目标对象对匹配目标方法的调用时长;以及
数据请求监测单元,用于对各目标代理函数的数据请求进行监测,获取对应的数据请求结果,并根据各数据请求结果,确定各目标对象对匹配目标方法的数据请求结果。
可选的,在上述技术方案的基础上,所述代码运行的监测装置,还包括:
去重处理单元,用于获取各目标方法与对应目标对象的目标映射关系,并对所述目标映射关系进行去重处理,获取无重复的目标映射关系。
可选的,在上述技术方案的基础上,目标代理函数确定模块320,具体用于获取预设监测任务,并根据所述预设监测任务、各目标方法和分别对应的各目标对象,获取各目标对象匹配的invoke函数。
上述装置可执行本发明前述所有实施例所提供的代码运行的监测方法,具备执行上述方法相应的功能模块和有益效果。未在本发明实施例中详尽描述的技术细节,可参见本发明前述所有实施例所提供的代码运行的监测方法。
图4为本发明另一实施例提供的一种计算机设备的结构示意图,如图4所示,该计算机设备包括处理器410、存储器420、输入装置430和输出装置440;计算机设备中处理器410的数量可以是一个或多个,图4中以一个处理器410为例;计算机设备中的处理器410、存储器420、输入装置430和输出装置440可以通过总线或其他方式连接,图4中以通过总线连接为例。存储器420作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明任意实施例中的一种代码运行的监测方法对应的程序指令/模块(例如,一种代码运行的监测装置中的目标方法确定模块310、目标代理函数确定模块320和运行监测模块330)。处理器410通过运行存储在存储器420中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述的一种代码运行的监测方法。也即,该程序被处理器执行时实现:
获取待面向切面编程AOP的目标类,并在所述目标类中确定至少一个目标方法;
获取各目标方法对应的目标对象,并通过分别对各所述目标对象进行动态代理,获取各所述目标对象匹配的目标代理函数;
对各目标代理函数的运行情况进行监测,获取运行监测结果,并根据所述运行监测结果,确定所述各目标方法的运行情况。
存储器420可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器420可进一步包括相对于处理器410远程设置的存储器,这些远程存储器可以通过网络连接至计算机设备。
上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。输入装置430可用于接收输入的数字或字符信息,以及产生与计算机设备的用户设置以及功能控制有关的键信号输入,可以包括键盘和鼠标等。输出装置440可包括显示屏等显示设备。
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明任意实施例所述方法。当然,本发明实施例所提供的一种计算机可读存储介质,其可以执行本发明任意实施例所提供的一种代码运行的监测方法中的相关操作。也即,该程序被处理器执行时实现:
获取待面向切面编程AOP的目标类,并在所述目标类中确定至少一个目标方法;
获取各目标方法对应的目标对象,并通过分别对各所述目标对象进行动态代理,获取各所述目标对象匹配的目标代理函数;
对各目标代理函数的运行情况进行监测,获取运行监测结果,并根据所述运行监测结果,确定所述各目标方法的运行情况。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述一种代码运行的监测装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (7)
1.一种代码运行的监测方法,其特征在于,包括:
获取待面向切面编程AOP的目标类,并获取目标关键字,并根据所述目标关键字,在所述目标类中获取至少一个包括所述目标关键字的目标方法;其中,目标关键字,是需要查找的目标方法的关键字或词;目标方法,是指目标类的全部方法中,当前需要进行AOP的方法;
获取各目标方法对应的目标对象,并通过分别对各所述目标对象进行动态代理,获取各所述目标对象匹配的目标代理函数;其中,目标对象,是指所述目标类对应的一个实例,用于实现对所述目标类中多个方法的调用;
根据各目标代理函数,分别对匹配的目标方法进行代码织入,获取各目标方法对应的目标织入方法;其中,目标织入方法用于调用对应的目标代理函数;
对各目标代理函数的运行情况进行监测,获取运行监测结果,并根据所述运行监测结果,确定所述各目标方法的运行情况;
其中,获取各目标方法对应的目标对象,包括:
通过静态代理函数,对各目标方法进行对象实例化,获取各目标方法对应的目标对象。
2.根据权利要求1所述的方法,其特征在于,对各目标代理函数的运行情况进行监测,获取运行监测结果,并根据所述运行监测结果,确定所述各目标方法的运行情况,包括:
对各目标代理函数的调用时长进行监测,获取对应的监测调用时长,并根据各监测调用时长,确定各目标对象对匹配目标方法的调用时长;以及
对各目标代理函数的数据请求进行监测,获取对应的数据请求结果,并根据各数据请求结果,确定各目标对象对匹配目标方法的数据请求结果。
3.根据权利要求1所述的方法,其特征在于,在获取各目标方法对应的目标对象之后,还包括:
获取各目标方法与对应目标对象的目标映射关系,并对所述目标映射关系进行去重处理,获取无重复的目标映射关系。
4.根据权利要求1所述的方法,其特征在于,通过分别对各所述目标对象进行动态代理,获取各所述目标对象匹配的目标代理函数,包括:
获取预设监测任务,并根据所述预设监测任务、各目标方法和分别对应的各目标对象,获取各目标对象匹配的invoke函数。
5.一种代码运行的监测装置,其特征在于,包括:
目标方法确定模块,用于获取待面向切面编程AOP的目标类,并获取目标关键字,并根据所述目标关键字,在所述目标类中获取至少一个包括所述目标关键字的目标方法;其中,目标关键字,是需要查找的目标方法的关键字或词;目标方法,是指目标类的全部方法中,当前需要进行AOP的方法;
目标代理函数确定模块,用于获取各目标方法对应的目标对象,并通过分别对各所述目标对象进行动态代理,获取各所述目标对象匹配的目标代理函数;其中,目标对象,是指所述目标类对应的一个实例,用于实现对所述目标类中多个方法的调用;
目标织入方法获取模块,用于根据各目标代理函数,分别对匹配的目标方法进行代码织入,获取各目标方法对应的目标织入方法;其中,目标织入方法用于调用对应的目标代理函数;
运行监测模块,用于对各目标代理函数的运行情况进行监测,获取运行监测结果,并根据所述运行监测结果,确定所述各目标方法的运行情况;
目标代理函数确定模块,具体用于通过静态代理函数,对各目标方法进行对象实例化,获取各目标方法对应的目标对象。
6.一种计算机设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个计算机程序;
当所述一个或多个计算机程序被所述一个或多个处理器执行,使得所述一个或多个处理器执行所述计算机程序时实现如权利要求1-4中任一所述的代码运行的监测方法。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1-4中任一所述的代码运行的监测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111180699.0A CN113900896B (zh) | 2021-10-11 | 2021-10-11 | 一种代码运行的监测方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111180699.0A CN113900896B (zh) | 2021-10-11 | 2021-10-11 | 一种代码运行的监测方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113900896A CN113900896A (zh) | 2022-01-07 |
CN113900896B true CN113900896B (zh) | 2024-04-26 |
Family
ID=79191203
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111180699.0A Active CN113900896B (zh) | 2021-10-11 | 2021-10-11 | 一种代码运行的监测方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113900896B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114706733B (zh) * | 2022-05-30 | 2022-09-20 | 支付宝(杭州)信息技术有限公司 | 切面程序异常的监控方法和装置 |
CN116775040B (zh) * | 2023-08-16 | 2023-11-17 | 北京安普诺信息技术有限公司 | 实现代码疫苗的插桩方法及基于代码疫苗的应用测试方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000148539A (ja) * | 1998-11-04 | 2000-05-30 | Ntt Data Corp | 障害検知方法、コンピュータシステム及び構成装置、記録媒体 |
CN107957931A (zh) * | 2017-11-23 | 2018-04-24 | 泰康保险集团股份有限公司 | 一种监测运行时间的方法及装置 |
CN110673834A (zh) * | 2019-09-23 | 2020-01-10 | 北京博睿宏远数据科技股份有限公司 | 一种源码调用方法、装置、计算机设备及存储介质 |
CN110968497A (zh) * | 2018-09-30 | 2020-04-07 | 北京京东尚科信息技术有限公司 | 基于树形拦截器的请求校验方法、装置、介质及电子设备 |
CN111813633A (zh) * | 2020-07-20 | 2020-10-23 | 前海人寿保险股份有限公司 | 性能监控方法、装置、设备及可读存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8079037B2 (en) * | 2005-10-11 | 2011-12-13 | Knoa Software, Inc. | Generic, multi-instance method and GUI detection system for tracking and monitoring computer applications |
-
2021
- 2021-10-11 CN CN202111180699.0A patent/CN113900896B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000148539A (ja) * | 1998-11-04 | 2000-05-30 | Ntt Data Corp | 障害検知方法、コンピュータシステム及び構成装置、記録媒体 |
CN107957931A (zh) * | 2017-11-23 | 2018-04-24 | 泰康保险集团股份有限公司 | 一种监测运行时间的方法及装置 |
CN110968497A (zh) * | 2018-09-30 | 2020-04-07 | 北京京东尚科信息技术有限公司 | 基于树形拦截器的请求校验方法、装置、介质及电子设备 |
CN110673834A (zh) * | 2019-09-23 | 2020-01-10 | 北京博睿宏远数据科技股份有限公司 | 一种源码调用方法、装置、计算机设备及存储介质 |
CN111813633A (zh) * | 2020-07-20 | 2020-10-23 | 前海人寿保险股份有限公司 | 性能监控方法、装置、设备及可读存储介质 |
Non-Patent Citations (2)
Title |
---|
Spring AOP框架在企业应用中的研究;郑波;徐向阳;;微计算机信息(第09期);全文 * |
基于JAVA的动态代理实现的AOP的研究;肖露;龙鹏飞;;微计算机信息(第02期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113900896A (zh) | 2022-01-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10949180B2 (en) | Dynamically changing input data streams processed by data stream language programs | |
CN113900896B (zh) | 一种代码运行的监测方法、装置、设备及存储介质 | |
US6779187B1 (en) | Method and system for dynamic interception of function calls to dynamic link libraries into a windowed operating system | |
US20130152064A1 (en) | Classloader/Instrumentation Approach For Invoking Non-Bound Libraries | |
US11029930B2 (en) | Code optimization conversations for connected managed runtime environments | |
CN111930472B (zh) | 一种代码调试方法、装置、电子设备及存储介质 | |
US20190324880A1 (en) | Memory health metrics | |
CN110048907B (zh) | 一种集群环境下的全局流控方法及装置 | |
CN103176892A (zh) | 一种页面监控方法及系统 | |
CN111443901A (zh) | 一种基于Java反射的业务扩展方法及装置 | |
US20070003347A1 (en) | State machine-driven interactive system and associated methods | |
US9442818B1 (en) | System and method for dynamic data collection | |
CN113238815B (zh) | 一种接口访问控制方法、装置、设备及存储介质 | |
De Nicola et al. | Programming and verifying component ensembles | |
CN113031964B (zh) | 一种大数据应用的管理方法、装置、设备及存储介质 | |
CN116467188A (zh) | 一种多环境场景下的通用本地复现系统和方法 | |
CN112860235B (zh) | 处理文本的方法、装置、设备和存储介质 | |
US20150154101A1 (en) | Tuning business software for a specific business environment | |
CN115687111B (zh) | 面向计算机二进制程序的直接比对依赖识别方法与系统 | |
US20230138805A1 (en) | System and Method For Telemetry Data Based Event Occurrence Analysis With Rule Engine | |
CN116032809B (zh) | 使用Wasm的网络协议分析方法及系统 | |
CN116340102B (zh) | 一种内存溢出监测方法、装置、设备及存储介质 | |
US12039307B1 (en) | Dynamically changing input data streams processed by data stream language programs | |
Bailey et al. | Optimising active database rules by partial evaluation and abstract interpretation | |
US20240231847A9 (en) | Java bytecode injection methods and apparatuses, electronic devices, and storage media |
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 |