CN112667245A - 一种代码处理方法、装置、电子设备及存储介质 - Google Patents
一种代码处理方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN112667245A CN112667245A CN202110057540.3A CN202110057540A CN112667245A CN 112667245 A CN112667245 A CN 112667245A CN 202110057540 A CN202110057540 A CN 202110057540A CN 112667245 A CN112667245 A CN 112667245A
- Authority
- CN
- China
- Prior art keywords
- code
- target
- brick
- executing
- dynamic
- 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.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 25
- 239000011449 brick Substances 0.000 claims abstract description 197
- 238000003780 insertion Methods 0.000 claims abstract description 93
- 230000037431 insertion Effects 0.000 claims abstract description 93
- 238000000034 method Methods 0.000 claims abstract description 59
- 230000008569 process Effects 0.000 claims abstract description 36
- 238000012545 processing Methods 0.000 claims abstract description 18
- 230000006870 function Effects 0.000 claims description 59
- 238000013507 mapping Methods 0.000 claims description 29
- 230000008676 import Effects 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 8
- 230000009286 beneficial effect Effects 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 7
- 230000009471 action Effects 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- 238000012966 insertion method Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
Images
Abstract
本申请公开了一种代码处理方法,所述代码处理方法包括:向目标代码的当前环境中添加插砖代码;其中,所述目标代码中插入有动态AOP代码;在执行所述目标代码的过程中,判断当前待执行内容是否为所述动态AOP代码;若是,则通过执行所述动态AOP代码从所述当前环境中选取目标插砖代码,并执行所述目标插砖代码;在所述目标插砖代码执行完毕后,继续执行所述目标代码。本申请能够实现动态代码插砖,提高代码插砖效率。本申请还公开了一种代码处理装置、一种电子设备及一种存储介质,具有以上有益效果。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种代码处理方法、装置、一种电子设备及一种存储介质。
背景技术
在代码编写后,通常需要在原有代码中插入相应的代码,以便执行原有代码时能够执行插入的代码,行业内将以上插入原有代码的代码称之为插砖代码。
相关技术中,通常使用ASM技术向原有代码插入代码,但是上述方式只能在代码编译时插入代码,无法在代码执行过程中插入代码。若想在已发布的代码文件中插入代码,只能重新编译,代码的插砖效率较低。
因此,如何实现动态代码插砖,提高代码插砖效率是本领域技术人员目前需要解决的技术问题。
发明内容
本申请的目的是提供一种代码处理方法、装置、一种电子设备及一种存储介质,能够实现动态代码插砖,提高代码插砖效率。
为解决上述技术问题,本申请提供一种代码处理方法,该代码处理方法包括:
向目标代码的当前环境中添加插砖代码;其中,所述目标代码中插入有动态AOP代码;
在执行所述目标代码的过程中,判断当前待执行内容是否为所述动态AOP代码;
若是,则通过执行所述动态AOP代码从所述当前环境中选取目标插砖代码,并执行所述目标插砖代码;
在所述目标插砖代码执行完毕后,继续执行所述目标代码。
可选的,所述通过执行所述动态AOP代码从所述当前环境中选取目标插砖代码,包括:
通过执行所述动态AOP代码从所述当前环境中获取对应的插砖代码列表;
若所述插砖代码列表不为空,则将所述插砖代码列表中的插砖代码设置为所述目标插砖代码。
可选的,通过执行所述动态AOP代码从所述当前环境中获取对应的插砖代码列表,包括:
通过执行所述动态AOP代码查询映射关系表,并根据所述查询映射关系表从所述当前环境中获取对应的插砖代码列表;其中,所述映射关系表中存储有动态AOP代码与插砖代码的映射关系。
可选的,还包括:
若接收到代码导入指令,则根据所述代码导入指令在所述当前环境中添加新的插砖代码;
查询所述新的插砖代码对应的动态AOP代码,并将所述新的插砖代码与动态AOP代码的映射关系更新至所述映射关系表。
可选的,在执行所述目标插砖代码的过程中,还包括:
将所述动态AOP代码所在函数的函数信息导入所述目标插砖代码;其中,所述函数信息包括类名、函数名和函数参数中的任一项或任几项的组合。
可选的,在执行所述目标代码之前,还包括:
在编译所述目标代码的过程中确定所述目标代码中的所有函数,并向每一函数插入动态AOP代码。
可选的,若所述目标插砖代码的数量大于1,则执行所述目标插砖代码包括:
确定当前目标插砖代码,并执行所述当前目标插砖代码;
在所述当前目标插砖代码执行完毕后,判断所有所述目标插砖代码是否均执行完毕;
若是,则启动所述继续执行所述目标代码的操作;
若否,则启动所述确定当前目标插砖代码的操作。
本申请还提供了一种代码处理装置,该代码处理装置包括:
插砖代码添加模块,用于向目标代码的当前环境中添加插砖代码;其中,所述目标代码中插入有动态AOP代码;
动态插砖模块,用于在执行所述目标代码的过程中,判断当前待执行内容是否为所述动态AOP代码;若是,则通过执行所述动态AOP代码从所述当前环境中选取目标插砖代码,并执行所述目标插砖代码;
代码执行模块,用于在所述目标插砖代码执行完毕后,继续执行所述目标代码。
本申请还提供了一种存储介质,其上存储有计算机程序,所述计算机程序执行时实现上述代码处理方法执行的步骤。
本申请还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器调用所述存储器中的计算机程序时实现上述代码处理方法执行的步骤。
本申请提供了一种代码处理方法,包括:向目标代码的当前环境中添加插砖代码;其中,所述目标代码中插入有动态AOP代码;在执行所述目标代码的过程中,判断当前待执行内容是否为所述动态AOP代码;若是,则通过执行所述动态AOP代码从所述当前环境中选取目标插砖代码,并执行所述目标插砖代码;在所述目标插砖代码执行完毕后,继续执行所述目标代码。
本申请向目标代码的当前环境中添加插砖代码,且目标代码中插入有动态AOP代码。在执行目标代码时,若当前待执行内容为所述动态AOP代码,则可以通过执行动态AOP代码从当前环境中选取并执行目标插砖代码以便实现代码的动态插入。在目标插砖代码执行完毕后,可以继续执行目标代码。上述代码处理方法能够基于动态AOP代码在目标代码执行的过程中实现动态插砖,无需通过重新编译代码即可将新的代码以插砖的方式添加至目标代码中。因此本申请可以实现动态代码插砖,提高代码插砖效率。本申请同时还提供了一种代码处理装置、一种电子设备和一种存储介质,具有上述有益效果,在此不再赘述。
附图说明
为了更清楚地说明本申请实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例所提供的一种代码处理系统的架构图;
图2为本申请实施例所提供的一种代码处理方法的流程图;
图3为本申请实施例所提供的一种插砖代码执行方法的流程图;
图4为本申请实施例所提供的一种代码编译流程示意图;
图5为本申请实施例所提供的一种插砖代码执行方法流程图;
图6为本申请实施例所提供的一种代码处理装置的结构示意图;
图7为本申请实施例所提供的一种电子设备的结构图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了便于理解本申请提供的代码处理方法,下面对其使用的系统进行介绍。参见图1,其示出了本申请实施例提供的一种代码处理系统的架构图,如图1所示该代码处理系统包括第一主机101和第二主机102,第一主机101中存储有目标代码,目标代码在编译过程中向每一函数中插入动态AOP代码,以使第一主机执行目标代码的函数时可以通过执行动态AOP代码确定并执行插砖代码。第二主机102可以通过网络向第一主机101传输插砖代码,以便第一主机101在执行目标代码时可以执行第二主机102传输的插砖代码,进而实现动态插砖。
下面请参见图2,图2为本申请实施例所提供的一种代码处理方法的流程图。
具体步骤可以包括:
S201:向目标代码的当前环境中添加插砖代码;
其中,本实施例可以应用于编写、编译代码的电子设备,目标代码为已经编写好的代码文件中的代码内容,在本步骤之前可以存在对目标代码进行编译的操作。本实施例中存在的目标代码可以为利用Java或C++等编程语言编写的代码。目标代码的当前环境可以为代码的执行环境,本实施例可以在当前环境中添加任意数量个插砖代码。
目标代码中插入有动态AOP代码,执行动态AOP代码时,可以从当前环境中确定并执行相应的插砖代码。AOP(Aspect Oriented Programming,面向切面编程)是一种通过预编译方式和运行期间动态代理实现程序功能的统一维护的技术。作为一种可行的实施方式,在执行所述目标代码之前,还可以在编译所述目标代码的过程中确定所述目标代码中的所有函数,并将所述动态AOP代码插入每一函数。具体的,当目标代码为使用Java编写的代码时,本实施例可以在目标代码编译过程中通过ASM技术将动态AOP代码插入函数。上述ASM为Java字节码操控框架。
S202:在执行所述目标代码的过程中,判断当前待执行内容是否为所述动态AOP代码;若是,则进入S203;
若目标代码的当前待执行内容为动态AOP代码,则可以执行S203中的动态插砖操作。若目标代码的当前待执行内容不为动态AOP代码,则可以执行该当前待执行内容,以便确定新的当前待执行内容。
S203:通过执行所述动态AOP代码从所述当前环境中选取目标插砖代码,并执行所述目标插砖代码;
其中,本实施例可以预先设置动态AOP代码与插砖代码的映射关系,并基于该映射关系从当前环境中选取目标插砖代码,并执行目标插砖代码。通过本步骤利用动态AOP代码实现代码插砖的方案,可以降低编译过程中插入代码的数量,还可以在执行目标代码的过程中实现动态代码插砖无需重新编译代码版本,提高了目标代码的编译效率和插砖效率。插砖指在原有代码中插入相应代码,在原有代码执行时以执行相应插砖代码的方案。
进一步的,动态AOP代码可以添加在目标代码的函数中,本实施例可以将添加有动态AOP代码的函数设置为目标函数。因此,在执行目标代码的过程中,可以确定目标代码中当前待执行的目标函数,由于目标函数已经插入动态AOP代码,在执行目标函数的过程中可以执行动态AOP代码进而确定当前环境中的插砖代码,并执行相应的插砖代码。可以理解的是,由于目标代码中可以存在多个函数,因此在执行目标函数之后,可以确定目标代码中当前待执行的新的目标函数,若新的目标函数种插入有动态AOP代码,则可以按照上述代码插砖方法执行相关操作。
作为一种可行的实施方式,在执行所述插砖代码的过程中,还可以将所述动态AOP代码所在函数的函数信息导入所述目标插砖代码,以便目标插砖代码基于上述函数信息执行。具体的,上述函数信息包括类名、函数名和函数参数中的任一项或任几项的组合。
S204:在所述目标插砖代码执行完毕后,继续执行所述目标代码。
其中,由于本实施例中目标代码中插入有动态AOP代码,因此在执行动态AOP代码时可以从当前环境中选取并执行目标插砖代码,在所有的目标插砖代码执行完毕后,可以继续执行该目标代码中未执行完毕的代码内容。
本实施例向目标代码的当前环境中添加插砖代码,且目标代码中插入有动态AOP代码。在执行目标代码时,若当前待执行内容为所述动态AOP代码,则可以通过执行动态AOP代码从当前环境中选取并执行目标插砖代码以便实现代码的动态插入。在目标插砖代码执行完毕后,可以继续执行目标代码。上述代码处理方法能够基于动态AOP代码在目标代码执行的过程中实现动态插砖,无需通过重新编译代码即可将新的代码以插砖的方式添加至目标代码中。因此本实施例可以实现动态代码插砖,提高代码插砖效率。
进一步的,本实施例还能够减少编译代码的耗时,假设每次编译目标代码时对所有函数插砖一次需要耗时M分钟,那么如果有N个插砖,那么总耗时为N*M=MN分钟;而在本实施例提供的基于动态AOP的代码处理方案中,只需要在编译目标代码的过程中执行插入动态AOP的代码即可,耗时永远为M分钟,可以减少(N-1)*M分钟。
进一步的,本实施例还能减少最后编译生成的代码文件大小,假设每次编译插入的代码为Q KB,如果有X个函数,那么如果有N个插砖,那么目标代码总增加的大小为X*Q*NKB;而在本实施例提供的基于动态AOP的代码处理方案中,只需要在编译目标代码的过程中执行插入动态AOP的代码即可,若增加动态AOP的代码的大小也为Q KB,目标代码总增加的大小=X*Q KB,减少了X*Q*(N-1)KB的大小。对于常用应用来说,N和X都非常大,运用动态AOP技术将能减少最终生成的代码文件的大小
作为对于图1对应实施例的进一步介绍,可以通过以下方式确定目标插砖代码:通过执行所述动态AOP代码从所述当前环境中获取对应的插砖代码列表;若所述插砖代码列表不为空,则将所述插砖代码列表中的插砖代码设置为所述目标插砖代码。。
具体的,本实施例可以通过执行所述动态AOP代码查询映射关系表,并根据所述查询映射关系表从所述当前环境中获取对应的插砖代码列表;其中,所述映射关系表中存储有动态AOP代码与插砖代码的映射关系。本实施例中动态AOP代码可以对应任意数量的插砖代码,可以存在多个动态AOP代码对应同一插砖代码的情况。若插砖代码列表为空,则说明动态AOP代码不存在对应的插砖代码,可以继续执行目标代码。若插砖代码列表不为空,则可以顺序执行插砖代码列表中的目标插砖代码。
本实施例中的插砖代码可以为通过网络传输的代码,也可以为用户通过移动硬盘导入的文件中的代码。具体的,若接收到代码导入指令,则根据所述代码导入指令在所述当前环境中添加新的插砖代码;查询所述新的插砖代码对应的动态AOP代码,并将所述新的插砖代码与动态AOP代码的映射关系更新至所述映射关系表。在更新映射关系表后,可以在执行目标代码时基于更新后的映射关系表执行插砖代码。
请参见图3,图3为本申请实施例所提供的一种插砖代码执行方法的流程图,本实施例可以在目标函数对应的插砖代码的数量大于1的基础上实现,执行插砖代码的过程可以包括以下步骤:
S301:确定当前目标插砖代码,并执行当前目标插砖代码。
S302:在当前目标插砖代码执行完毕后,判断所有目标插砖代码是否均执行完毕;若是,则进入S303;若否,则进入S301。
S303:启动所述继续执行所述目标代码的操作。
通过上述方式可以依次执行与动态AOP代码对应的所有插砖代码,虽然未将插砖代码插入目标代码中,但是能够在目标代码执行的过程中执行相应的插砖代码,达到了与插入代码相同效果。
下面通过在实际应用中的实施例说明上述实施例描述的流程。请参见图4,图4为本申请实施例所提供的一种代码编译流程示意图,本实施例描述了编译目标代码生成Android apk文件的过程,在开始编译.java代码文件后,可以针对每一个.java文件的每一个函数进行动态AOP插砖,以便将动态AOP代码插入函数首部之后且与函数首部相邻的位置,进而生成最终的Android apk文件。
在图4所示的代码编译过程中,可以利用ASM技术在每个.java文件中的每个函数中插入动态AOP的代码,以使生成的Android apk文件具备了动态AOP的基础能力。
进一步的,在运行Android apk文件时,每个函数执行的时候都会先执行编译过程中插入的动态AOP代码。在动态AOP代码中,可以执行图5所示的动态插砖逻辑,图5为本申请实施例所提供的一种插砖代码执行方法流程图。本实施例可以在进入动态AOP代码之后,判断是否有插砖代码需要执行;若否,则继续执行动态AOP代码所在的函数;若是,则构造执行参数,并利用执行参数执行相应的插砖代码,并在执行插砖代码之后重新判断判断是否有插砖代码需要执行。
在图5示的代码编译过程中,执行动态AOP代码是可以先判断当前环境中是否有需要动态执行的插砖代码,如果有的话,则执行插砖代码,然后再查看是否有下一个需要动态执行的插砖代码。如果没有,则动态AOP的代码执行完毕,返回到原有的函数代码中继续执行。
举例说明,在.java文件中的每个函数中插入动态AOP的代码的过程:
假设在com.test.java的类中,有say函数,函数如下:
Void say(String name){
Log(“say name=”+name);
}
在经过编译时插入动态AOP代码后,则上述函数变成了如下内容:
Void say(String name){
1.注释1
List<Aop>allAop=AopManager.getAllAop();
If(allAop!=null){
2.注释2
for(int i=0;i<allAop.size();i++){
3.注释3
allAop.get(i).execute(“com.test”,“say”,new Object[]{name});
}
}
4.注释4
Log(“say name=”+name);
}
在执行时,可以存在以下要点:
注释1:获取当前环境支持的动态插砖,如果有插砖,则返回的插砖代码列表allAop不为空。
注释2:如果返回的插砖代码列表不为空,则需要依次执行每个插砖代码。
注释3:在执行插砖代码时,需要传入原有函数的相应信息,如类名,函数名和函数参数,这行插砖代码就能获取到相应的数据。
注释4:上面注释1、2、3步骤完毕后,或者是注释1获取不到动态插砖,则执行原有函数的逻辑。
上述实施例在编译时需要插入动态AOP代码一次,以插入动态AOP的执行环境。在运行时,再根据当前是否有插砖代码,来决定是否执行动态代码的插砖。本实施例只需对.java文件插入动态AOP代码,无需多次插入插砖代码,提高了代码编译效率。由于本实施例未直接将插砖代码插入.java文件,能够降低编译后apk文件的大小。此外,本实施例通过动态AOP技术在运行时可以随时插入代码,甚至在外网正式发布的apk中也可以针对所有函数随意下发任何代码,无需重新编译,提高了插砖效率。
请参见图6,图6为本申请实施例所提供的一种代码处理装置的结构示意图;
该装置可以包括:
插砖代码添加模块601,用于向目标代码的当前环境中添加插砖代码;其中,所述目标代码中插入有动态AOP代码;
动态插砖模块602,用于在执行所述目标代码的过程中,判断当前待执行内容是否为所述动态AOP代码;若是,则通过执行所述动态AOP代码从所述当前环境中选取目标插砖代码,并执行所述目标插砖代码;
代码执行模块603,用于在所述目标插砖代码执行完毕后,继续执行所述目标代码。
本实施例向目标代码的当前环境中添加插砖代码,且目标代码中插入有动态AOP代码。在执行目标代码时,若当前待执行内容为所述动态AOP代码,则可以通过执行动态AOP代码从当前环境中选取并执行目标插砖代码以便实现代码的动态插入。在目标插砖代码执行完毕后,可以继续执行目标代码。上述代码处理方法能够基于动态AOP代码在目标代码执行的过程中实现动态插砖,无需通过重新编译代码即可将新的代码以插砖的方式添加至目标代码中。因此本实施例可以实现动态代码插砖,提高代码插砖效率。
进一步的,动态插砖模块602包括:
列表获取单元,用于通过执行所述动态AOP代码从所述当前环境中获取对应的插砖代码列表;
代码设置单元,用于若所述插砖代码列表不为空,则将所述插砖代码列表中的插砖代码设置为所述目标插砖代码。
进一步的,列表获取单元,用于通过执行所述动态AOP代码查询映射关系表,并根据所述查询映射关系表从所述当前环境中获取对应的插砖代码列表;其中,所述映射关系表中存储有动态AOP代码与插砖代码的映射关系。
进一步的,还包括:
插砖代码添加模块,用于若接收到代码导入指令,则根据所述代码导入指令在所述当前环境中添加新的插砖代码;还用于查询所述新的插砖代码对应的动态AOP代码,并将所述新的插砖代码与动态AOP代码的映射关系更新至所述映射关系表。
进一步的,还包括:
信息导入模块,用于将所述动态AOP代码所在函数的函数信息导入所述目标插砖代码;其中,所述函数信息包括类名、函数名和函数参数中的任一项或任几项的组合。
进一步的,还包括:
AOP代码插入模块,用于在执行所述目标代码之前,在编译所述目标代码的过程中确定所述目标代码中的所有函数,并向每一函数插入动态AOP代码。
进一步的,动态插砖模块602包括:
代码确定单元,确定当前目标插砖代码,并执行所述当前目标插砖代码;
代码查询单元,用于在所述当前目标插砖代码执行完毕后,判断所有所述目标插砖代码是否均执行完毕;若是,则启动所述继续执行所述目标代码的操作;若否,则启动所述确定当前目标插砖代码的操作。
由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
本申请还提供了一种存储介质,其上存有计算机程序,该计算机程序被执行时可以实现上述实施例所提供的步骤。该存储介质可以包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本申请还提供了一种电子设备,参见图7,本申请实施例提供的一种电子设备的结构图,如图7所示,可以包括处理器710和存储器720。
其中,处理器710可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器710可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器710也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器710可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器710还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器720可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器720还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器720至少用于存储以下计算机程序721,其中,该计算机程序被处理器710加载并执行之后,能够实现前述任一实施例公开的由电子设备侧执行的代码处理装方法中的相关步骤。另外,存储器720所存储的资源还可以包括操作系统722和数据723等,存储方式可以是短暂存储或者永久存储。其中,操作系统722可以包括Windows、Linux、Android等。
在一些实施例中,电子设备还可包括有显示屏730、输入输出接口740、通信接口750、传感器760、电源770以及通信总线780。
当然,图7所示的电子设备的结构并不构成对本申请实施例中电子设备的限定,在实际应用中电子设备可以包括比图7所示的更多或更少的部件,或者组合某些部件。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的状况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
Claims (10)
1.一种代码处理方法,其特征在于,包括:
向目标代码的当前环境中添加插砖代码;其中,所述目标代码中插入有动态AOP代码;
在执行所述目标代码的过程中,判断当前待执行内容是否为所述动态AOP代码;
若是,则通过执行所述动态AOP代码从所述当前环境中选取目标插砖代码,并执行所述目标插砖代码;
在所述目标插砖代码执行完毕后,继续执行所述目标代码。
2.根据权利要求1所述代码处理方法,其特征在于,所述通过执行所述动态AOP代码从所述当前环境中选取目标插砖代码,包括:
通过执行所述动态AOP代码从所述当前环境中获取对应的插砖代码列表;
若所述插砖代码列表不为空,则将所述插砖代码列表中的插砖代码设置为所述目标插砖代码。
3.根据权利要求2所述代码处理方法,其特征在于,通过执行所述动态AOP代码从所述当前环境中获取对应的插砖代码列表,包括:
通过执行所述动态AOP代码查询映射关系表,并根据所述查询映射关系表从所述当前环境中获取对应的插砖代码列表;其中,所述映射关系表中存储有动态AOP代码与插砖代码的映射关系。
4.根据权利要求3所述代码处理方法,其特征在于,还包括:
若接收到代码导入指令,则根据所述代码导入指令在所述当前环境中添加新的插砖代码;
查询所述新的插砖代码对应的动态AOP代码,并将所述新的插砖代码与动态AOP代码的映射关系更新至所述映射关系表。
5.根据权利要求1所述代码处理方法,其特征在于,在执行所述目标插砖代码的过程中,还包括:
将所述动态AOP代码所在函数的函数信息导入所述目标插砖代码;其中,所述函数信息包括类名、函数名和函数参数中的任一项或任几项的组合。
6.根据权利要求1所述代码处理方法,其特征在于,在执行所述目标代码之前,还包括:
在编译所述目标代码的过程中确定所述目标代码中的所有函数,并向每一函数插入动态AOP代码。
7.根据权利要求1至6任一项所述代码处理方法,其特征在于,若所述目标插砖代码的数量大于1,则执行所述目标插砖代码包括:
确定当前目标插砖代码,并执行所述当前目标插砖代码;
在所述当前目标插砖代码执行完毕后,判断所有所述目标插砖代码是否均执行完毕;
若是,则启动所述继续执行所述目标代码的操作;
若否,则启动所述确定当前目标插砖代码的操作。
8.一种代码处理装置,其特征在于,包括:
插砖代码添加模块,用于向目标代码的当前环境中添加插砖代码;其中,所述目标代码中插入有动态AOP代码;
动态插砖模块,用于在执行所述目标代码的过程中,判断当前待执行内容是否为所述动态AOP代码;若是,则通过执行所述动态AOP代码从所述当前环境中选取目标插砖代码,并执行所述目标插砖代码;
代码执行模块,用于在所述目标插砖代码执行完毕后,继续执行所述目标代码。
9.一种电子设备,其特征在于,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器调用所述存储器中的计算机程序时实现如权利要求1至7任一项所述代码处理方法的步骤。
10.一种存储介质,其特征在于,所述存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现如上权利要求1至7任一项所述代码处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110057540.3A CN112667245A (zh) | 2021-01-15 | 2021-01-15 | 一种代码处理方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110057540.3A CN112667245A (zh) | 2021-01-15 | 2021-01-15 | 一种代码处理方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112667245A true CN112667245A (zh) | 2021-04-16 |
Family
ID=75415407
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110057540.3A Pending CN112667245A (zh) | 2021-01-15 | 2021-01-15 | 一种代码处理方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112667245A (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104834590A (zh) * | 2014-02-11 | 2015-08-12 | 腾讯科技(深圳)有限公司 | 软件测试方法和系统 |
CN105095087A (zh) * | 2015-08-31 | 2015-11-25 | 武汉启明联创信息科技有限公司 | 一种基于权限操作的软件测试系统和方法 |
CN105159834A (zh) * | 2015-10-24 | 2015-12-16 | 北京航空航天大学 | 一种软件动态测试运行数据提取方法 |
CN105700931A (zh) * | 2016-02-23 | 2016-06-22 | 北京蓝海讯通科技股份有限公司 | 一种代码注入方法及装置 |
CN106293808A (zh) * | 2016-07-26 | 2017-01-04 | 北京北森云计算股份有限公司 | 多语言云编译实现系统功能动态拦截扩展的方法及系统 |
CN109063181A (zh) * | 2018-08-23 | 2018-12-21 | 北京达佳互联信息技术有限公司 | 数据配置方法、装置、服务器及存储介质 |
CN110780882A (zh) * | 2019-11-08 | 2020-02-11 | 网易(杭州)网络有限公司 | 代码文件的处理方法及装置、系统、电子设备、存储介质 |
CN111382073A (zh) * | 2020-03-09 | 2020-07-07 | 腾讯科技(深圳)有限公司 | 自动化测试用例确定方法、装置、设备及存储介质 |
CN111400189A (zh) * | 2020-03-25 | 2020-07-10 | 平安银行股份有限公司 | 代码覆盖率监测方法、装置、电子设备及存储介质 |
-
2021
- 2021-01-15 CN CN202110057540.3A patent/CN112667245A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104834590A (zh) * | 2014-02-11 | 2015-08-12 | 腾讯科技(深圳)有限公司 | 软件测试方法和系统 |
CN105095087A (zh) * | 2015-08-31 | 2015-11-25 | 武汉启明联创信息科技有限公司 | 一种基于权限操作的软件测试系统和方法 |
CN105159834A (zh) * | 2015-10-24 | 2015-12-16 | 北京航空航天大学 | 一种软件动态测试运行数据提取方法 |
CN105700931A (zh) * | 2016-02-23 | 2016-06-22 | 北京蓝海讯通科技股份有限公司 | 一种代码注入方法及装置 |
CN106293808A (zh) * | 2016-07-26 | 2017-01-04 | 北京北森云计算股份有限公司 | 多语言云编译实现系统功能动态拦截扩展的方法及系统 |
CN109063181A (zh) * | 2018-08-23 | 2018-12-21 | 北京达佳互联信息技术有限公司 | 数据配置方法、装置、服务器及存储介质 |
CN110780882A (zh) * | 2019-11-08 | 2020-02-11 | 网易(杭州)网络有限公司 | 代码文件的处理方法及装置、系统、电子设备、存储介质 |
CN111382073A (zh) * | 2020-03-09 | 2020-07-07 | 腾讯科技(深圳)有限公司 | 自动化测试用例确定方法、装置、设备及存储介质 |
CN111400189A (zh) * | 2020-03-25 | 2020-07-10 | 平安银行股份有限公司 | 代码覆盖率监测方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110096338B (zh) | 智能合约执行方法、装置、设备及介质 | |
US7246346B2 (en) | System and method for persisting dynamically generated code in a directly addressable and executable storage medium | |
US11106437B2 (en) | Lookup table optimization for programming languages that target synchronous digital circuits | |
US9146759B2 (en) | Assumption-based compilation | |
EP2827244A1 (en) | Extension mechanism for scripting language compiler | |
CN107239392B (zh) | 一种测试方法、装置、终端及存储介质 | |
CN107924326B (zh) | 对经更新的类型的迁移方法进行覆盖 | |
US20130198495A1 (en) | Method and Apparatus For Register Spill Minimization | |
CN112445729B (zh) | 操作地址确定方法、PCIe系统、电子设备及存储介质 | |
US20170315830A1 (en) | On-demand loading of dynamic scripting language code for reduced memory usage | |
CN111324396A (zh) | 一种区块链智能合约执行方法、装置及设备 | |
CN106850650B (zh) | 用于游戏客户端访问数据的方法及客户端游戏系统 | |
CN113918195A (zh) | 应用界面更新方法、装置、电子设备及可读存储介质 | |
CN110609687A (zh) | 一种编译方法、装置、电子设备和存储介质 | |
CN110597515A (zh) | 一种字节码插桩方法 | |
CN114691188A (zh) | 兼容性评估方法、装置、设备及存储介质 | |
EP2181387A1 (en) | A programming environment with support for handle and non-handle user-created classes | |
WO2015003452A1 (en) | Methods and systems for file processing | |
CN112631656A (zh) | 一种基于源代码的智能合约优化方法及装置 | |
CN112235132A (zh) | 动态配置服务的方法、装置、介质以及服务器 | |
CN112667245A (zh) | 一种代码处理方法、装置、电子设备及存储介质 | |
CN116107669A (zh) | 深度学习框架的算子注册方法、装置、设备及存储介质 | |
CN111796865B (zh) | 一种字节码文件修改方法、装置、终端设备及介质 | |
CN114911541A (zh) | 配置信息的处理方法、装置、电子设备及存储介质 | |
CN114461223A (zh) | 一种代码生成方法、装置及终端设备 |
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 |