CN116483736B - 插桩位置确定方法及电子设备 - Google Patents

插桩位置确定方法及电子设备 Download PDF

Info

Publication number
CN116483736B
CN116483736B CN202310742521.3A CN202310742521A CN116483736B CN 116483736 B CN116483736 B CN 116483736B CN 202310742521 A CN202310742521 A CN 202310742521A CN 116483736 B CN116483736 B CN 116483736B
Authority
CN
China
Prior art keywords
statement
basic block
sentence
determining
queue
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
Application number
CN202310742521.3A
Other languages
English (en)
Other versions
CN116483736A (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.)
Honor Device Co Ltd
Original Assignee
Honor Device 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 Honor Device Co Ltd filed Critical Honor Device Co Ltd
Priority to CN202310742521.3A priority Critical patent/CN116483736B/zh
Publication of CN116483736A publication Critical patent/CN116483736A/zh
Application granted granted Critical
Publication of CN116483736B publication Critical patent/CN116483736B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/425Lexical analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • 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)
  • Computational Linguistics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请提供一种插桩位置确定方法及电子设备,该方法包括:当目标基本块中的第j条语句为日志打印语句,调用处理函数,从第j条语句引用的语句中确定出满足处理条件的第一语句,将第一语句和第一语句的语句标识添加至第一映射表,将第一语句添加至第一队列;从第一队列取出第一语句,调用处理函数,从第一语句引用的语句中确定出满足处理条件的第二语句,将第二语句和第二语句的语句标识添加至第一映射表,将第二语句添加至第一队列;从第一队列取出第二语句,调用处理函数,确定出第二语句未引用其他语句,或确定出第二语句引用的语句不满足处理条件;基于第一映射表,确定目标基本块对应的插桩位置标识。通过本申请,可准确地确定出插桩位置。

Description

插桩位置确定方法及电子设备
技术领域
本申请涉及计算机技术领域,尤其涉及插桩位置确定方法及电子设备。
背景技术
插桩,是指在是原有代码的逻辑完整性的基础上,由编译器或开发人员在原有代码中选定插桩位置,并在插桩位置插入自定义代码,或替换原有代码中的部分代码的技术。其中,原有代码可以是源代码、目标代码或中间代码。通过插桩,可以获取原有代码中的信息,例如函数的调用信息、函数的返回值等。插桩技术可应用于测试程序性能、检测错误、获取程序执行信息等,可实现代码监测、代码修改、代码分析等功能。如何提高插桩位置的准确性是插桩技术中的关键问题。
发明内容
本申请实施例提供一种插桩位置确定方法及电子设备,可准确地确定出插桩位置。
第一方面,本申请实施例提供了一种插桩位置确定方法,该方法可由电子设备执行,或由与电子设备匹配的装置执行,例如由处理器、芯片或芯片系统等执行。该方法可包括:响应于目标基本块中的第j条语句为日志打印语句,调用处理函数,从第j条语句引用的至少一条语句中确定出满足处理条件的第一语句,将第一语句和第一语句的语句标识添加至第一映射表,并将第一语句添加至第一队列;从第一队列取出第一语句,调用处理函数,从第一语句引用的至少一条语句中确定出满足处理条件的第二语句,将第二语句和第二语句的语句标识添加至第一映射表,将第二语句添加至第一队列;从第一队列取出第二语句,调用处理函数,确定出第二语句未引用其他语句,或确定出第二语句引用的语句不满足处理条件;基于第一映射表,确定目标基本块对应的插桩位置标识。其中,第一映射表用于确定目标基本块对应的插桩位置标识,第一队列用于存储满足处理条件的语句;j为大于1的整数;目标基本块为中间代码划分的至少一个基本块中的任意一个。
可见,本申请实施例可在目标基本块的第j条语句为日志打印语句的情况下,通过处理函数,确定出准确的目标基本块对应的插桩位置标识,从而有利于基于目标基本块对应的插桩位置标识对日志打印语句进行管理。
在一种可能的实现方式中,该方法还可包括:基于目标基本块对应的插桩位置标识,拆分目标基本块,得到第一基本块、第二基本块和第三基本块;其中,第一基本块包括目标基本块中的第1条语句至第j-1条语句中未被添加至第一映射表的语句;第二基本块包括第j条语句和第一映射表中的语句;第三基本块包括目标基本块中第j+1条语句至最后一条语句。
可见,基于确定的目标基本块对应的插桩位置标识,可将目标基本块进行拆分,使第j条语句和满足处理条件的语句单独拆分至第二基本块,实现对日志打印语句和满足处理条件的语句的管理。
在一种可能的实现方式中,该方法还可包括:构建包括第一跳转语句的第四基本块,并在第二基本块中插入第一跳转语句,得到第五基本块;第一跳转语句用于指示在执行完跳转语句后跳转执行第三基本块;在第一基本块中的第一目标语句之后插入第一条件语句,得到第六基本块;其中,第一条件语句用于指示在执行完第六基本块后跳转执行第四基本块或第五基本块;第一目标语句的语句标识比目标基本块对应的插桩位置标识小1。
可见,通过第一条件语句可管理是否执行包括日志打印语句的第五基本块。此外,在确定不执行第五基本块时,可通过执行第四基本块的方式,保障程序的正常运行。
在一种可能的实现方式中,该方法还可包括:响应于第j条语句满足打印条件,确定第一条件语句用于指示在执行完第六基本块后,跳转执行第五基本块;确定第六基本块的后继节点为第五基本块,第五基本块的后继节点为第三基本块。
可见,当第j条语句,即日志打印语句满足打印条件时,可确定在执行完第六基本块后,执行包括日志打印语句的第五基本块,再执行第三基本块,从而可在该过程中执行日志打印语句,实现日志打印。
在一种可能的实现方式中,该方法还可包括:响应于第j条语句不满足打印条件,确定第一条件语句用于指示在执行完第六基本块后,跳转执行第四基本块;确定第六基本块的后继节点为第四基本块,所第四基本块的后继节点为第三基本块。
可见,当第j条语句,即日志打印语句不满足打印条件时,可确定在执行完第六基本块后,执行不包括日志打印语句的第五基本块,再执行第三基本块,从而可在该过程中,不执行日志打印语句,即不会打印日志,从而可以降低日志的打印量。
在一种可能的实现方式中,该方法还可包括:读取第j条语句的语句内容;响应于语句内容包括调用日志打印方法,则确定第j条语句为日志打印语句。
可见,可通过第j条语句的语句内容,确定第j条语句是否为日志打印语句。
在一种可能的实现方式中,上述基于第一映射表中的第一语句的语句标识和第二语句的语句标识,确定目标基本块对应的插桩位置标识,可包括:响应于第一语句的语句标识小于或等于第二语句的语句标识,确定目标基本块对应的插桩位置标识为第一语句的语句标识;响应于第一语句的语句标识大于第二语句的语句标识,确定目标基本块对应的插桩位置标识为第二语句的语句标识。
可见,通过本申请可将目标基本块对应的插桩位置标识确定为第一语句的语句标识和第二语句的语句标识中最小的语句标识,从而可确定出准确的插桩位置,使得第一映射表中的语句可与第j条语句一起拆分至第二基本块中,以及可通过插入的第一条件语句,实现对第j条语句和第一映射表中的语句的管理。
在一种可能的实现方式中,该方法还可包括:响应于第三基本块中的第i条语句为日志打印语句,调用处理函数,从第i条语句引用的至少一条语句中确定出满足处理条件的第三语句,将第三语句添加至第二映射表,并将第三语句添加至第二队列;其中,第二映射表用于确定第三基本块对应的插桩位置标识,第二队列用于存储满足处理条件的语句;从第二队列中取出第三语句,调用处理函数,从第三语句引用的至少一条语句中确定出满足处理条件的第四语句,将第四语句添加至第二映射表,并将第四语句添加至第二队列;从第二队列中取出第四语句,调用处理函数,确定出第四语句未引用其他语句,或确定出第四语句引用的语句不满足处理条件;基于第二映射表中的第三语句的语句标识和第四语句的语句标识,确定第三基本块对应的插桩位置标识。
可见,将目标基本块拆分后,可继续对第三基本块中包括的日志打印语句进行处理,从而确定准确的第三基本块对应的插桩位置标识。
在一种可能的实现方式中,确定出第三基本块对应的插桩位置标识后,该方法还可包括:基于第三基本块对应的插桩位置标识,拆分第三基本块,得到第七基本块、第八基本块和第九基本块;其中,第七基本块包括第三基本块中的第1条语句至第i-1条语句中未被添加至第二映射表的语句;第八基本块包括第i条语句和第二映射表中的语句;第九基本块包括第三基本块中第i+1条语句至最后一条语句。
可见,可基于第三基本块对应的插桩位置标识,可对第三基本块进行拆分,使得第i条语句,即日志打印语句,以及被添加至第二映射表中的语句可被拆分至第八基本块,有利于对第i条语句和第二映射表中的语句进行管理。
在一种可能的实现方式中,该方法还可包括:构建包括第二跳转语句的第十基本块,并在第八基本块中插入第二跳转语句,得到第十一基本块;第二跳转语句用于指示在执行完跳转语句后跳转执行第九基本块;在第七基本块中的第二目标语句之前,插入第二条件语句,得到第十二基本块;其中,条件语句用于指示在执行完第十二基本块后跳转执行第十基本块或第十二基本块;第二目标语句的语句标识比第三基本块对应的插桩位置标识小1。
可见,通过第二条件语句可确定是否执行包括日志打印语句的第十一基本块。通过第二跳转语句,可确定在执行第十一基本块后,或在执行第十基本块后,需要执行第九基本块。其中,在确定不执行第五基本块时,可通过执行第十基本块的方式,保障程序的正常运行。
第二方面,本申请实施例提供一种电子设备,该电子设备包括:一个或多个处理器和存储器;该存储器与该一个或多个处理器耦合,该存储器用于存储计算机程序代码,该计算机程序代码包括计算机指令,该一个或多个处理器调用该计算机指令以使得该电子设备执行如第一方面或第一方面的任意一种实现方式所述的方法。
第三方面,本申请实施例提供了一种包含指令的计算机程序产品,当该计算机程序产品在电子设备上运行时,使得该电子设备执行如第一方面或第一方面的任意一种实现方式所述的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,包括指令,当该指令在电子设备上运行时,使得该电子设备执行如第一方面或第一方面的任意一种实现方式所述的方法。
附图说明
图1是本申请实施例提供的一种基本块的示意图;
图2是本申请实施例提供的一种编译器主要工作的流程示意图;
图3是本申请实施例提供的一种插桩位置确定方法的流程示意图;
图4是本申请实施例提供的一种基本块拆分的示意图;
图5是本申请实施例提供的一种在基本块中进行插桩的示意图;
图6是本申请实施例提供的一种拆分后的基本块连接关系示意图;
图7是本申请实施例提供的另一种插桩位置确定方法的流程示意图;
图8是本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或者特性可以包含在本实施例申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是相同的实施例,也不是与其它实施例互斥的独立的或是备选的实施例。本领域技术人员可以显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及所述附图中术语“第一”、“第二”、“第三”等是区别于不同的对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如,包含了一系列步骤或单元,或者可选地,还包括没有列出的步骤或单元,或者可选地还包括这些过程、方法、产品或设备固有的其它步骤或单元。
附图中仅示出了与本申请相关的部分而非全部内容。在更加详细地讨论示例性实施例之前,应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
在本说明书中使用的术语“部件”、“模块”、“系统”、“单元”等用于表示计算机相关的实体、硬件、固件、硬件和软件的组合、软件或执行中的软件。例如,单元可以是但不限于在处理器上运行的进程、处理器、对象、可执行文件、执行线程、程序和/或分布在两个或多个计算机之间。此外,这些单元可从在上面存储有各种数据结构的各种计算机可读介质执行。单元可例如根据具有一个或多个数据分组(例如来自与本地系统、分布式系统和/或网络间的另一单元交互的第二单元数据。例如,通过信号与其它系统交互的互联网)的信号通过本地和/或远程进程来通信。
首先对本申请实施例涉及的名词进行示例性而非限定性的说明。
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归档文件(Java archive,jar)等,相应的,中间代码可以是Java字节码(基于class文件格式存储)。
其中,中间代码为一种与具体的机器体系无关的代码,一种中间语言可生成多种不同体系的机器的目标代码。可见,使用中间代码可以使编译程序的结构在逻辑上更简单明确,以及便于编译器进行与机器无关的代码优化工作。
(2)中间代码的表示方式
中间代码可采用图(graph)的数据结构表示。具体的,编译器可将中间代码划分成至少一个基本块(basic block),并构造流图,通过流图来表示各个基本块间的执行顺序。其中,每个基本块中只有一个入口语句和一个出口语句。入口语句是基本块中的第一条语句,出口语句是基本块中的最后一条语句。对一个基本块而言,执行顺序为从基本块的入口语句开始,依次执行基本块中的每一条语句,直到执行至基本块中的出口语句结束。流图是一种有向图,在流图中,流图以基本块为结点,流图的有向边可表示基本块间的执行顺序。如果在某个执行顺序中,基本块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语句。基本块中,第一列数字表示一条语句被其他语句引用的次数,如语句A对应的数字为1,表示语句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)声明语句
声明语句,可用于为变量、常量或过程命名等。例如,a=1,可表示一条声明语句,用于为变量a赋值为1。
本申请实施例涉及的声明语句包括选择函数语句,又可称为Phi函数语句。
Phi函数语句可用于在程序执行过程中,根据程序的执行方向,给被选择函数语句引用的语句赋值。示例性的,假设一段代码为“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。
(2)可执行语句
可执行语句,可用于调用方法或调用函数等。例如,用于调用方法的可执行语句可通过调用(invoke)指令实现。示例性的,调用(invoke)指令可用于调用方法。invoke指令可分为invokeinterface、invokevirtual、invokestatic、invokespecial等类型。其中,invokeinterface指令用于调用接口方法;invokevirtual指令用于调用对象的实例方法;invokestatic指令用于用以调用类方法;invokespecial指令用于调用一些需要特殊处理的实例方法。
本申请实施例涉及的可执行语句包括日志打印语句,以及跳转(goto)指令和条件语句(if语句)中的一种或多种。
A)日志打印语句可通过invokestatic指令实现,用于调用日志打印方法,从而打印指定的日志。
B)goto语句的本质是无条件跳转指令,可以在中间代码中的任意位置实现跳转。例如,goto By可表示跳转执行基本块By
C)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。
5、插桩
插桩,是指在是原有代码的逻辑完整性的基础上,由编译器或开发人员在原有代码中选定插桩位置,并在插桩位置插入自定义代码,或替换原有代码中的部分代码的技术。其中,原有代码可以是源代码、目标代码或中间代码。通过插桩,可以获取原有代码中的信息,例如函数的调用信息、函数的返回值等。插桩技术可应用于测试程序性能、检测错误、获取程序执行信息等领域。
示例性的,可对如图1中的(a)所示的基本块Bx进行插桩,插桩内容可以是goto语句,如goto By,插桩位置可以是语句23之前。插桩后的基本块Bx可如图1中的(b)所示,其中,插入的goto语句的索引(如v210)可由编译器自动生成,其中,v表示goto语句的数据类型为无类型(void)。完成插桩后,当执行完Bx中的goto语句后,将跳转执行By,从而不会执行位于Bx中goto语句之后的语句,如语句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的日志。
日志打印可发生在系统运行中的多个环节,例如,可在程序入口处、程序运行产生异常状况时。然而,过多地打印日志会造成较大的输入/输出(input/output,IO)操作开销,降低系统运行效率和性能。
本申请实施例提供一种插桩位置确定方法,可确定准确的插桩位置,有利于通过在插桩位置进行插桩,实现相应的功能。例如,该插桩位置确定方法可应用于日志打印管理,从而可管理日志的打印量,降低日志打印对系统运行效率的影响。插桩位置确定方法可应用于任何编译场景,例如,可应用于电子设备出厂前的开发阶段的编译场景,电子设备出厂后首次开机时的编译场景,以及电子设备安装新的应用程序时的编译场景等,本申请对此不作限定。
下面,结合图3对本申请实施例提供的插桩位置确定方法的具体流程进行详细说明。
示例性的,假设中间代码中的第一个基本块包括用于调用日志打印方法的日志打印语句为例,如图3所示,电子设备中的编译器进行插桩位置确定的流程可包括但不限于以下步骤:
S301,读取第一个基本块中的第j条语句。
其中,第一个基本块是指在中间代码被划分成的至少一个基本块中,排列在第一个的基本块。第j条语句,指在读取第一个基本块中的语句过程中,当前读取的语句。第j条语句可以是第一个基本块中的任意一条语句,j为大于或等于1,且小于或等于N的整数。如图4中(a)所示,用Bx表示第一个基本块,Bx中可包括语句17至语句25等多条语句。
S302,若第j条语句为日志打印语句,则执行S303;若第j条语句不是日志打印语句,则执行S321。
其中,如图4中(a)所示,若第j条语句为语句24,可判断语句24是否为日志打印语句。语句24表示为InvokeStatic.android.util.Log.e[l4,l21]。其中,InvokeStatic表示语句24为invoke指令,android.util.Log.e表示语句24可调用日志工具类Log(android.util.Log)中的日志打印方法Log.e,用于打印日志等级为error的日志。因此,当第j条语句为语句24时,第j条语句为日志打印语句,此时,暂停读取第一个基本块中的其他语句,并执行S303。其中,第一个基本块中的各条语句的名称仅用于举例,本申请对各条语句的名称等具体形式不作限定。
需要说明的是,本申请实施例中的读取语句是指编译器对基本块中的语句进行读取操作,区别于对基本块中的语句进行执行操作。在读取语句的过程中,编译器无法对中间代码进行编译等操作,例如,不会执行调用指令,即不会打印日志。当程序执行时,才会依次执行每一条语句。
S303,调用处理函数,处理第j条语句。
其中,第j条语句可以不引用其他语句,也可以引用一条或多条语句。处理函数可用于确定第j条语句是否引用其他语句,并且判断被第j条语句引用的其他语句是否满足处理条件,以及将满足处理条件的语句添加至队列和映射表中。可采用第一语句表示被第j条语句引用且满足处理条件的语句。其中,处理条件是指,被引用的语句与第j条语句位于同一个基本块,且仅被第j条语句引用,以及被引用的语句不是Phi函数语句。被第j条语句引用的其他语句中,可以不存在满足处理条件的语句,也可存在一条或多条满足处理条件的语句。换言之,第一语句的数量可以为0,也可以为大于或等于1的整数。其中,处理函数可由开发人员进行编写和修改。
其中,队列(queue)可用于存储满足处理条件的语句。队列中的语句是需要通过处理函数进行进一步处理的语句。队列具有先进先出的特性,只能在队列的前端进行删除,在队列的后端进行插入。
映射表可以是map,map是一种以键值对(key-value)形式进行存储的存储方式。在map中,每一个键(key)映射一个值(value),因此在映射表中可保存满足处理条件的语句和该语句的索引,以及语句与语句的索引之间的映射关系。在后续的流程中,可通过映射表中存储的语句索引确定插桩位置。
示例性的,假设添加至映射表的语句包括语句21、语句20和语句19,则映射表可由表1所示。如表1所示,每条语句的索引和该语句可构成一个键值对。表1中的第一列为键值对的序号;第二列为每个键值对的键,在本申请中,用于指示语句的索引;第三列为每个键值对的值,用于表示语句的具体内容,如E[l 20]。在表1中,根据索引可以找到该索引对应的语句,同理,也可根据任意语句找到该语句的索引。
表1map存储示意表
S304,若处理后可得到第一语句,则执行S305,否则执行S315。
示例性的,如图4中的(a)所示,第j条语句,即日志打印语句为语句24,表示为InvokeStatic.android.util.Log.e[l4,l21]。调用处理函数,可通过第j条语句中的[l4,l21],确定第j条语句引用语句4和语句21。进一步地,处理函数可判断被引用的语句是否满足处理条件,例如,依次判断语句4和语句21分别是否满足处理条件,并将满足处理条件的语句确定为第一语句。例如,假设如图4中(a)所示的各条语句均不是Phi函数语句。首先处理语句4,处理函数可在第一个基本块中查找语句4,从而确定语句4不存在于第一个基本块中,因此语句4不满足处理条件;接着处理语句21,处理函数可在第一个基本块中查找语句21,从而确定语句21与第j条语句位于同一个基本块中,即位于第一个基本块中,并且,语句21的被引用次数为1,表示语句21仅被第j条语句引用,因此,可确定语句21满足处理条件,即确定得到第一语句,为语句21。
示例性的,若第j条语句未引用其他语句,或被第j条语句引用的语句不满足处理条件,则可确定不能得到第一语句,需执行S315。
S305,将第一语句添加至队列和映射表。
在将第一语句添加至队列和映射表前,队列和映射表均为空。示例性的,如图4中(a)所示,第j条语句为语句24,在执行S303后,队列和映射表中包括第一语句,即语句21。
需要说明的是,队列是指第j条语句对应的队列,映射表是指第j条语句对应的映射表,第j条语句对应的队列和映射表中,均不包括处理第j条语句以外的其他日志打印语句得到的语句。为简洁描述,在如图3所示的流程中,第j条语句对应的队列简称为队列,第j条语句对应的映射表简称为映射表。
S306,取出队列中的第一语句,调用处理函数进行处理。
在执行S303后,此时队列包括第二语句。因此,应将队列中的第二语句取出,并进行处理。队列中的一条语句一旦取出,则将该条语句从队列中删除。因此,当队列中的所有语句均被取出时,队列为空。
可以理解的是,取出队列中的语句,并调用处理函数进行处理的过程,可以理解为递归搜索过程,即从队列中取出语句,通过处理函数,递归判断该语句引用的每一条语句是否满足处理条件。在该过程中,可将队列中保存的所有语句依次进行处理,直到队列为空。
S307,若得到第二语句,则执行S308,否则执行S313。
具体的,与步骤S303相似,通过处理函数,可确定第一语句是否引用其他语句,且可判断被第一语句引用的其他语句是否满足处理条件。若存在满足处理条件的被第一语句引用的其他语句,则可将该语句确定为第二语句。换言之,第二语句表示被第一语句引用,且满足处理条件的语句。
示例性的,如图4中(a)所示,第一语句为语句21,表示为E[l20]。通过处理函数可知,第一语句引用语句20。进一步地,处理函数可判断语句20是否满足处理条件。由于语句20与第一语句位于同一个基本块,且语句20仅被语句21引用,因此语句20满足处理条件,可将语句20确定为第二语句,并执行S308。
示例性的,若第一语句未引用其他语句,或者被第一语句引用的语句不满足处理条件,则可确定不能得到第二语句,则执行S315。
S308,将第二语句添加至队列和映射表。
将第二语句添加至队列和映射表后,队列包括第二语句,映射表包括第一语句和第二语句。示例性的,将语句20添加至队列和映射表后,队列中包括语句20,映射表中包括语句21和语句20。
S309,取出队列中的第二语句,调用处理函数进行处理。
执行S308后,队列中包括第二语句,可将第二语句从队列中取出,调用处理函数,对第二语句进行处理,即判断第二语句是否引用其他语句,且被引用的其他语句是否满足处理条件。可将被第二语句引用,且满足处理条件的语句称作第三语句。此时,已将第二语句从队列中删除,队列为空。
S310,若得到第三语句,则执行S311,否则执行S313。
示例性的,如图4中(a)所示,第二语句为语句20,处理函数可确定被语句20引用的语句为语句11和语句19,且语句19满足处理条件。因此,处理函数可确定语句19为第三语句,即在此种情况下,得到第四语句,需执行S311。
S311,将第三语句添加至队列和映射表。
将第三语句添加至队列和映射表后,队列包括第三语句,映射表包括第一语句、第二语句和第三语句。示例性的,将语句19添加至队列和映射表后,队列中包括语句19,映射表中包括语句21、语句20和语句19。
S312,取出队列中的第三语句,调用处理函数进行处理。
基于同一发明构思,处理第三语句的流程与S303、S306和S309中处理第j条语句、第一语句和第二语句的流程相同,此处不再赘述。
示例性的,当第三语句为语句19,则从队列中取出语句19进行处理,通过处理函数可知,语句19引用语句15,而语句15不满足处理条件,则不会对语句15执行如S305中的步骤,即不会将语句15添加至队列或映射表。此时,映射表中包括语句21、语句20和语句19,如上文表1所示。
S313,当队列为空,从映射表中确定值最小的语句标识。
示例性的,如图4中(a)所示,第三语句为语句19,因此在执行S308后,没有语句可添加至队列,此时,队列为空。映射表中包括第一语句(语句21)、第二语句(语句20)和第三语句(语句19)。因此,在映射表中的语句标识包括21、20和19,可见,其中值最小的语句标识为19。
在一种可能的实现方式中,若队列不为空,则可基于队列的先进先出原则,依次取出队列中的每一条语句,并调用处理函数,进行如S303至S305中,对第j条语句所做的处理,直到将队列中的所有语句处理完毕,使队列为空。
S314,更新插桩位置标识为值最小的语句标识。
其中,插桩位置标识,可用min_id表示,是指可在插桩位置标识所指示的位置前进行插桩。示例性的,当值最小的语句标识为19时,可令min_id=19,表示查找到的合适的插桩位置为语句19前。如图4中(a)所示,min_id=19所指示的位置为语句18和语句19之间的位置,即可将插桩内容插入语句18和语句19之间。
S315,更新插桩位置标识为第j条语句的语句标识。
在此种情况下,由于执行S304后,可确定第j条语句未引用其他语句,或者被第j条语句引用的语句不满足处理条件,则可将插桩位置标识更新为第j条语句的语句标识。示例性的,如图4中(a)所示,当读取到语句24时,由于语句24为日志打印语句,假设语句24未引用其他语句,则将插桩位置标识确定为日志打印语句的标识,即令min_id=24。此时,min_id=24表示可在语句24前、语句23后的位置进行插桩。
S316,基于插桩位置标识拆分第一个基本块,得到基本块1、基本块2和基本块3。
拆分第一个基本块的操作可称作基本块拆分。拆分后,基本块1包括第一个基本块中位于第j条语句之前,且未被添加至映射表的所有语句,基本块2包括第j条语句和映射表中的语句,基本块3包括第一个基本块中位于第j条语句之后的所有语句。
其中,若插桩位置标识为第j条语句的语句标识,映射表为空。因此,拆分后,基本块1包括第一个基本块中位于第j条语句之前的所有语句,基本块2包括第j条语句,基本块3包括第一个基本块中位于第j条语句之后的所有语句。
当j=1时,表示第一个基本块中的第一条语句即为日志打印语句,则基本块1为空,基本块3不为空。当j为大于1且小于N的整数时,基本块1不为空,且基本块3也不为空。当j=N时,表示第j条语句为第一个基本块中的最后一条语句,在此种情况下,基本块1不为空,但基本块3为空。
示例性的,当j=8,如图4中(b)所示,基本块1、基本块2和基本块3可分别表示为B1、B2和B3。min_id=19,表示将在语句19前的位置,即语句18与语句19之间进行插桩。在第一个基本块中,位于第j条语句之前的语句有语句17至语句23,映射表中包括语句19至语句21,因此,根据第j条语句和插桩位置标识,可将第一个基本块进行如下拆分:基本块1中包括语句17、语句18,以及语句22和语句23;基本块2中包括日志打印语句,以及语句19、语句20和语句21;基本块3中包括语句25。
需要说明的是,如图4中(b)所示,进行基本块拆分后,各个基本块中的每条语句的排列顺序仍按照与在第一个基本块中相同的顺序进行排列。
S317,构建基本块4,并在基本块4中插入goto语句。
其中,goto语句用于指示在执行完goto语句后,跳转执行基本块3。示例性的,如图5中(a)所示,基本块4可表示为B4。其中,goto语句可以表示为goto B3,表示在程序执行的过程中,当执行goto语句后,跳转执行基本块3。换言之,插入的goto语句可用于指示基本块4的后继节点为基本块3。其中,goto语句的索引与第一个基本块中的任何一条语句的索引均不相同,可由编译器自动生成,如v211;编译器可根据goto语句被引用的实际情况,确定goto语句被引用的次数。
S318,在基本块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。
需要说明的是,S317与S318之间的执行顺序可以是任意的。在执行S316后,例如,可以先执行S317再执行S318,或者先执行S317再执行S318,又或者S317和S318可以同时执行。本申请对此不作限定。
S319,在基本块1中插入if语句,得到新基本块1。
具体的,可在基本块1中插桩位置标识所指示的位置插入if语句。if语句用于在程序执行的过程中,根据日志打印语句中日志的日志等级,确定在执行完新基本块1后,跳转执行新基本块2或跳转执行基本块4。
示例性的,如图5中的(a)所示,if语句可表示为If(level(Log.e)<Control_level)。if语句的索引均与第一个基本块中的任何一条语句不相同,可由编译器自动生成,如v209;if语句未被其他语句引用,因此索引前的数字为0。level(Log.e)<Control_level表示if语句中的判定条件。其中,if语句中的level(Log.e)表示根据第j条语句,即日志打印语句的名称,确定日志的日志等级为error等级;Control_level指预设的打印等级,例如,预设打印等级可由编译器默认设置为error等级,也可由开发人员进行设置。在程序执行的过程中,当if语句的值为真(true,可设置为1),即日志等级小于预设打印等级时,if语句指示执行基本块4,表示不执行日志打印语句;当if语句的值为假(false,可设置为0),即日志等级大于或等于预设打印等级时,if语句指示执行新基本块2,表示执行日志打印语句。换言之,插入if语句后,可指示新基本块1的后继节点为新基本块2和基本块4。
基于此,在程序执行时,若日志打印语句所指示的日志的日志等级小于预设打印等级时,编译器可自动选择不执行新基本块2,而选择执行基本块4。这样,可不执行日志打印语句,以及被日志打印语句引用且满足处理条件的语句,从而减少程序执行的步骤。可见,在程序执行时,可自动判断根据日志等级决定是否打印日志,从而可以实现不打印日志等级低的日志,减少日志打印量。
S320,建立新基本块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,在此过程中,已执行日志打印语句,即打印了日志。
S321,令j=j+1,用于指示将第j条语句更新为第j+1条语句。
其中,若第j条语句不是日志打印语句,则可通过令j=j+1后,再执行S301,从而可读取第j条语句的下一条语句。在该读取过程中,可实现依次读取第一个基本块中的每一条语句。基于相同的发明构思,基于第j+1条语句拆分第一个基本块的具体实现可参阅上述S302至S320中的步骤。
示例性的,如图4中(a)所示,当j=1,表示读取第一个基本块中的第一条语句,即读取语句17。通过执行S302可知,语句17不是日志打印语句,于是令j=j+1,即此时j=2。当j=2时,再次执行S301,即读取语句18。同理可知,当j为3至7时,语句18至语句23都不是日志打印语句。此时,又令j=j+1,则j=8。进一步地,执行S301,此时j=8表示读取第一个基本块中的第八条语句,即读取语句24。基于此,可对语句24执行如S302至S320所示的步骤。
可见,本申请实施例可通过处理函数,准确地确定出目标基本块对应的插桩位置标识,并基于目标基本块对应的插桩位置标识,将日志打印语句以及满足处理条件的语句拆分至单独的基本块中,以及对拆分后得到的各个基本块进行插桩操作,如插入if语句和goto语句。如此,在日志等级低于日志打印等级的情况下,不执行日志打印语句以及被满足处理条件的语句,可降低日志打印量,从而可减少日志打印引起的IO操作开销,提高系统的运行效率。
在执行如图3所示方法后,可继续读取第一个基本块中的其他语句。此时,如图4中(a)所示,当读取完第j条语句(如语句24后),应读取第j+1条语句。按照第一个基本块Bx中的顺序,应读取语句25,由于已将Bx进行基本块拆分,得到基本块1、基本块2和基本块3,而语句25在基本块3中,因此,应从基本块3中的第一条语句开始读取,即读取语句25。若语句25为日志打印语句,则可根据如图3所示的方法,对基本块3进行基本块拆分、插桩等操作。若语句25不是日志打印语句,则可继续读取语句25后的语句。由于语句25是第一个基本块中的出口语句,于是读取完语句25后,应读取第二个基本块中的语句。读取第二个基本块的流程与图3所示的流程一致,此处不再赘述。基于如图3所示的流程,可将中间代码划分成的所有基本块依次进行基本块拆分和插桩等操作,从而可实现对中间代码中的所有日志打印语句的管理。
示例性的,假设中间代码被划分为了两个基本块,分别为第一个基本块Bx和第二个基本块By。第一个基本块为如图4中(a)所示的Bx,第二个基本块By在进行如图3所示的基本块拆分等操作后,得到的基本块分别为By1、By2、By3和By4。如图6所示,第一个基本块Bx,第二个基本块为By之间的连接关系可如图6所示。
请参阅图7,为本申请实施例提供的另一种插桩位置确定方法的流程示意图。该方法可由编译器执行,或电子设备中的编译器执行,还可以由具备编译器功能的处理器、芯片或芯片系统等执行。如图7所示,该插桩位置确定方法可包括但不限于以下步骤:
S701,响应于目标基本块中的第j条语句为日志打印语句,调用处理函数,从第j条语句引用的至少一条语句中确定出满足处理条件的第一语句。
其中,j为大于1的整数。目标基本块为中间代码划分的至少一个基本块中的任意一个。示例性的,目标基本块可以是如图3所示的第一个基本块,第j条语句可以是如图3所示的第j条语句,处理函数可以是如图3中S303所示的处理函数,以及处理条件可以是S303中的处理条件,第一语句可以是S304中的第一语句。
基于相同的发明构思,S701的具体实现过程可参阅图3所示的S301至S304,此处不再赘述。
在一种可能的实现方式中,可通过读取第j条语句的语句内容来判断第j条语句是否为日志打印语句。例如,若第j条语句的语句内容包括调用日志打印方法,则可确定第j条语句为日志打印语句。
在一种可能的实现方式中,当j=1时,表示目标基本块中的第一条语句即为日志打印语句,则第j条语句不需要通过处理函数进行处理,可直接将目标基本块对应的插桩位置标识确定为第j条语句的语句标识。
S702,将第一语句和第一语句的语句标识添加至第一映射表,并将第一语句添加至第一队列。
其中,第一映射表用于确定目标基本块对应的插桩位置标识,第一队列用于存储满足处理条件的语句。示例性的,目标基本块对应的插桩位置标识可以是如图3所示的S314中的插桩位置标识,第一映射表可以是如图3中S305所示的映射表,第一队列可以是S305中的映射表。示例性的,第一映射表的结构可如表1所示。
基于同一发明构思,S702的具体实现过程可参阅如图3所示的S305,此处不再赘述。
需要说明的是,处理函数可将第一语句和第一语句的标识添加至第一映射表,并将第一语句添加至第一队列,S701和S702可以是同时执行的。可选的,也可先执行S701,在执行S702,本申请对此不作限定。
S703,从第一队列中取出第一语句,调用处理函数,从第一语句引用的至少一条语句中确定出满足处理条件的第二语句。
其中,第二语句可以是图3所示的S310中的第三语句。基于同一发明构思,S703的具体实现过程可参阅图3所示的S306和S307,此处不再赘述。
S704,将第二语句和第二语句的语句标识添加至第一映射表,并将第二语句添加至第一队列。
基于同一发明构思,S704的具体实现过程可参阅如图3所示的S308,此处不再赘述。
需要说明的是,S703和S704可以是同时执行的。可选的,也可先执行S703,在执行S704,本申请对此不作限定。
S705,从第一队列中取出第二语句,调用处理函数,确定出第二语句未引用其他语句,或确定出第二语句引用的语句不满足处理条件。
其中,第二语句可以是如图3所示的S312中的第三语句。例如,当第二语句未引用其他语句,或第二语句引用的语句不满足处理条件时,第一队列中的语句已全部处理完毕,即第一队列中为空。此时,第一映射表中包括第一语句和第二语句。
S706,基于第一映射表中的第一语句的语句标识和第二语句的语句标识,确定目标基本块对应的插桩位置标识。
其中,若第一语句的语句标识小于或等于所第二语句的语句标识,则确定目标基本块对应的插桩位置标识为第一语句的语句标识;若第一语句的语句标识大于第二语句的语句标识,则确定目标基本块对应的插桩位置标识为第二语句的语句标识。
示例性的,假设第一语句的语句标识为15,第二语句的语句标识为16,则可确定目标基本块对应的插桩位置标识为第一语句的语句标识,即15。
S707,基于目标基本块对应的插桩位置标识,拆分目标基本块,得到第一基本块、第二基本块和第三基本块。
拆分目标基本块后,第一基本块包括目标基本块中的第1条语句至第j-1条语句,第二基本块包括第j条语句,第三基本块包括目标基本块中的第j+1条语句至最后一条语句。其中,第一基本块、第二基本块以及第三基本块分别可以是如图3所示的S316中的基本块1、基本块2和基本块3。
基于同一发明构思,S707的具体实现过程可参阅图3所示的S316,此处不再赘述。
在一种可能的实现方式中,当j=1时,表示目标基本块中的第一条语句即为日志打印语句,则第一基本块为空,第三基本块不为空。当j为大于1且小于N的整数时,第一基本块不为空,且第三基本块也不为空。当j=N时,表示第j条语句为目标基本块中的最后一条语句,在此种情况下,第一基本块不为空,但第三基本块为空。
S708,构建包括第一跳转语句的第四基本块,在第二基本块中插入第一跳转语句,得到第五基本块。
第一跳转语句用于指示在执行完第一跳转语句后跳转执行第三基本块。其中,第一跳转语句可以是如图3所示的S317中的goto语句,第四基本块可以是S317中的基本块4。
基于同一发明构思,S708的具体实现过程可参阅如图3所示的S317和S318,此处不再赘述。
S709,在第一基本块中的第一目标语句之后插入第一条件语句,得到第六基本块。
其中,第一条件语句可以是如图3中S319中的if语句,第六基本块可以是S319中的新基本块1。第一目标语句的语句标识比目标基本块对应的插桩位置标识小1。例如,如图4中(a)所示,当目标基本块对应的插桩位置标识为19,则第一目标语句为如图4中(a)所示的语句18。在此种情况下,如图5中的(a)所示,第一条件语句插入的位置为第一基本块中的第一目标语句,即语句18之后。
基于同一发明构思,S709的具体实现过程可参阅如图3所示的S319,此处不再赘述。
在一种可能的实现方式中,当j=1时,表示目标基本块中的第一条语句即为日志打印语句,则第j条语句不需要通过处理函数进行处理,可直接将目标基本块对应的插桩位置标识确定为第j条语句的语句标识。在此种情况下,第一基本块中不存在第一目标语句,可直接将第一条件语句插入第一基本块,使得第一条件语句成为第六基本块中的第一条语句。
S710,确定第六基本块、第五基本块以及第三基本块之间的执行顺序。
其中,当第一条件语句确定第j条语句满足处理条件时,第一条件语句用于指示在执行完第六基本块后,跳转执行第五基本块。基于此,第六基本块、第五基本块以及第三基本块之间的执行顺序可以是:第六基本块的后继节点为第五基本块,第五基本块的后继节点为第三基本块。换言之,在执行完第六基本块后,执行第五基本块;执行完第五基本块后,在执行第三基本块。在此种情况下,说明当第j条语句满足打印条件时,可执行包括第j条语句的第五基本块,从而可以打印日志。
S711,确定第六基本块、第四基本块以及第三基本块之间的执行顺序。
其中,当第一条件语句确定第j条语句不满足处理条件时,第一条件语句用于指示在执行完第六基本块后,跳转执行第四基本块。基于此,第六基本块、第四基本块以及第三基本块之间的执行顺序可以是:第六基本块的后继节点为第四基本块,第四基本块的后继节点为第三基本块。换言之,在执行完第六基本块后,执行第四基本块;执行完第四基本块后,在执行第三基本块。在此种情况下,说明当第j条语句满足打印条件时,可执行不包括第j条语句的第四基本块,从而可以不执行第j条语句,不打印日志。因此,可以减少日志的打印数量,在一定程度上降低系统的功耗。
可选的,如图3中的S320所示的原理,S710和S711可用于建立第三基本块、第四基本块、第五基本块和第六基本块之间的连接关系。具体的,建立的连接关系可以是:第六基本块的第一个后继节点为第五基本块,第二个后继节点为第四基本块,第四基本块和第五基本块的后继节点均为第三基本块。
在一种可能的实现方式中,若第三基本块中的第i条语句也是日志打印语句,则可基于相同的方法,处理第i条语句。示例性的,该过程可包括:调用处理函数,从第i条语句引用的至少一条语句中确定出满足处理条件的第三语句,将第三语句添加至第二映射表,并将第三语句添加至第二队列;其中,第二映射表用于确定第三基本块对应的插桩位置标识,第二队列用于存储满足处理条件的语句;从第二队列中取出第三语句,调用处理函数,从第三语句引用的至少一条语句中确定出满足处理条件的第四语句,将第四语句添加至第二映射表,并将第四语句添加至第二队列;从第二队列中取出第四语句,调用处理函数,确定出第四语句未引用其他语句,或确定出第四语句引用的语句不满足处理条件;基于第二映射表中的第三语句的语句标识和第四语句的语句标识,确定第三基本块对应的插桩位置标识。
在一种可能的实现方式中,确定出第三基本块对应的插桩位置标识后,该方法还可包括:基于第三基本块对应的插桩位置标识,拆分第三基本块,得到第七基本块、第八基本块和第九基本块;其中,第七基本块包括第三基本块中的第1条语句至第i-1条语句中未被添加至第二映射表的语句;第八基本块包括第i条语句和第二映射表中的语句;第九基本块包括第三基本块中第i+1条语句至最后一条语句。
在一种可能的实现方式中,还可构建包括第二跳转语句的第十基本块,并在第八基本块中插入第二跳转语句,得到第十一基本块;第二跳转语句用于指示在执行完跳转语句后跳转执行第九基本块;在第七基本块中的第二目标语句之前,插入第二条件语句,得到第十二基本块;其中,条件语句用于指示在执行完第十二基本块后跳转执行第十基本块或第十二基本块;第二目标语句的语句标识比第三基本块对应的插桩位置标识小1。
基于此,可基于第三基本块中的第i条语句,确定出准确性高的第三基本块对应的插桩位置标识。基于第三基本块对应的插桩位置标识,可管理第三基本块中的第i条语句,在第i条语句不满足打印条件时,可以不执行第i条语句,从而不打印日志,减少日志的打印数量,降低系统的功耗。
下面对电子设备100的结构进行介绍。请参阅图8,图8是本申请实施例提供的电子设备100的结构示意图。应该理解的是,电子设备100可以具有比图8中所示的更多的或者更少的部件,可以组合两个或多个的部件,或者可以具有不同的部件配置。图8中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。
电子设备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可以包括比图8所示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图8所示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器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的用户设置以及功能控制有关的键信号输入。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可能可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以为个人计算机、服务端或者网络设备等,具体可以是计算机设备中的处理器)执行本申请各个实施例上述方法的全部或部分步骤。其中,而前述的存储介质可包括:U盘、移动硬盘、磁碟、光盘、只读存储器(read-only memory,ROM)或者随机存取存储器(randomaccess memory,RAM)等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

Claims (12)

1.一种插桩位置确定方法,其特征在于,所述方法包括:
响应于目标基本块中的第j条语句为日志打印语句,调用处理函数,从所述第j条语句引用的至少一条语句中确定出满足处理条件的第一语句,将所述第一语句和所述第一语句的语句标识添加至第一映射表,并将所述第一语句添加至第一队列;其中,所述第一映射表用于确定所述目标基本块对应的插桩位置标识,所述第一队列用于存储满足所述处理条件的语句;j为大于1的整数;所述目标基本块为中间代码划分的至少一个基本块中的任意一个;所述满足处理条件的第一语句与所述第j条语句位于同一个基本块,且仅被所述第j条语句引用,以及不是Phi函数语句;
从所述第一队列中取出所述第一语句,调用所述处理函数,从所述第一语句引用的至少一条语句中确定出满足所述处理条件的第二语句,将所述第二语句和所述第二语句的语句标识添加至所述第一映射表,并将所述第二语句添加至所述第一队列;所述满足处理条件的第二语句与所述第j条语句位于同一个基本块,且仅被所述第一语句引用,以及不是所述Phi函数语句;
从所述第一队列中取出所述第二语句,调用所述处理函数,确定出所述第二语句未引用其他语句,或确定出所述第二语句引用的语句不满足所述处理条件;
响应于所述第一语句的语句标识小于或等于所述第二语句的语句标识,确定所述目标基本块对应的插桩位置标识为所述第一语句的语句标识;
响应于所述第一语句的语句标识大于所述第二语句的语句标识,确定所述目标基本块对应的插桩位置标识为所述第二语句的语句标识。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
基于所述目标基本块对应的插桩位置标识,拆分所述目标基本块,得到第一基本块、第二基本块和第三基本块;其中,所述第一基本块包括所述目标基本块中的第1条语句至第j-1条语句中未被添加至所述第一映射表的语句;所述第二基本块包括所述第j条语句和所述第一映射表中的语句;所述第三基本块包括所述目标基本块中第j+1条语句至最后一条语句。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
构建包括第一跳转语句的第四基本块,并在所述第二基本块中插入所述第一跳转语句,得到第五基本块;所述第一跳转语句用于指示在执行完所述跳转语句后跳转执行所述第三基本块;
在所述第一基本块中的第一目标语句之后插入第一条件语句,得到第六基本块;其中,所述第一条件语句用于指示在执行完所述第六基本块后跳转执行所述第四基本块或所述第五基本块;所述第一目标语句的语句标识比所述目标基本块对应的插桩位置标识小1。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
响应于所述第j条语句满足打印条件,确定所述第一条件语句用于指示在执行完所述第六基本块后,跳转执行所述第五基本块;
确定所述第六基本块的后继节点为所述第五基本块,所述第五基本块的后继节点为所述第三基本块。
5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
响应于所述第j条语句不满足打印条件,确定所述第一条件语句用于指示在执行完所述第六基本块后,跳转执行所述第四基本块;
确定所述第六基本块的后继节点为所述第四基本块,所述第四基本块的后继节点为所述第三基本块。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述方法还包括:
读取所述第j条语句的语句内容;
响应于所述语句内容包括调用日志打印方法,则确定所述第j条语句为所述日志打印语句。
7.根据权利要求2所述的方法,其特征在于,所述方法还包括:
响应于所述第三基本块中的第i条语句为所述日志打印语句,调用所述处理函数,从所述第i条语句引用的至少一条语句中确定出满足处理条件的第三语句,将所述第三语句添加至第二映射表,并将所述第三语句添加至第二队列;其中,所述第二映射表用于确定所述第三基本块对应的插桩位置标识,所述第二队列用于存储满足所述处理条件的语句;
从所述第二队列中取出所述第三语句,调用所述处理函数,从所述第三语句引用的至少一条语句中确定出满足所述处理条件的第四语句,将所述第四语句添加至第二映射表,并将所述第四语句添加至第二队列;
从所述第二队列中取出所述第四语句,调用所述处理函数,确定出所述第四语句未引用其他语句,或确定出所述第四语句引用的语句不满足所述处理条件;
基于所述第二映射表中的所述第三语句的语句标识和所述第四语句的语句标识,确定所述第三基本块对应的插桩位置标识。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
基于所述第三基本块对应的插桩位置标识,拆分所述第三基本块,得到第七基本块、第八基本块和第九基本块;其中,所述第七基本块包括所述第三基本块中的第1条语句至第i-1条语句中未被添加至所述第二映射表的语句;所述第八基本块包括所述第i条语句和所述第二映射表中的语句;所述第九基本块包括所述第三基本块中第i+1条语句至最后一条语句。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
构建包括第二跳转语句的第十基本块,并在所述第八基本块中插入所述第二跳转语句,得到第十一基本块;所述第二跳转语句用于指示在执行完所述跳转语句后跳转执行所述第三基本块;
在所述第七基本块中的第二目标语句之前,插入第二条件语句,得到第十二基本块;其中,所述条件语句用于指示在执行完所述第十二基本块后跳转执行所述第十基本块或所述第十二基本块;所述第二目标语句的语句标识比所述第三基本块对应的插桩位置标识小1。
10.一种电子设备,其特征在于,包括:存储器、处理器;其中:
所述存储器,用于存储计算机程序,所述计算机程序包括程序指令;
所述处理器用于调用所述程序指令,使得所述电子设备执行如权利要求1-9任意一项所述的方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程
序,该计算机程序被处理器执行时,实现如权利要求1-9任意一项所述的方法。
12.一种包含指令的计算机程序产品,其特征在于,当所述计算机程序产品在电子设备
上运行时,使得所述电子设备执行如权利要求1-9中任意一项所述的方法。
CN202310742521.3A 2023-06-21 2023-06-21 插桩位置确定方法及电子设备 Active CN116483736B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310742521.3A CN116483736B (zh) 2023-06-21 2023-06-21 插桩位置确定方法及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310742521.3A CN116483736B (zh) 2023-06-21 2023-06-21 插桩位置确定方法及电子设备

Publications (2)

Publication Number Publication Date
CN116483736A CN116483736A (zh) 2023-07-25
CN116483736B true CN116483736B (zh) 2024-03-12

Family

ID=87212295

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310742521.3A Active CN116483736B (zh) 2023-06-21 2023-06-21 插桩位置确定方法及电子设备

Country Status (1)

Country Link
CN (1) CN116483736B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102521123A (zh) * 2011-11-24 2012-06-27 西安邮电学院 一种基于逻辑执行块的嵌入式软件测试插桩方法
CN109460365A (zh) * 2018-11-16 2019-03-12 苏州好玩友网络科技有限公司 一种系统性能测试方法、装置、设备及存储介质
WO2021244088A1 (zh) * 2020-06-04 2021-12-09 中兴通讯股份有限公司 程序控制方法、装置、计算机设备及存储介质
CN113946516A (zh) * 2021-10-20 2022-01-18 腾讯科技(深圳)有限公司 代码覆盖率确定方法、装置及存储介质
CN114490353A (zh) * 2022-01-06 2022-05-13 清华大学 数据库管理系统模糊测试方法、装置及电子设备

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060200806A1 (en) * 2005-03-07 2006-09-07 Tasinga Khan M Apparatus, system, and method for trace insertion

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102521123A (zh) * 2011-11-24 2012-06-27 西安邮电学院 一种基于逻辑执行块的嵌入式软件测试插桩方法
CN109460365A (zh) * 2018-11-16 2019-03-12 苏州好玩友网络科技有限公司 一种系统性能测试方法、装置、设备及存储介质
WO2021244088A1 (zh) * 2020-06-04 2021-12-09 中兴通讯股份有限公司 程序控制方法、装置、计算机设备及存储介质
CN113946516A (zh) * 2021-10-20 2022-01-18 腾讯科技(深圳)有限公司 代码覆盖率确定方法、装置及存储介质
CN114490353A (zh) * 2022-01-06 2022-05-13 清华大学 数据库管理系统模糊测试方法、装置及电子设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
面向程序分析的插桩技术研究;王克朝;成坚;王甜甜;任向民;;计算机应用研究;32(02);第479-484页 *

Also Published As

Publication number Publication date
CN116483736A (zh) 2023-07-25

Similar Documents

Publication Publication Date Title
US7013458B2 (en) Method and apparatus for associating metadata attributes with program elements
US20040261065A1 (en) Method and system for compiling multiple languages
US7299462B2 (en) Relocation format for linking
CN110990019B (zh) 一种Java类分析方法、装置、存储介质及电子设备
CN113296786B (zh) 数据处理方法、装置、电子设备及存储介质
JP2007286671A (ja) ソフトウェア/ハードウェア分割プログラム、および分割方法。
KR20170014613A (ko) 전자 장치, 컴파일링 방법 및 컴퓨터 판독가능 기록매체
WO2019227899A1 (zh) 程序调用解耦
CN116483736B (zh) 插桩位置确定方法及电子设备
KR20220016704A (ko) 어플리케이션 설치 방법 및 이를 지원하는 전자 장치
CN112650540B (zh) 一种启动快应用的方法及相关装置
CN116483289B (zh) 基本块管理方法及电子设备
CN112148303B (zh) 文件生成方法、装置、终端及存储介质
CN113961238A (zh) 对象转换方法、装置及电子设备和存储介质
CN111796832B (zh) 热补丁文件生成方法、装置、设备及存储介质
CN111767033A (zh) 用于机械臂程序开发的编程系统及功能扩展方法
CN113031952A (zh) 深度学习模型的执行代码的确定方法、装置及存储介质
JP2007193435A (ja) 情報処理端末、プログラム
CN114997140B (zh) 校验语义的方法和装置
US11226888B1 (en) Systems and methods for function argument checking
CN112631657B (zh) 用于字符串处理的字节比较方法以及指令处理装置
CN117707918A (zh) 一种并发缺陷检测方法、测试设备和存储介质
KR102600283B1 (ko) 전자 장치 및 이를 이용한 명령어 처리 방법
CN117632131A (zh) 组件编译方法、装置、设备及介质
CN117668846A (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