CN116483289A - 基本块管理方法及电子设备 - Google Patents
基本块管理方法及电子设备 Download PDFInfo
- Publication number
- CN116483289A CN116483289A CN202310742545.9A CN202310742545A CN116483289A CN 116483289 A CN116483289 A CN 116483289A CN 202310742545 A CN202310742545 A CN 202310742545A CN 116483289 A CN116483289 A CN 116483289A
- Authority
- CN
- China
- Prior art keywords
- basic block
- statement
- sentence
- determining
- executed
- 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
- 238000007726 management method Methods 0.000 title claims abstract description 40
- 238000000034 method Methods 0.000 claims abstract description 103
- 238000007639 printing Methods 0.000 claims abstract description 65
- 230000006870 function Effects 0.000 claims description 75
- 230000004044 response Effects 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 10
- 230000008569 process Effects 0.000 description 42
- 238000012545 processing Methods 0.000 description 11
- 238000010586 diagram Methods 0.000 description 10
- 239000011800 void material Substances 0.000 description 7
- 238000004458 analytical method Methods 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 5
- 230000005236 sound signal Effects 0.000 description 5
- 238000013528 artificial neural network Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 229920001621 AMOLED Polymers 0.000 description 3
- 230000014509 gene expression Effects 0.000 description 3
- 238000003780 insertion Methods 0.000 description 3
- 230000037431 insertion Effects 0.000 description 3
- 230000001413 cellular effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 238000010295 mobile communication Methods 0.000 description 2
- 239000002096 quantum dot Substances 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000013529 biological neural network Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 210000000988 bone and bone Anatomy 0.000 description 1
- 210000004556 brain Anatomy 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 229910044991 metal oxide Inorganic materials 0.000 description 1
- 150000004706 metal oxides Chemical class 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 210000002569 neuron Anatomy 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 239000002243 precursor Substances 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- 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/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/425—Lexical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- 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)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Computational Linguistics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供一种基本块管理方法及电子设备,方法包括:目标基本块中的第j条语句为日志打印语句,拆分目标基本块得到第一基本块、第二基本块和第三基本块;第一基本块包括第1条语句至第j‑1条语句,第二基本块包括第j条语句,第三基本块包括第j+1条语句至最后一条语句;构建含第一跳转语句的第四基本块,在第二基本块插入第一跳转语句,得到第五基本块;在第一基本块插入第一条件语句,得到第六基本块;第一条件语句指示在执行第一条件语句后跳转执行第四基本块或第五基本块;确定第六基本块、第五基本块、第三基本块间的执行顺序,或第六基本块、第四基本块、第三基本块间的执行顺序。通过本申请,可管理基本块,减少日志打印。
Description
技术领域
本申请涉及计算机技术领域,尤其基本块管理方法及电子设备。
背景技术
中间代码(intermediate code),又可称为中间表示(intermediaterepresentation,IR),用于表示对源代码进行语法分析后到生成目标代码之间的代码。通过编译器编译后,可将中间代码编译成计算机等机器能够直接执行的目标代码。编译器可将中间代码划分成至少一个基本块(basic block),并构造流图,通过流图来表示各个基本块间的执行顺序。将中间代码划分成基本块后,可通过对基本块进行管理,例如删除、修改、插入基本块等操作,便于优化中间代码。如何管理基本块是亟待解决的技术问题。
发明内容
本申请实施例提供一种基本块管理方法及电子设备,可基于日志打印语句实现基本块管理,减少日志打印的数量。
第一方面,本申请实施例提供了一种基本块管理方法,该方法可由电子设备执行,或由与电子设备匹配的装置执行,例如由处理器、芯片或芯片系统等执行。该方法可包括:响应于目标基本块中的第j条语句为日志打印语句,拆分目标基本块,得到第一基本块、第二基本块和第三基本块;第一基本块包括目标基本块中的第1条语句至第j-1条语句,第二基本块包括第j条语句,第三基本块包括目标基本块中的第j+1条语句至最后一条语句;构建包括第一跳转语句的第四基本块,并在第二基本块中插入第一跳转语句,得到第五基本块;第一跳转语句用于指示在执行完第一跳转语句后跳转执行第三基本块;在第一基本块中插入第一条件语句,得到第六基本块;第一条件语句用于指示在执行完条件语句后跳转执行第四基本块或第五基本块;确定第六基本块、第五基本块以及第三基本块之间的执行顺序,或确定第六基本块、第四基本块以及第三基本块之间的执行顺序。其中,目标基本块为中间代码划分的至少一个基本块中的任意一个;j为大于1的整数。
可见,当目标基本块中的第j条语句为日志打印语句,则可基于第j条语句对目标基本块进行拆分,使第j条语句可单独拆分至第二基本块。通过构建第四基本块,以及在第一基本块中插入第一条件语句,可控制在执行第一条件语句后,执行第二基本块或执行第四基本块,从而可对基本块进行管理。基于对基本块的管理,还可管理日志打印,例如可通过第一条件语句指示不执行包括第j条语句的第五基本块,从而可实现不打印日志。
在一种可能的实现方式中,该方法还可包括:读取第j条语句的语句内容;响应于语句内容包括调用日志打印方法,确定第j条语句为日志打印语句。
可见,可根据第j条语句的语句内容确定第j条语句是否为日志打印语句。
在一种可能的实现方式中,该方法还可包括:响应于第j条语句满足打印条件,确定第一条件语句用于指示在执行完第一条件语句后,跳转执行第五基本块。基于此,上述确定第六基本块、第五基本块以及第三基本块之间的执行顺序的方法,可包括:确定第六基本块的后继节点为第五基本块,第五基本块的后继节点为第三基本块。
可见,第一条件语句可确定第j条语句是否满足打印条件,并在第j条语句满足打印条件的时候,确定需要执行第j条语句,即指示跳转执行包括第j条语句的第五基本块,执行完第五基本块后,再执行第三基本块,从而可在实现日志打印的同时,保障程序的正常运行。
在一种可能的实现方式中,该方法还可包括:响应于第j条语句不满足打印条件,确定第一条件语句用于指示在执行完第一条件语句后,跳转执行第四基本块。基于此,上述确定第六基本块、第四基本块以及第三基本块之间的执行顺序的方法,可包括:确定第六基本块的后继节点为第四基本块,第四基本块的后继节点为第三基本块。
可见,通过第一条件语句,可在第j条语句不满足打印条件的情况下,指示执行不包括第j条语句的第四基本块,而不会执行日志打印语句,从而可不打印日志,减少日志打印量,降低系统功耗。在执行完第四基本块后,再执行第三基本块,从而可在减少日志打印量的同时,保障程序的正常运行。
在一种可能的实现方式中,该方法还可包括:响应于目标基本块中的第j+i条语句为返回语句且第j+i条语句引用第j条语句,在第四基本块中插入常量语句,得到第七基本块;其中,i为大于1的整数;在第三基本块中插入选择函数语句,并将第三基本块中的第j+i条语句引用第j条语句修改为第j+i条语句引用选择函数语句,得到第八基本块;其中,选择函数语句的执行顺序先于第j+i条语句的执行顺序;选择函数语句用于根据第一条件语句确定选择函数语句引用第j条语句或所述常量语句。
可见,当执行第六基本块后执行第七基本块,即在不执行包括第j条语句的第五基本块的情况下,选择函数语句可引用常量语句,从而第j+i条语句可引用函数语句,以此可避免在此种情况下第j+i条语句无法引用第j条语句的情况,可保障程序的正常运行。
在一种可能的实现方式中,该方法还可包括:响应于第j条语句满足打印条件,确定第一条件语句用于指示在执行完第一条件语句后,跳转执行第五基本块,以及确定选择函数语句引用第五基本块;确定第六基本块的后继节点为第五基本块,第五基本块的后继节点为第八基本块。
可见,第一条件语句可确定第j条语句是否满足打印条件,并在第j条语句满足打印条件的情况下,可在实现日志打印的同时,保障程序正常运行。
在一种可能的实现方式中,该方法还可包括:响应于第j条语句不满足打印条件,确定第一条件语句用于指示在执行完第一条件语句后,跳转执行第七基本块,以及确定选择函数语句引用第七基本块;确定第六基本块的后继节点为第四基本块,第四基本块的后继节点为第八基本块。
可见,在第j条语句不满打印条件的情况下,在执行完第一条件语句后,跳转执行不包括第j条语句的第七基本块,即不会打印日志,在执行完第七基本块后,执行第八基本块,从而可在减少日志打印量的同时,保障程序的正常运行。
在一种可能的实现方式中,该方法还可包括:响应于第三基本块中的第k条语句为日志打印语句,拆分第三基本块,得到第九基本块、第十基本块和第十一基本块;其中,第一基本块包括第三基本块中的第1条语句至第k-1条语句,第十基本块包括第k条语句,第十一基本块包括第三基本块中的第k+1条语句至最后一条语句;构建包括第二跳转语句的第十二基本块,并在第二基本块中插入第二跳转语句,得到第十三基本块;跳转语句用于指示在执行完第二跳转语句后跳转执行第十一基本块;在第九基本块中插入第二条件语句,得到第十四基本块;第二条件语句用于指示在执行完第二条件语句后跳转执行第十二基本块或第十三基本块;确定第十一基本块、第十三基本块以及第十四基本块之间的执行顺序,或确定第十一基本块、第十二基本块以及第十四基本块之间的执行顺序。
可见,可继续对第三基本块中包括的日志打印语句进行处理,通过对第三基本块进行拆分等操作,实现对第三基本块中的日志打印语句的管理。
第二方面,本申请实施例提供一种电子设备,该电子设备包括:一个或多个处理器和存储器;该存储器与该一个或多个处理器耦合,该存储器用于存储计算机程序代码,该计算机程序代码包括计算机指令,该一个或多个处理器调用该计算机指令以使得该电子设备执行如第一方面或第一方面的任意一种实现方式所述的方法。
第三方面,本申请实施例提供了一种包含指令的计算机程序产品,当该计算机程序产品在电子设备上运行时,使得该电子设备执行如第一方面或第一方面的任意一种实现方式所述的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,包括指令,当该指令在电子设备上运行时,使得该电子设备执行如第一方面或第一方面的任意一种实现方式所述的方法。
附图说明
图1是本申请实施例提供的一种基本块的示意图;
图2是本申请实施例提供的一种编译器主要工作的流程示意图;
图3是本申请实施例提供的一种基本块管理方法的流程示意图;
图4是本申请实施例提供的一种基本块拆分的示意图;
图5是本申请实施例提供的一种在基本块中进行插桩的示意图;
图6是本申请实施例提供的另一种基本块拆分的示意图;
图7是本申请实施例提供的又一种基本块拆分的示意图;
图8是本申请实施例提供的又一种基本块拆分的示意图;
图9是本申请实施例提供的另一种基本块管理方法的流程示意图;
图10是本申请实施例提供的又一种基本块拆分的示意图;
图11是本申请实施例提供的又一种基本块管理方法的流程示意图;
图12是本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或者特性可以包含在本实施例申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是相同的实施例,也不是与其它实施例互斥的独立的或是备选的实施例。本领域技术人员可以显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及所述附图中术语“第一”、“第二”、“第三”等是区别于不同的对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如,包含了一系列步骤或单元,或者可选地,还包括没有列出的步骤或单元,或者可选地还包括这些过程、方法、产品或设备固有的其它步骤或单元。
附图中仅示出了与本申请相关的部分而非全部内容。在更加详细地讨论示例性实施例之前,应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
在本说明书中使用的术语“部件”、“模块”、“系统”、“单元”等用于表示计算机相关的实体、硬件、固件、硬件和软件的组合、软件或执行中的软件。例如,单元可以是但不限于在处理器上运行的进程、处理器、对象、可执行文件、执行线程、程序和/或分布在两个或多个计算机之间。此外,这些单元可从在上面存储有各种数据结构的各种计算机可读介质执行。单元可例如根据具有一个或多个数据分组(例如来自与本地系统、分布式系统和/或网络间的另一单元交互的第二单元数据。例如,通过信号与其它系统交互的互联网)的信号通过本地和/或远程进程来通信。
首先对本申请实施例涉及的名词进行示例性而非限定性的说明。
1、源代码(source code)
源代码,也称源程序,是指未编译的、按照一定程序设计语言规范书写的文本文件,是一系列可读的计算机语言指令。源代码是用汇编语言或高级语言编写的代码。例如,源代码可以是通过Java、C#、Python等高级语言编写的代码。
计算机等设备可将源代码翻译为可执行的指令,该过程可称为编译。编译可由编译器完成,例如编译器可将由Java编写的源代码编译为计算机等设备可执行的指令。
2、目标代码(object code)
目标代码,指计算机科学中编译器或汇编器处理源代码后所生成的代码,它一般由机器代码(可直接被计算机等设备的中央处理器执行的代码)或接近于机器语言的代码组成。目标代码可存放在目标文件(object file)中,目标文件也可称作二进制文件(binaries)。目标文件中包括机器代码,以及机器代码在运行时使用的数据,如重定位信息、用于链接或调试的程序符号(变量和函数的名字)等信息。
目标代码与机器(如计算机等电子设备)紧密相关,不同体系的机器可识别并执行的目标代码往往是不同的。通常情况下,由一种机器上的编译器编译而成的目标代码通常不能在另一种不同体系的机器上执行。
3、中间代码(intermediate code)
(1)中间代码的定义
中间代码,又可称为中间表示(intermediate representation,IR),用于表示对源代码进行语法分析后到生成目标代码之间的代码。通过编译器编译后,可将中间代码编译成计算机等机器能够直接执行的目标代码。例如,在电子设备中,源代码可以是基于Java编写的安卓应用程序包(Android application package,APK)或Java归档文件(Javaarchive,jar)等,相应的,中间代码可以是Java字节码(基于class文件格式存储)。
其中,中间代码为一种与具体的机器体系无关的代码,一种中间语言可生成多种不同体系的机器的目标代码。可见,使用中间代码可以使编译程序的结构在逻辑上更简单明确,以及便于编译器进行与机器无关的代码优化工作。
(2)中间代码的表示方式
中间代码可采用图(graph)的数据结构表示。具体的,编译器可将中间代码划分成至少一个基本块(basic block),并构造流图,通过流图来表示各个基本块间的执行顺序。其中,每个基本块中只有一个入口语句和一个出口语句。入口语句是基本块中的第j条语句,出口语句是基本块中的最后一条语句。对一个基本块而言,执行顺序为从基本块的入口语句开始,依次执行基本块中的每一条语句,直到执行至基本块中的出口语句结束。流图是一种有向图,在流图中,流图以基本块为结点,流图的有向边可表示基本块间的执行顺序。如果在某个执行顺序中,基本块By紧接在基本块Bx之后执行,则表示从Bx到By有一条有向边,或者也可以说,Bx的后继节点为By,By的前驱节点为Bx。
示例性的,请参阅图1中的(a),图1中的(a)可表示基本块构成的流图。如图1中(a)所示,中间代码被划分为基本块Bx和基本块By。基本块Bx和基本块By通过有向箭头连接,表示从Bx到By有一条有向边,用于指示By为基本块Bx的后继节点。其中,基本块Bx和基本块By可分别包括一条或多条语句,例如,基本块Bx可包括名称为A至H等多条语句。其中,名称为A的语句可称作A语句。基本块中,可采用字母与数字的组合来表示语句的索引。例如,基本块Bx中,第一列字母与数字的组合(即l17至l23以及i24),表示语句的索引。其中,字母表示语句的数据类型,例如l可表示数据类型为可引用对象(reference),i可表示数据类型为整型(int);数字表示语句的标识(identification,id)。例如,索引i24可指示语句24,表示语句24的数据类型为整型,语句的id为24;又例如,索引l17可表示语句的id为17,数据类型为长整型。语句名称后携带的索引表示被该语句引用的语句的索引,例如,语句23为G[l22],表示语句23引用索引为l22的语句。如图1中(a)所示,基本块Bx的入口语句为语句17,出口语句为语句24,执行基本块Bx时,首先执行语句17,然后依次执行语句18至语句24,在执行语句24后,执行基本块By。
4、语句
语句是代码中的一条完整的指令,换句话说,源代码、中间代码和目标代码均是由一条或多条语句构成的。语句可以包含关键字、运算符、变量、常量和表达式中的任意一项或多项。语句可分为可执行语句和声明语句。
(1)可执行语句
可执行语句,可用于调用方法或调用函数等。例如,用于调用方法的可执行语句可通过调用(invoke)语句实现。示例性的,invoke语句可分为invokeinterface、invokevirtual、invokestatic、invokespecial等类型。其中,invokeinterface语句用于调用接口方法;invokevirtual语句用于调用对象的实例方法;invokestatic语句用于用以调用类方法;invokespecial语句用于调用一些需要特殊处理的实例方法。
本申请实施例涉及的可执行语句可包括日志打印语句、跳转(goto)语句、返回(return)语句和条件语句(if语句)中的一种或多种。
A)日志打印语句,指用于调用日志打印方法(Log类方法)的一种invoke语句。通过日志打印语句,可执行日志打印方法,从而可打印日志。
B)goto语句的本质是无条件跳转指令,可以在中间代码中的任意位置实现跳转。例如,goto By可表示跳转至基本块By。
C)return语句表示从被调用的函数返回至主函数,在返回时可附带一个函数返回值,函数返回值由return后的表达式指定。例如,ReturnVoid[i24],表示将表达式Void[i24]的值作为函数返回值返回至主函数。
D)if语句是指用于判定给定语句是否满足指定条件,并根据判定的结果(真或假)决定执行给出的两种操作中的一种。例如,假设一段代码为“a=1;b=2;if(a<b)a=3;c=a+b”,其中(a<b)表示if语句的判定条件,用于比较a的值与b的值的大小,当a<b为真时,执行a=3,此时c=a+b,c的值为5;当a<b为假时,将不会执行a=3,而是直接执行c=a+b,此时c的值为3。
(2)声明语句
声明语句,可用于为变量、常量或过程命名等。
本申请实施例涉及的声明语句包括常量(constant)语句和选择函数语句(又可称为Phi函数语句)中的一种或多种。
A)常量语句用于定义一个常量,使得该常量语句的值为此常量。
B)选择函数语句可用于在程序执行过程中,根据程序的执行方向,给被选择函数语句引用的语句赋值。示例性的,假设一段代码为“a=1;if (v<10) a = 2;b=a”,其中,v表示变量,此时b的取值无法确定是取1还是2。在这段代码中加入选择函数语句,将上述代码修改为“a1=1;if (v<10) a2= 2;b=Phi(a1,a2)”,此时,Phi(a1,a2)可根据程序执行时的方向确定b的取值。例如,当变量v满足v<10时,Phi(a1,a2)可确定b=a2,即b=2,否则,b=a1,即b=1。
5、插桩
插桩,是指在是原有代码的逻辑完整性的基础上,由编译器或开发人员在原有代码中选定插桩位置,并在插桩位置插入自定义代码,或替换原有代码中的部分代码的技术。其中,原有代码可以是源代码、目标代码或中间代码。通过插桩,可以获取原有代码中的信息,例如函数的调用信息、函数的返回值等。插桩技术可应用于测试程序性能、检测错误、获取程序执行信息等领域。
示例性的,可对如图1中的(a)所示的基本块Bx进行插桩,插桩内容可以是goto语句,如goto By,插桩位置可以是语句23之后。插桩后的基本块Bx可如图1中的(b)所示,其中,插入的goto语句的索引(如v210)可由编译器自动生成,其中,v表示goto语句的数据类型为无类型(void)。完成插桩后,当执行至Bx中的goto语句时,将跳转至By,从而不会执行位于Bx中语句23之后的语句,如语句24。
6、编译器(compiler)
编译器是将一种语言翻译为另一种语言的程序。通常情况下,编译是从源代码(通常为高级语言)到能直接被电子设备,如计算机或虚拟机执行的目标代码(通常为低级语言或机器语言)的翻译过程。在一些情况下,编译是从一种高级语言到一种低级语言的翻译过程,或者从一种高级语言到中间代码的翻译过程。
示例性的,请参阅如图2所示的编译器的主要工作流程图。如图2所示,编译器可包括编译器前端和编译器后端。其中,编译器前端可对源代码进行解析(parse),解析过程可包括词法分析、语法分析、语义分析、中间代码生成等过程。具体的,词法分析过程可确定源代码包括的单词(token)。语法分析过程可将分散的token按预设的语法组装成有意义的语句。语义分析过程负责对组装成的语句进行语义检查(semantic checking),例如,检查参与运算的变量是否为同一类型、对组装成的语句进行错误处理等。进行语法分析和语义分析后,编译器生成的通常是一个抽象语法树(abstract syntax tree,AST)。编译器前端还可将生成的抽象语法树进行处理,生成中间代码,从而有利于编译器后端在此基础上进行进一步地处理。编译器后端主要负责对编译器前端生成的中间代码进行分析,例如优化中间代码、基于中间代码生成机器代码。
7、日志(log)
日志,指用于记录系统运行过程中各种重要信息的文件,在系统运行过程中,由各个进程创建日志并在日志中记录相应的信息。例如,在日志中可记录系统运行过程中的异常信息,以便于为快速定位系统运行中出现的问题,以及为开发过程中的程序调试问题提供详细信息。开发人员可以通过日志检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。
日志等级有多种划分方式,通常情况下,日志的等级从低到高可分为以下几个等级:调试(debug)、信息(info)、警告(warn)、错误(error)、严重(fatal)。其中,debug指调试日志,包括需要在调试过程中输出的信息,主要用于在调试时更详细的了解系统运行状态。info指信息日志,用于记录输入输出、程序关键节点等必要信息,程序运行出问题时可根据info诊断问题。warn指告警日志,表示系统出现可修复的错误,不影响程序运行和使用。error指系统错误和异常日志,表示系统出现错误,影响用户的正常访问,该级别的错误需要马上被处理,但紧急程度要低于fatal。fatal表示系统出现需要立即被处理的系统级错误,当此错误发生时,表示系统已经出现一定程度的不可用,系统管理员需要立即介入解决问题。
示例性的,安卓系统中日志工具类是Log(android.util.Log),这个类可提供多种方法来打印日志。在此种情况下,日志等级可分为冗长(verbose)、debug、info、warn和error。其中,verbose等级的日志用于记录系统运行产生的任何信息。Log(android.util.Log)提供的日志打印方法可包括:Log.v、Log.d、Log.i、Log.w、和Log.e等,分别对应打印日志等级为verbose、debug、info、warn和error的日志。示例性的,可通过invokestatic语句调用日志工具类中的日志打印方法,如InvokeStatic.android.util.Log.e,表示调用日志工具类中,为Log.e的日志打印方法,以实现打印日志等级为error的日志。
日志打印可发生在系统运行中的多个环节,例如,可在程序入口处、程序运行产生异常状况时。程序入口处传递进来的参数没有经过任何处理,将它打印在日志文件中可用于判断程序的原始数据是否符合预期,若后续程序运行产生问题,可从此日志中查询是否是原始数据造成的问题。在程序运行产生异常状况时打印日志,有利于快速定位错误的位置。然而,过多地打印日志会造成较大的输入/输出(input/output,IO)操作开销,降低系统运行效率和性能。
本申请实施例提供一种基本块管理方法,可用于管理基本块。该基本块管理方法可应用于日志打印管理,可通过对基本块的管理,实现对日志打印的管理,减少日志的打印数量,从而降低日志打印对系统运行效率的影响,降低系统功耗。基本块管理方法可应用于任何编译场景,例如,可应用于电子设备出厂前的开发阶段的编译场景,电子设备出厂后首次开机时的编译场景,以及电子设备安装新的应用程序时的编译场景等,本申请对此不作限定。
下面,结合图3对本申请实施例提供的基本块管理方法的具体流程进行详细说明。
示例性的,假设中间代码中的第一个基本块包括用于调用日志打印方法的日志打印语句,以读取第一个基本块中的语句为例,如图3所示,电子设备中的编译器进行基本块管理的流程可包括但不限于以下步骤:
S301,读取第一个基本块中的第j条语句。
其中,第一个基本块是指在中间代码被划分成的至少一个基本块中,排列在第一个的基本块。在第一个基本块中可包括多条语句,例如可包括N条语句,N为大于或等于1的整数。第j条语句是指,在读取第一个基本块中的语句的过程中,当前读取的语句。第j条语句可以是第一个基本块中的任意一条语句,j为大于或等于1,且小于或等于N的整数。如图4中(a)所示,用Bx表示第一个基本块,Bx中可包括语句13至语句19等多条语句。
S302,判断第j条语句是否为日志打印语句。若第j条语句为日志打印语句,则执行S303;若第j条语句不是日志打印语句,则执行S308。
其中,如图4中(a)所示,当第j条语句为语句16时,语句16表示为InvokeStatic.android.util.Log.e[l13,l12,l15]。其中,InvokeStatic表示语句16为invoke语句,android.util.Log.e表示语句16可调用日志工具类Log(android.util.Log)中的日志打印方法Log.e,用于打印日志等级为error的日志。因此,语句16为日志打印语句,此时,暂停读取第一个基本块中的其他语句,并执行S303。其中,第一个基本块中的各条语句的名称仅用于举例,本申请对各条语句的名称等具体形式不作限定。
需要说明的是,本申请实施例中的读取语句是指编译器对基本块中的语句进行读取操作,区别于对基本块中的语句进行执行操作。在读取语句的过程中,编译器无法对中间代码进行编译等操作,例如,不会执行调用指令,即不会打印日志。当程序执行时,才会依次执行每一条语句。
S303,拆分第一个基本块,得到基本块1、基本块2和基本块3。
其中,基本块1包括第一个基本块中位于第j条语句,即日志打印语句之前的所有语句,基本块2包括第j条语句,基本块3包括第一个基本块中位于第j条语句之后的所有语句。
当j=1时,表示第一个基本块中的第一条语句即为日志打印语句,则基本块1为空,基本块3不为空。当j为大于1且小于N的整数时,基本块1不为空,且基本块3也不为空。当j=N时,表示第j条语句为第一个基本块中的最后一条语句,在此种情况下,基本块1不为空,但基本块3为空。
示例性的,当j=4,如图4中(b)所示,拆分第一个基本块的操作可称作基本块拆分,第一个基本块在进行基本块拆分后,基本块1、基本块2和基本块3可分别表示为B1、B2和B3。在第一个基本块中,位于第j条语句,即语句16之前的语句有语句13、语句14和语句15,即基本块1中包括语句13至语句15。换言之,基本块1本质上是第一个基本块,但仅包括语句13、语句14和语句15,其他的语句被拆分至了其他的基本块中。基本块2中包括日志打印语句。基本块3中包括语句17、语句18和语句19。
需要说明的是,进行基本块拆分不会改变每条语句原本的排列顺序和执行顺序,例如原本的执行顺序为先执行语句13再执行语句14,拆分后,仍旧是先执行语句13再执行语句14。同理,拆分前,语句13排列在语句14之前,拆分后,语句13仍排列在语句14之前。
S304,构建基本块4,并在基本块4中插入goto语句。
其中,goto语句用于指示在程序执行过程中,执行goto语句后,指示程序跳转至基本块3,从而继续执行基本块3中的语句。在基本块4中插入goto语句的操作为一种插桩操作。示例性的,如图5中(a)所示,基本块4可表示为B4。其中,goto语句可以表示为goto B3,表示在程序执行的过程中,当执行goto语句后,跳转执行基本块3。换言之,插入的goto语句可用于指示基本块4的后继节点为基本块3。其中,goto语句的索引与第一个基本块中的任何一条语句的索引均不相同,可由编译器自动生成,如v211。
S305,在基本块2中插入goto语句,得到新基本块2。
其中,具体的,可在基本块2中的最后一条语句之后插入goto语句。goto语句用于在执行完goto语句后,指示跳转执行基本块3,且goto语句的索引与第一个基本块中的任何一条语句均不相同,可由编译器自动生成,如v210。其中,基本块2中的goto语句与基本块4中的goto语句的作用是相同的,但索引不同。示例性的,如图5中(a)所示,goto语句可表示为goto B3,基本块2中的最后一条语句为日志打印语句,即语句16,则goto语句可插入语句16之后。换言之,插入goto语句后,可指示基本块2的后继节点为基本块3。
需要说明的是,S304与S305之间的执行顺序可以是任意的。在执行S303后,例如,可以先执行S304再执行S305,或者先执行S305再执行S304,又或者S304和S305可以同时执行。本申请对此不作限定。
S306,在基本块1中插入if语句,得到新基本块1。
其中,if语句用于在程序执行的过程中,根据日志打印语句中日志的日志等级,确定跳转执行基本块2或跳转执行基本块4。具体的,可在基本块1中的最后一条语句之后,插入if语句。在基本块1中插入if语句的操作为一种插桩操作。
示例性的,如图5中(a)所示,插入基本块1的if语句可表示为If(level(Log.e)<Control_level)。if语句的索引均与第一个基本块中的任何一条语句不相同,可由编译器自动生成,如v209。level(Log.e)<Control_level表示if语句中的判定条件。其中,if语句中的level(Log.e)表示根据日志打印语句的名称,确定日志的日志等级为error等级;Control_level指预设的打印等级,例如,预设打印等级可由开发人员进行设置,例如设置为error等级。在程序执行的过程中,当if语句的值为真(true,可设置为1),即日志等级小于预设打印等级时,if语句指示执行基本块4,表示不执行日志打印语句;当if语句的值为假(false,可设置为0),即日志等级大于或等于预设打印等级时,if语句指示执行基本块2,表示执行日志打印语句。换言之,插入if语句后,可指示基本块1的后继节点为基本块2和基本块4。
基于此,在程序执行时,若日志打印语句所指示的日志的日志等级小于预设打印等级时,编译器可自动选择不执行包括日志打印语句的新基本块2,而选择执行不包括日志打印语句的基本块4。可见,在程序执行时,可自动判断根据日志等级决定是否打印日志,从而可以实现不打印日志等级低的日志,减少日志打印量。
S307,建立新基本块1、新基本块2、基本块3、基本块4之间的连接关系。
具体的,建立的连接关系可以是:新基本块1的第一个后继节点为新基本块2,第二个后继节点为基本块4,新基本块2和基本块4的后继节点均为基本块3。
示例性的,连接后的各个基本块之间的连接关系可如图5中(b)所示,箭头的方向表示在程序执行时,控制流可前进的方向。如图5中(b)所示,在程序执行时,首先依次执行基本块1中的所有语句,当执行至if语句时,可根据if语句中的判定条件是否成立,即确定if语句的值为真或假,从而决定执行新基本块2或基本块4。例如,当if语句的值为真时,在执行基本块1后,将执行基本块4,再执行新基本块3,在此过程中,未执行日志打印语句,即未打印日志;当if语句的值为假时,执行新基本块2,再执行新基本块3,在此过程中,已执行日志打印语句,即打印了日志。
可选的,在建立好连接关系后,可根据连接关系,更新第一个基本块所属的中间代码的流图中的参数。例如,流图中的参数可以是与其他基本块之间的连接关系。示例性的,如图1所示,第一个基本块Bx的后继节点为第二个基本块By,换言之,By的前驱节点为Bx。对第一个基本块进行拆分和插桩等操作后,如图5中(b)所示,得到基本块1至基本块4,因此需要将By的前驱节点更新为基本块3,从而可保障程序的正常运行。
S308,令j=j+1,用于指示将第j条语句更新为第j+1条语句。
其中,若第j条语句不是日志打印语句,则可通过令j=j+1后,再执行S301,从而可读取第一个基本块中,第j条语句的下一条语句。则可令j=j+1,这样在执行S301时,可读取第j+1条语句。在该读取过程中,可实现依次读取第一个基本块中的每一条语句。示例性的,如图4中(a)所示,当j=1,表示读取第一个基本块中的第一条语句,即读取语句13。通过语句13的名称A可知,语句13不是日志打印语句,于是令j=j+1,此时j=2,表示继续读取语句13之后的语句14,而语句14不是日志打印语句。同理可知,当j=3时,语句15都不是日志打印语句。当j=4时,表示读取第一个基本块中的第四条语句,即读取语句16,可针对第j条语句(此时为语句16)执行S301。
可见,本申请实施例可通过将中间代码进行基本块划分,将日志打印语句拆分至单独的基本块中,以及对拆分后得到的各个基本块进行插桩操作,如插入if语句和goto语句,可实现对基本块的管理,从而可对日志的打印进行管控,如仅打印日志等级大于或等于预设打印等级的日志,从而可减少日志打印量和日志打印引起的IO操作开销,提高系统的运行效率。
当如图3所示的方法执行结束后,可继续读取第一个基本块中的语句。此时,如图4中(a)所示,当读取完第j条语句(如语句16后),应读取第j+1条语句。按照第一个基本块Bx中的顺序,应读取语句17,由于已将Bx进行基本块拆分,得到基本块1、基本块2和基本块3,而语句17在基本块3中,因此,应从新基本块3中的第一条语句开始读取,即读取语句17。
在一种可能的实现方式中,读取语句17,因语句17不是日志打印语句,则接着读取语句18,当语句18为日志打印语句时,则可执行如图3所示的S302至S306,对新基本块3进行基本块拆分等操作。基于相同的发明构思,在此过程中,可生成基本块31、基本块32、基本块33,以及构建基本块34。示例性的,对新基本块3进行如图3所示的处理后,可得到如图6所示的多个基本块。如图6所示,基本块31可表示为B31,包括在基本块3中位于语句18之前的所有语句(即语句17),以及if语句;基本块32可表示为B32,包括日志打印语句(即语句18),以及goto语句;基本块33可表示为B33,包括在基本块3中位于语句18之后的所有语句(即语句19)。其中,B31中的if语句与如图3所示的B1中的if语句可以是相同的语句,也可以是不同的语句,编译器或开发人员可在读取过程中对if语句中的判定条件进行设置或更改。本申请以B31中的if语句与如图3所示的B1中的if语句是相似的if语句为例进行说明。
此时,可继续读取语句18的后一条语句,即,从基本块33中开始读取语句19,语句19不是日志打印语句,则不作处理。由于语句19为基本块33中的最后一条语句,同时也是拆分前的第一个基本块中的最后一条语句,则应开始读取第一个基本块的后一个基本块,如第二个基本块中的语句。读取第二个基本块的流程与图3所示的流程一致,此处不再赘述。基于如图3所示的流程,可将中间代码划分成的所有基本块进行基本块拆分和插桩等操作,从而可实现对中间代码中的所有日志打印语句的管理。
示例性的,假设中间代码被划分成了两个基本块,分别为第一个基本块Bx和第二个基本块By。当第二个基本块By完成如图3所示的基本块拆分等操作后,得到的基本块分别为By1、By2、By3和By4。如图7所示,第一个基本块Bx,第二个基本块为By之间的连接关系可如图7所示。
在另一种可能的实现方式中,第一基本块Bx中可包括返回(return)语句,且返回语句引用日志打印语句,将日志打印语句的值作为函数返回值。示例性的,如图8中(a)所示,第一个基本块Bx包括返回语句ReturnVoid[i16],表示引用语句16(为日志打印语句),将语句16的值转换为void类型,并作为函数返回值。在此种情况下,若按照如图3所示的流程,可得到如图8中(b)所示的各个基本块。在程序执行时,当if语句的值为真,在执行B1后,将执行B4,再执行B3,该执行方向可由图8中(b)的粗箭头表示。此时,执行B3中的语句19时,需将语句16的值作为函数返回值,由于未执行B2,return语句无法获取语句16的值,因此,当执行至语句19时会出现执行错误。为了避免此问题的发生,本申请实施例提供另一种基本块管理方法,可在实现日志打印管理的同时,确保程序的正常执行。
请参阅图9,以第一基本块中包括日志打印语句以及返回语句为例,对基本块管理方法进行示例性说明。如图9所示,基本块管理方法可包括但不限于以下步骤:
S901,读取第一个基本块中的第j条语句。
其中,第一个基本块可包括N条语句,N为大于或等于1的整数。第j条语句为第一个基本块中的任意一条语句,j大于或等于1且小于或等于N。
基于同一发明构思,S901的具体实现可参阅如图3所示的S301,此处不再赘述。
S902,若第j条语句为日志打印语句,则执行S903;若第j条语句不是日志打印语句执行S909。
基于同一发明构思,S902的具体实现可参阅如图3所示的S302,此处不再赘述。
S903,拆分第一个基本块,得到基本块1、基本块2和基本块3。
其中,基本块1包括第一个基本块中位于第j条语句,即日志打印语句之前的所有语句,基本块2包括第j条语句,基本块3包括第一个基本块中位于第j条语句之后的所有语句。
基于同一发明构思,S903的具体实现可参阅如图3所示的S303,此处不再赘述。
S904,构建基本块4,并在基本块4中插入常量语句和goto语句。
其中,常量语句位于goto语句之前。常量语句的索引与第j条语句,即日志打印语句的索引相同,goto语句用于指示在执行完goto语句后,跳转执行基本块3。
基于同一发明构思,在基本块4中插入goto语句的具体实现过程可参阅如图3中S304中的内容,此处不再赘述。
示例性的,编译器可根据第j条语句的索引,确定常量语句的索引。如图8中(a)可知,第j条语句的索引为i16,因此将常量语句的索引确定为i16。常量语句可用于给索引为i16的语句赋值为一个常量,例如,赋值为0或1等任意的常量。在程序执行基本块4时,先执行常量语句,再执行goto语句,从而跳转执行基本块3。
S905,在基本块2中插入goto语句,得到新基本块2。
具体的,可在基本块2中的最后一条语句之后插入goto语句。
基于同一发明构思,S905的具体实现可参阅如图3所示的S305,此处不再赘述。
S906,在基本块1中插入if语句,得到新基本块1。
具体的,可在基本块1中的最后一条语句之后,插入if语句。if语句用于在程序执行的过程中,根据日志打印语句中日志的日志等级,确定跳转执行基本块2或跳转执行基本块4。
基于同一发明构思,S906的具体实现可参阅如图3所示的S306,此处不再赘述。
S907,在基本块3中插入选择函数语句,并修改返回语句,得到新基本块3。
其中,可在基本块3中的返回语句前插入选择函数语句,选择函数语句引用的语句的索引与日志打印语句的索引相同。换言之,选择函数语句可引用新基本块2中的第j条语句,也可引用基本块4中的常量语句。将返回语句引用的语句索引更新为选择函数语句的索引,其中,选择函数语句可以是Phi函数语句,选择函数语句的索引可由编译器自动生成。换言之,将返回语句引用第j条语句修改为返回语句引用选择函数语句。
示例性的,如图10所示,选择函数语句可以表示为Phi[i16],表示引用语句16,使得选择函数语句的值根据语句16的值确定。其中,选择函数语句的索引由编译器自动生成,例如可以为v212。由于第j条语句和常量语句的索引相同,均为i16,则语句16可以是新基本块2中的第j条语句,也可以是基本块4中的常量语句。在程序执行时,选择函数语句可根据程序执行的方向自动确定语句16的值。示例性的,如图10所示,当if语句指示在执行B1后执行B2,程序的执行方向为从B1到B2再到B3,则选择函数语句所引用的语句16为第j条语句;当if语句指示在执行B1后执行B4,程序的执行方向为从B1到B4再到B3,则选择函数语句所引用的语句16为常量语句。
示例性的,如图8中(a)所示,返回语句原本为ReturnVoid[i16],表示函数返回值为语句16的值。在插入选择函数语句后,将返回语句所引用语句的索引进行更新,则返回语句可表示为ReturnVoid[v212],表示函数返回值为语句212的值,即函数返回值为选择函数语句的值。基于此,在程序执行过程中,无论程序的执行方向是从B1到B2再到B3,或是从B1到B4再到B3,通过选择函数语句均可自动确定语句16的值,进而返回语句可通过选择函数语句确定函数返回值,从而程序能够正常运行。
S908,建立新基本块1、新基本块2、新基本块3和基本块4之间的连接关系。
具体的,建立的连接关系可以是:新基本块1的第一个后继节点为新基本块2,第二个后继节点为基本块4,新基本块2和基本块4的后继节点均为新基本块3。
基于同一发明构思,S908的具体实现可参阅如图3所示的S307中的具体实现,此处不再赘述。
S909,令j=j+1,用于指示将第j条语句更新为第j+1条语句。
基于同一发明构思,S909的具体实现可参阅如图3所示的S308中的具体实现,此处不再赘述。
可见,在基本块包括返回语句,且返回语句引用日志打印语句的情况下,通过本申请实施例提供的基本块管理方法,可通过管理基本块,实现对日志打印语句的管理,在减少日志打印量,降低IO操作消耗的同时,保障程序的正常运行。
请参阅图11,为本申请实施例提供的一种基本块管理方法的流程示意图。该基本块管理方法可由电子设备执行,或由电子设备中的编译器执行,还可以由具备编译器功能的处理器、芯片或芯片系统等执行。如图11所示,该基本块管理方法可包括但不限于以下步骤:
S101,响应于目标基本块中的第j条语句为日志打印语句,拆分目标基本块,得到第一基本块、第二基本块和第三基本块。
其中,目标基本块为中间代码划分的至少一个基本块中的任意一个;j为大于1的整数。示例性的,目标基本块可以是如图3所示的S301中的第一个基本块,第j条语句可以是图3所示的S301中的第j条语句。
拆分目标基本块后,第一基本块包括目标基本块中的第1条语句至第j-1条语句,第二基本块包括第j条语句,第三基本块包括目标基本块中的第j+1条语句至最后一条语句。示例性的,第一基本块可以是如图3所示的S303中的基本块1,第二基本块可以是S303中的基本块2,第三基本块可以是S303中的基本块3。
基于同一发明构思,S101的具体实现过程可参阅图3所示的S303,此处不再赘述。
在一种可能的实现方式中,可通过读取第j条语句的语句内容来判断第j条语句是否为日志打印语句。例如,若第j条语句的语句内容包括调用日志打印方法,则可确定第j条语句为日志打印语句。
在一种可能的实现方式中,当j=1时,表示目标基本块中的第一条语句即为日志打印语句,则第一基本块为空,第三基本块不为空。当j为大于1且小于N的整数时,第一基本块、第三基本块也不为空。当j=N时,表示第j条语句为目标基本块中的最后一条语句,在此种情况下,第一基本块不为空,但第三基本块为空。
S102,构建包括第一跳转语句的第四基本块。
第一跳转语句用于指示在执行完第一跳转语句后跳转执行第三基本块。其中,第一跳转语句可以是如图3所示的S304中的goto语句,第四基本块可以是S304中的基本块4。
基于同一发明构思,S102的具体实现过程可参阅如图3所示的S304。
S103,在第二基本块中插入第一跳转语句,得到第五基本块。
插入第二基本块中的第一跳转语句的作用与第四基本块包括的第一跳转语句作用相同,均是用于指示在执行完第一跳转语句后,跳转执行第三基本块。其中,插入第一跳转语句后得到的第五基本块可以是如图3所示的S305中的新基本块2。
需要说明的是,S102和S103之间的执行顺序可以是任意的,本申请对此不作限定。例如,可以在执行完S101后,同时执行S102和S103,或先后执行S102和S103。
S104,在第一基本块中插入第一条件语句,得到第六基本块。
第一条件语句用于指示在执行完第一条件语句后跳转执行第四基本块或第五基本块。例如,通过第一条件语句可判断第j条语句是否满足打印条件,并根据得到的判断结果确定跳转执行第四基本块或第五基本块。其中,第一条件语句可以是如图3所示的S306中的if语句;第六基本块可以是S306中的新基本块1;打印条件可以是如图3所示的S306中的打印条件。
在一种可能的实现方式中,当第一条件语句确定第j条语句满足打印条件时,则第一条件语句用于指示在执行完第一条件语句后,跳转执行第五基本块,然后可执行S105。
在一种可能的实现方式中,当第一条件语句确定第j条语句不满足打印条件时,则第一条件语句用于指示在执行完第一条件语句后,跳转执行第四基本块,然后可执行S106。
在一种可能的实现方式中,当j=1时,表示目标基本块中的第一条语句就是日志打印语句。对目标基本块进行拆分后,第一基本块为空。因此,第一条件语句插入第一基本块中后,第一条件语句是第六基本中的第一条语句。
S105,确定第六基本块、第五基本块以及第三基本块之间的执行顺序。
其中,该执行顺序可以是:第六基本块的后继节点为第五基本块,第五基本块的后继节点为第三基本块。换言之,在执行完第六基本块后,执行第五基本块;执行完第五基本块后,在执行第三基本块。在此种情况下,说明当第j条语句满足打印条件时,可执行包括第j条语句的第五基本块,从而可以打印日志。
S106,确定第六基本块、第四基本块以及第三基本块之间的执行顺序。
其中,该执行顺序可以是:第六基本块的后继节点为第四基本块,第四基本块的后继节点为第三基本块。换言之,在执行完第六基本块后,执行第四基本块;执行完第四基本块后,在执行第三基本块。在此种情况下,说明当第j条语句满足打印条件时,可执行不包括第j条语句的第四基本块,从而可以不执行第j条语句,不打印日志。因此,可以减少日志的打印数量,在一定程度上降低系统的功耗。
基于同一发明构思,S105与S106的具体实现过程可参阅如图3所示的S307中的过程,此处不再赘述。
在一种可能的实现方式中,若第三基本块中的第k条语句也是日志打印语句,则可基于相同的方法对第三基本块进行处理。该处理过程可包括:拆分第三基本块,得到第九基本块、第十基本块和第十一基本块;其中,第一基本块包括第三基本块中的第1条语句至第k-1条语句,第十基本块包括第k条语句,第十一基本块包括第三基本块中的第k+1条语句至最后一条语句;构建包括第二跳转语句的第十二基本块,并在第二基本块中插入第二跳转语句,得到第十三基本块;跳转语句用于指示在执行完跳转语句后跳转执行第十一基本块;在第九基本块中插入第二条件语句,得到第十四基本块;第二条件语句用于指示在执行完第二条件语句后跳转执行第十二基本块或第十三基本块;确定第十一基本块、第十三基本块以及第十四基本块之间的执行顺序,或确定第十一基本块、第十二基本块以及第十四基本块之间的执行顺序。
其中,第九基本块、第十基本块和第十一基本块可以分别是如图6所示的B31、B32和B33;第十二基本块可以是如图6所示的B34。
在一种可能的实现方式中,若目标基本块中的第j+i条语句为返回(return)语句,且返回语句引用日志打印语句,将日志打印语句的值作为函数返回值,则可在第四基本块中插入如图9中的S904所示的常量语句,得到第七基本块;在第三基本块中插入如图9所示的S907所示的选择函数语句,以及将第三基本块中的第j+i条语句引用第j条语句修改为第j+i条语句引用选择函数语句,得到第八基本块。其中,第七基本块、第八基本块分别可以是如图9所示的基本块4和新基本块3。
进一步地,当第一条件语句确定第j条语句满足打印条件时,则第一条件语句用于指示在执行完第一条件语句后,跳转执行第五基本块,以及确定选择函数语句引用第五基本块。即,可确定第六基本块的后继节点为第五基本块,第五基本块的后继节点为第八基本块。
当第一条件语句确定第j条语句不满足打印条件时,则第一条件语句用于指示在执行完第一条件语句后,跳转执行第七基本块,以及确定择函数语句引用第七基本块。即,可确定第六基本块的后继节点为第七基本块,第四基本块的后继节点为第八基本块。
可见,在目标基本块包括返回语句,且返回语句引用日志打印语句的情况下,通过本申请实施例提供的基本块管理方法,可管理基本块。基于对基本块的管理,可实现对日志打印语句的管理,从而减少日志打印量,降低IO操作消耗,保障程序的正常运行。
下面对电子设备100的结构进行介绍。请参阅图12,图12是本申请实施例提供的电子设备100的结构示意图。应该理解的是,电子设备100可以具有比图12中所示的更多的或者更少的部件,可以组合两个或多个的部件,或者可以具有不同的部件配置。图12中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。
电子设备100可以包括:处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。其中传感器模块180可以包括压力传感器180A,陀螺仪传感器180B,气压传感器180C,磁传感器180D,加速度传感器180E,距离传感器180F,接近光传感器180G,指纹传感器180H,温度传感器180J,触摸传感器180K,环境光传感器180L,骨传导传感器180M等。
可以理解的是,本申请实施例示意的结构并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图12所示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图12所示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
其中,控制器可以是电子设备100的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter-integrated circuit,I2C)接口,集成电路内置音频(inter-integrated circuitsound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general-purposeinput/output,GPIO)接口,用户标识模块(subscriber identity module,SIM)接口,和/或通用串行总线(universal serial bus,USB)接口等。
可以理解的是,本申请实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备100的结构限定。在本申请另一些实施例中,电子设备100也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
充电管理模块140用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。
电源管理模块141用于连接电池142,充电管理模块140与处理器110。电源管理模块141接收电池142和/或充电管理模块140的输入,为处理器110,内部存储器121,外部存储器,显示屏194,摄像头193,和无线通信模块160等供电。
电子设备100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
电子设备100通过GPU,显示屏194,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏194和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
显示屏194用于显示图像,视频等。显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD),有机发光二极管(organic light-emittingdiode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrixorganic light emitting diode的,AMOLED),柔性发光二极管(flex light-emittingdiode,FLED),Miniled,MicroLed,Micro-oLed,量子点发光二极管(quantum dot lightemitting diodes,QLED)等。在一些实施例中,电子设备100可以包括1个或N个显示屏194,N为大于1的正整数。
电子设备100可以通过ISP,摄像头193,视频编解码器,GPU,显示屏194以及应用处理器等实现拍摄功能。
ISP 用于处理摄像头193反馈的数据。例如,拍照时,打开快门,光线通过镜头被传递到摄像头感光元件上,光信号转换为电信号,摄像头感光元件将所述电信号传递给ISP处理,转化为肉眼可见的图像。
摄像头193用于捕获静态图像或视频。物体通过镜头生成光学图像投射到感光元件。感光元件可以是电荷耦合器件(charge coupled device,CCD)或互补金属氧化物半导体(complementary metal-oxide-semiconductor,CMOS)光电晶体管。
数字信号处理器用于处理数字信号,除了可以处理数字图像信号,还可以处理其他数字信号。例如,当电子设备100在频点选择时,数字信号处理器用于对频点能量进行傅里叶变换等。
视频编解码器用于对数字视频压缩或解压缩。电子设备100可以支持一种或多种视频编解码器。这样,电子设备100可以播放或录制多种编码格式的视频,例如:动态图像专家组(moving picture experts group,MPEG)1,MPEG2,MPEG3,MPEG4等。
NPU为神经网络(neural-network ,NN)计算处理器,通过借鉴生物神经网络结构,例如借鉴人脑神经元之间传递模式,对输入信息快速处理,还可以不断的自学习。通过NPU可以实现电子设备100的智能认知等应用,例如:图像识别,人脸识别,语音识别,文本理解等。
外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将压缩后的驱动文件等文件保存在外部存储卡中。
内部存储器121可以用于存储计算机可执行程序代码,所述可执行程序代码包括指令。处理器110通过运行存储在内部存储器121的指令,从而执行电子设备100的各种功能应用以及数据处理。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用(比如人脸识别功能,指纹识别功能、移动支付功能等)等。存储数据区可存储电子设备100使用过程中所创建的数据(比如人脸信息模板数据,指纹信息模板等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universalflash storage,UFS)等。
电子设备100可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
音频模块170用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。
扬声器170A,也称“喇叭”,用于将音频电信号转换为声音信号。
受话器170B,也称“听筒”,用于将音频电信号转换成声音信号。
麦克风170C,也称“话筒”,“传声器”,用于将声音信号转换为电信号。
耳机接口170D用于连接有线耳机。耳机接口170D可以是USB接口130,也可以是3.5mm的开放移动电子设备平台(open mobile terminal platform,OMTP)标准接口,美国蜂窝电信工业协会(cellular telecommunications industry association of the USA,CTIA)标准接口。
按键190包括开机键,音量键等。按键190可以是机械按键。也可以是触摸式按键。电子设备100可以接收按键输入,产生与电子设备100的用户设置以及功能控制有关的键信号输入。
需要说明的是,对与上述方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但本领域技术人员应当知悉,本申请并不受所描述的动作顺序的限制。其次,本领域技术人员也应当知悉,说明书中所述的实施例均属优选实施例,所涉及的动作并不一定是本申请所必须的。
本申请的实施方式可以任意进行组合,以实现不同的技术效果。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘solid statedisk)等。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以由计算机程序来指令相关的硬件完成,该程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法实施例的流程。而前述的存储介质包括:ROM或随机存储记忆体RAM、磁碟或者光盘等各种可存储程序代码的介质。
总之,以上所述仅为本申请技术方案的实施例,并非用于限定本申请的保护范围。
凡根据本申请的揭露,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (11)
1.一种基本块管理方法,其特征在于,所述方法包括:
响应于目标基本块中的第j条语句为日志打印语句,拆分所述目标基本块,得到第一基本块、第二基本块和第三基本块;所述第一基本块包括所述目标基本块中的第1条语句至第j-1条语句,所述第二基本块包括所述第j条语句,所述第三基本块包括所述目标基本块中的第j+1条语句至最后一条语句;其中,所述目标基本块为中间代码划分的至少一个基本块中的任意一个;j为大于1的整数;
构建包括第一跳转语句的第四基本块,并在所述第二基本块中插入所述第一跳转语句,得到第五基本块;所述第一跳转语句用于指示在执行完所述第一跳转语句后跳转执行所述第三基本块;
在所述第一基本块中插入第一条件语句,得到第六基本块;所述第一条件语句用于指示在执行完所述第一条件语句后跳转执行所述第四基本块或第五基本块;
确定所述第六基本块、所述第五基本块以及所述第三基本块之间的执行顺序,或确定所述第六基本块、所述第四基本块以及所述第三基本块之间的执行顺序。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
读取所述第j条语句的语句内容;
响应于所述语句内容包括调用日志打印方法,确定所述第j条语句为所述日志打印语句。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
响应于所述第j条语句满足打印条件,确定所述第一条件语句用于指示在执行完所述第一条件语句后,跳转执行所述第五基本块;
所述确定所述第六基本块、所述第五基本块以及所述第三基本块之间的执行顺序,包括:
确定所述第六基本块的后继节点为所述第五基本块,所述第五基本块的后继节点为所述第三基本块。
4.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
响应于所述第j条语句不满足打印条件,确定所述第一条件语句用于指示在执行完所述第一条件语句后,跳转执行所述第四基本块;
所述确定所述第六基本块、所述第四基本块以及所述第三基本块之间的执行顺序,包括:
确定所述第六基本块的后继节点为所述第四基本块,所述第四基本块的后继节点为所述第三基本块。
5.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
响应于所述目标基本块中的第j+i条语句为返回语句且所述第j+i条语句引用所述第j条语句,在所述第四基本块中插入常量语句,得到第七基本块;其中,i为大于1的整数;
在所述第三基本块中插入选择函数语句,并将所述第三基本块中的所述第j+i条语句引用所述第j条语句修改为所述第j+i条语句引用所述选择函数语句,得到第八基本块;其中,所述选择函数语句的执行顺序先于所述第j+i条语句的执行顺序;所述选择函数语句用于根据所述第一条件语句确定所述选择函数语句引用所述第j条语句或所述常量语句。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
响应于所述第j条语句满足打印条件,确定所述第一条件语句用于指示在执行完所述第一条件语句后,跳转执行所述第五基本块,以及确定所述选择函数语句引用所述第五基本块;
确定所述第六基本块的后继节点为所述第五基本块,所述第五基本块的后继节点为所述第八基本块。
7.根据权利要求5所述的方法,其特征在于,所述方法还包括:
响应于所述第j条语句不满足打印条件,确定所述第一条件语句用于指示在执行完所述第一条件语句后,跳转执行所述第七基本块,以及确定所述选择函数语句引用所述第七基本块;
确定所述第六基本块的后继节点为所述第四基本块,所述第四基本块的后继节点为所述第八基本块。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于所述第三基本块中的第k条语句为所述日志打印语句,拆分所述第三基本块,得到第九基本块、第十基本块和第十一基本块;其中,所述第一基本块包括所述第三基本块中的第1条语句至第k-1条语句,所述第十基本块包括所述第k条语句,所述第十一基本块包括所述第三基本块中的第k+1条语句至最后一条语句;
构建包括第二跳转语句的第十二基本块,并在所述第二基本块中插入所述第二跳转语句,得到第十三基本块;所述跳转语句用于指示在执行完所述跳转语句后跳转执行所述第十一基本块;
在所述第九基本块中插入第二条件语句,得到第十四基本块;所述第二条件语句用于指示在执行完所述第二条件语句后跳转执行所述第十二基本块或第十三基本块;
确定所述第十一基本块、所述第十三基本块以及所述第十四基本块之间的执行顺序,或确定所述第十一基本块、所述第十二基本块以及所述第十四基本块之间的执行顺序。
9.一种电子设备,其特征在于,包括:存储器、处理器;其中:
所述存储器,用于存储计算机程序,所述计算机程序包括程序指令;
所述处理器用于调用所述程序指令,使得所述电子设备执行如权利要求1-8任意一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时,实现如权利要求1-8任意一项所述的方法。
11.一种包含指令的计算机程序产品,其特征在于,当所述计算机程序产品在电子设备上运行时,使得所述电子设备执行如权利要求1-8中任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310742545.9A CN116483289B (zh) | 2023-06-21 | 2023-06-21 | 基本块管理方法及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310742545.9A CN116483289B (zh) | 2023-06-21 | 2023-06-21 | 基本块管理方法及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116483289A true CN116483289A (zh) | 2023-07-25 |
CN116483289B CN116483289B (zh) | 2024-04-05 |
Family
ID=87218103
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310742545.9A Active CN116483289B (zh) | 2023-06-21 | 2023-06-21 | 基本块管理方法及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116483289B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050183072A1 (en) * | 1999-07-29 | 2005-08-18 | Intertrust Technologies Corporation | Software self-defense systems and methods |
US20120017203A1 (en) * | 2010-07-14 | 2012-01-19 | International Business Machines Corporation | Path-Sensitive Analysis for Reducing Rollback Overheads |
US20180173612A1 (en) * | 2016-12-20 | 2018-06-21 | Undo Ltd. | Debugging method |
CN111177733A (zh) * | 2019-12-30 | 2020-05-19 | 北京航空航天大学 | 一种基于数据流分析的软件补丁检测方法及装置 |
-
2023
- 2023-06-21 CN CN202310742545.9A patent/CN116483289B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050183072A1 (en) * | 1999-07-29 | 2005-08-18 | Intertrust Technologies Corporation | Software self-defense systems and methods |
US20120017203A1 (en) * | 2010-07-14 | 2012-01-19 | International Business Machines Corporation | Path-Sensitive Analysis for Reducing Rollback Overheads |
US20180173612A1 (en) * | 2016-12-20 | 2018-06-21 | Undo Ltd. | Debugging method |
CN111177733A (zh) * | 2019-12-30 | 2020-05-19 | 北京航空航天大学 | 一种基于数据流分析的软件补丁检测方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN116483289B (zh) | 2024-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9600272B2 (en) | Hierarchical directives-based management of runtime behaviors | |
US8707263B2 (en) | Using a DSL for calling APIS to test software | |
EP3123315B1 (en) | Hierarchical directives-based management of runtime behaviors | |
EP3971706A2 (en) | Method, apparatus and electronic device for deploying operator in deep learning frame work | |
US11579856B2 (en) | Multi-chip compatible compiling method and device | |
KR101786156B1 (ko) | 사용자 정의 타입을 위한 컴파일 타임 경계 검사 기법 | |
US20090328016A1 (en) | Generalized expression trees | |
CN111506314B (zh) | 项目开发的方法、装置、服务器及介质 | |
CN113296786B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN110945475A (zh) | 用于提供可打补丁的rom固件的系统和方法 | |
CN115951890B (zh) | 一种不同前端框架间的代码转换方法及系统及装置 | |
US20160188352A1 (en) | System and method for compiler support for compile time customization of code | |
WO2019227899A1 (zh) | 程序调用解耦 | |
CN116483289B (zh) | 基本块管理方法及电子设备 | |
CN110018831B (zh) | 程序处理方法、装置及计算机可读存储介质 | |
CN116483736B (zh) | 插桩位置确定方法及电子设备 | |
CN115373988A (zh) | 测试用例的生成方法、测试方法、电子设备及存储介质 | |
CN114911541A (zh) | 配置信息的处理方法、装置、电子设备及存储介质 | |
CN105393216B (zh) | 运行时内存调节 | |
CN113961238A (zh) | 对象转换方法、装置及电子设备和存储介质 | |
CN113778451A (zh) | 文件加载方法、装置、计算机系统和计算机可读存储介质 | |
CN115237458A (zh) | 一种调用推理硬件执行ai应用的方法及相关产品 | |
CN111767033A (zh) | 用于机械臂程序开发的编程系统及功能扩展方法 | |
CN112306844A (zh) | 软件开发系统的接口测试方法、装置、设备及存储介质 | |
CN117707918B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |