CN112527660A - 代码的静态检测方法和装置 - Google Patents
代码的静态检测方法和装置 Download PDFInfo
- Publication number
- CN112527660A CN112527660A CN202011496871.9A CN202011496871A CN112527660A CN 112527660 A CN112527660 A CN 112527660A CN 202011496871 A CN202011496871 A CN 202011496871A CN 112527660 A CN112527660 A CN 112527660A
- Authority
- CN
- China
- Prior art keywords
- new
- prototype
- declaration
- function
- same
- 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
Images
Classifications
-
- 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/3604—Software analysis for verifying properties of programs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请实施例提供了一种代码的静态检测方法和装置,在对软件系统中的至少两个工程对应的代码进行编译时,若检测到新的对象,新的对象为新的外部声明和/或新的原型声明,则在数据库中检索是否存在与新的全局变量的变量名相同的原型声明,和/或,是否存在与新的函数的函数名相同的原型声明时,若存在与新的全局变量的变量名相同的原型声明,和/或,与新的函数的函数名相同的原型声明,则输出与新的全局变量的变量名相同的原型声明,和/或,与新的函数的函数名相同的原型声明,这样可以有效地检测出具有相同的函数名或者全局变量的对象,从而解决了因软件系统中包括两个相同函数名或者全局变量的对象导致程序出现运行错误的问题。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种代码的静态检测方法和装置。
背景技术
对于一个大型的软件产品而言,其包含至少两个以上的工程。其中,每一个工程均可以根据实际需求定义所需的函数或者全局变量,这样可能存在两个工程具有相同的函数名或者全局变量。
例如,工程A定义了一个函数,工程B引用工程A定义的函数,该种情况可以认为工程A和工程B具有相同的函数名;但在该种情况下,若工程A后续又修改了函数的函数类型或者返回类型,则会导致工程B的程序运行出现错误;或者,工程A定义了一个函数,工程B也定义了一个具有相同函数名的函数,但函数类型与工程A定义的函数类型不同,该种情况也可以认为工程A和工程B具有相同的函数名;在该种情况下,若工程C引用了该函数,但由于工程A和工程B均定义有该函数,则同样会导致工程C的程序运行出现错误。
因此,如何有效地检测出具有相同的函数名或者全局变量的对象,以解决因软件系统中包括两个相同函数名或者全局变量的对象导致程序出现运行错误的问题,是本领域技术人员亟待解决的问题。
发明内容
本发明实施例提供了一种代码的静态检测方法和装置,可以有效地检测出具有相同的函数名或者全局变量的对象,从而解决了因软件系统中包括两个相同函数名或者全局变量的对象导致程序出现运行错误的问题。
第一方面,本申请实施例提供了一种代码的静态检测方法,该代码的静态检测方法可以包括:
在对软件系统中的至少两个工程对应的代码进行编译时,检测是否存在新的对象;其中,所述新的对象为新的外部声明和/或新的原型声明,所述声明包括全局变量和/或函数。
若存在所述新的对象,则在数据库中检索是否存在与新的全局变量的变量名相同的原型声明,和/或,与新的函数的函数名相同的原型声明,所述数据库中存储有所述至少两个工程对应的已编译代码中的原型声明。
若存在,则输出与所述新的全局变量的变量名相同的原型声明和/或与所述新的函数的函数名相同的原型声明。
在一种可能的实现方式中,所述代码的静态检测方法还可以包括:
若所述数据库中不存在与所述新的全局变量的变量名相同的原型声明,则将所述新的全局变量存储在所述数据库中;和/或,
若所述数据库中不存在与所述新的函数的函数名相同的原型声明,则将所述新的函数存储在所述数据库中。
在一种可能的实现方式中,所述声明为全局变量,所述方法还包括:
判断所述新的全局变量的变量类型和所述数据库中与所述新的全局变量相同的原型声明的变量类型是否相同。
若变量类型相同,则输出第一提示信息,所述第一提示信息用于提醒用户已调用其他工程的全局变量。
若变量类型不同,则输出第二提示信息,所述第二提示信息用于提醒用户重新定义所述新的全局变量。
在一种可能的实现方式中,所述对象为函数,所述方法还包括:
判断所述新的函数的参数类型和返回类型,分别和所述数据库中与所述新的函数的函数名相同的原型声明的参数类型和返回类型是否相同。
若参数类型和返回类型均相同,则输出第三提示信息,所述第三提示信息用于提醒用户已调用其他工程的函数。
若参数类型和/或返回类型不同,则输出第四提示信息,所述第四提示信息用于提醒用户重新定义所述新的函数。
在一种可能的实现方式中,所述在对软件系统中的至少两个工程对应的代码进行编译时,检测是否存在新的对象,包括:
判断对所述至少两个工程对应的代码是否执行过编译操作。
若对所述至少两个工程对应的代码已执行过编译操作,则检测是否存在所述新的对象。
在一种可能的实现方式中,所述方法还包括:
若对所述至少两个工程对应的代码未执行过编译操作,则对所述至少两个工程对应的代码进行编译,并获取所述至少两个工程对应的代码中的原型声明。
将所述至少两个工程对应的代码中的原型声明存储在所述数据库中。
第二方面,本申请实施例还提供了一种代码的静态检测装置,该代码的静态检测装置可以包括:
处理单元,用于在对软件系统中的至少两个工程对应的代码进行编译时,检测是否存在新的对象;其中,所述新的对象为新的外部声明和/或新的原型声明,所述声明包括全局变量和/或函数。
所述处理单元,还用于若存在所述新的对象,则在数据库中检索是否存在与新的全局变量的变量名相同的原型声明,和/或,与新的函数的函数名相同的原型声明,所述数据库中存储有所述至少两个工程对应的已编译代码中的原型声明。
输出单元,用于若存在,则输出与所述新的全局变量的变量名相同的原型声明和/或与所述新的函数的函数名相同的原型声明。
在一种可能的实现方式中,所述装置还包括存储单元。
所述存储单元,用于若所述数据库中不存在与所述新的全局变量的变量名相同的原型声明,则将所述新的全局变量存储在所述数据库中;和/或,若所述数据库中不存在与所述新的函数的函数名相同的原型声明,则将所述新的函数存储在所述数据库中。
在一种可能的实现方式中,所述声明为全局变量,所述存储单元,还用于判断所述新的全局变量的变量类型和所述数据库中与所述新的全局变量相同的原型声明的变量类型是否相同。
所述输出单元,还用于若变量类型相同,则输出第一提示信息,所述第一提示信息用于提醒用户已调用其他工程的全局变量;若变量类型不同,则输出第二提示信息,所述第二提示信息用于提醒用户重新定义所述新的全局变量。
在一种可能的实现方式中,所述对象为函数;所述处理单元,还用于判断所述新的函数的参数类型和返回类型,分别和所述数据库中与所述新的函数的函数名相同的原型声明的参数类型和返回类型是否相同。
所述输出单元,还用于若参数类型和返回类型均相同,则输出第三提示信息,所述第三提示信息用于提醒用户已调用其他工程的函数;若参数类型和/或返回类型不同,则输出第四提示信息,所述第四提示信息用于提醒用户重新定义所述新的函数。
在一种可能的实现方式中,所述处理单元,具体用于判断对所述至少两个工程对应的代码是否执行过编译操作;若对所述至少两个工程对应的代码已执行过编译操作,则检测是否存在所述新的对象。
在一种可能的实现方式中,所述处理单元,还用于若对所述至少两个工程对应的代码未执行过编译操作,则对所述至少两个工程对应的代码进行编译,并获取所述至少两个工程对应的代码中的原型声明。
存储单元,还用于将所述至少两个工程对应的代码中的原型声明存储在所述数据库中。
第三方面,本申请实施例还提供了一种代码的静态检测装置,该代码的静态检测装置包括处理器和存储器;其中,
所述存储器,用于存储计算机程序;
所述处理器,用于读取所述存储器存储的计算机程序,并根据所述存储器中的计算机程序执行上述第一方面任一种可能的实现方式中所述的代码的静态检测方法。
第四方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现上述第一方面任一种可能的实现方式中所述的代码的静态检测方法。
第五方面,本申请实施例还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时,实现上述第一方面任一种可能的实现方式中所述的代码的静态检测方法。
可以看出,在本申请实施例中,在对软件系统中的至少两个工程对应的代码进行编译时,通过在数据库中存储有至少两个工程对应的已编译代码中的原型声明,使得在检测新的对象,新的对象为新的外部声明和/或新的原型声明,声明包括全局变量和/或函数时,可以在数据库中检索是否存在与新的全局变量的变量名相同的原型声明,和/或,在数据库中检索是否存在与新的函数的函数名相同的原型声明,若存在与新的全局变量的变量名相同的原型声明,和/或,存在与新的函数的函数名相同的原型声明,则输出与新的全局变量的变量名相同的原型声明,和/或,与新的函数的函数名相同的原型声明,这样可以有效地检测出具有相同的函数名或者全局变量的对象,从而解决了因软件系统中包括两个相同函数名或者全局变量的对象导致程序出现运行错误的问题。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
图1为本申请实施例提供的一种代码的静态检测方法的流程示意图;
图2为本申请实施例提供的另一种代码的静态检测方法的流程示意图;
图3为本申请实施例提供的又一种代码的静态检测方法的流程示意图;
图4为本申请实施例提供的一种代码的静态检测装置的结构示意图;
图5为本申请实施例提供的另一种代码的静态检测装置的结构示意图。
通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在本发明的实施例中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,其中A,B可以是单数或者复数。在本发明的文字描述中,字符“/”一般表示前后关联对象是一种“或”的关系。
本申请实施例提供的代码的静态检测方法可以应用于代码的静态检查场景。对于一个大型的软件产品而言,可能包含至少两个以上的工程。其中,每一个工程均可以根据实际需求定义所需的函数或者全局变量,这样可能存在两个工程具有相同的函数名或者全局变量。
其中,两个工程具有相同的函数名或者全局变量可以包括两种情况。一种情况为:工程A定义了一个函数,工程B引用工程A定义的函数,该种情况可以认为工程A和工程B具有相同的函数名。但在该种情况下,若工程A后续又修改了函数的函数类型或者返回类型,则会导致工程B的程序运行出现错误。例如,工程A初始定义的原型声明为uint32 test(),工程B引用了工程A中原型声明,其定义的外部声明为extern uint32 test(),随着工程A不断的推移,可能修改了工程A中的原型声明,将原型声明修改成了uint8 test(),但工程B并无法获知到工程A中原型声明发生了变化,会导致工程B定义的外部声明与工程B中实际定义的原型声明不一致,从而导致工程B的程序出现运行错误。
另一种情况为:工程A定义了一个函数,工程B也定义了一个具有相同函数名的函数,但函数类型与工程A定义的函数类型不同,该种情况也可以认为工程A和工程B具有相同的函数名;在该种情况下,若工程C引用了该函数,但由于工程A和工程B均定义有该函数,则同样会导致工程C的程序运行出现错误。例如,工程A定义了一个原型声明为uint32 test(),工程B定义了一个原型声明uint8 test(),若工程C引用该函数uint test()时,但由于工程A和工程B均定义了函数uint test(),因此,工程C在运行时,无法确定其引用的是工程A中定义的原型声明uint32 test(),还是工程B中定义的原型声明uint8 test(),则会导致工程C的程序运行出现错误。
因此,如何有效地检测是否存在相同的函数名或者全局变量,以解决因软件系统中包括两个相同函数名或者全局变量的对象导致程序出现运行错误的问题,是本领域技术人员亟待解决的问题。
为了有效地检测出具有相同的函数名或者全局变量的对象,从而解决了因软件系统中包括两个相同函数名或者全局变量的对象导致程序出现运行错误的问题,对于一个软件系统而言,可以在对其工程中的代码进行编译时,获取代码中的函数或者全局变量,并将该函数或者全局变量存储在数据库中,这样在检测到新的函数或者全局变量时,就可以将检测到的新的函数或者全局变量与数据库中存储的函数或者全局变量进行比较,从而判断软件系统中是否存在相同的函数名或者全局变量。
基于上述构思,本申请实施例提供了一种代码的静态检测方法,可参见图1所示,图1为本申请实施例提供的一种代码的静态检测方法的流程示意图,该代码的静态检测方法可以包括:
S101、在对软件系统中的至少两个工程对应的代码进行编译时,检测是否存在新的对象;其中,新的对象为新的外部声明和/或新的原型声明,声明包括全局变量和/或函数;S102、若存在新的对象,则在数据库中检索是否存在与新的全局变量的变量名相同的原型声明,和/或,与新的函数的函数名相同的原型声明,所述数据库中存储有所述至少两个工程对应的已编译代码中的原型声明;S103、若存在,则输出与所述新的全局变量的变量名相同的原型声明和/或与所述新的函数的函数名相同的原型声明。
其中,外部声明是指调用其他工程的原型声明的声明,原型声明是指自定义的新的声明。
结合前面描述的两个工程具有相同的函数名或者全局变量第一种情况,工程A定义了一个函数,工程B引用工程A定义的函数,若工程A修改了原型声明,会导致工程B定义的外部声明与工程B中实际定义的原型声明不一致,从而导致工程B的程序出现运行错误。
结合本申请实施例提供的代码的静态检测方法,当新的对象为新的外部声明时,通过在数据库中检索是否存在与新的外部声明的变量名和/或函数名相同的原型声明,若存在与新的外部声明的变量名和/或函数名相同的原型声明,则输出与新的外部声明的变量名和/或函数名相同的原型声明,这样可以有效地检测出软件系统中具有相同的函数名或者全局变量的新的外部声明和原型声明,从而解决了因外部声明与其引用的原型声明不一致,导致外部声明所属工程的代码出现运行错误的问题。
因此,当工程B定义的外部声明与工程B中实际定义的原型声明不一致,通过本申请实施例提供的技术方案,可以有效地检测出工程B定义的外部声明与工程B中实际定义的原型声明不一致,从而可以解决因工程B定义的外部声明与工程B中实际定义的原型声明不一致,导致工程B的程序出现运行错误的问题。
结合前面描述的两个工程具有相同的函数名或者全局变量第二种情况,工程A定义了一个函数,工程B也定义了一个具有相同函数名的函数,但函数类型与工程A定义的函数类型不同;若工程C引用了该函数,但由于工程A和工程B均定义了该函数,则会导致工程C的程序运行出现错误。
结合本申请实施例提供的代码的静态检测方法,当新的对象为新的原型声明时,通过在数据库中检索是否存在与新的原型声明的变量名和/或函数名相同的原型声明,若存在与新的原型声明的变量名和/或函数名相同的原型声明,则输出与新的原型声明的变量名和/或函数名相同的原型声明,这样可以有效地检测出软件系统中具有相同的全局变量或者函数的两个原型声明,从而解决了当软件系统中其它工程引用该原型声明时,因软件系统中存在两个具有变量名和/或函数名相同的原型声明,则导致软件系统中的其它工程的代码出现运行错误的问题。
因此,当工程A定义了一个函数,工程B也定义了一个具有相同函数名的函数,但函数类型与工程A定义的函数类型不同;若工程C引用了该函数,通过本申请实施例提供的技术方案,可以有效地检测出具有相同变量名和/或函数名的工程A定义的原型声明和工程B定义的原型声明,从而可以解决因软件系统中存在两个具有变量名和/或函数名相同的原型声明,导致工程C的程序出现运行错误的问题。
可以看出,在本申请实施例中,在对软件系统中的至少两个工程对应的代码进行编译时,通过在数据库中存储有至少两个工程对应的已编译代码中的原型声明,使得在检测新的对象,新的对象为新的外部声明和/或新的原型声明,声明包括全局变量和/或函数时,可以在数据库中检索是否存在与新的全局变量的变量名相同的原型声明,和/或,在数据库中检索是否存在与新的函数的函数名相同的原型声明,若存在与新的全局变量的变量名相同的原型声明,和/或,存在与新的函数的函数名相同的原型声明,则输出与新的全局变量的变量名相同的原型声明,和/或,与新的函数的函数名相同的原型声明,这样可以有效地检测出具有相同的函数名或者全局变量的对象,从而解决了因软件系统中包括两个相同函数名或者全局变量的对象导致程序出现运行错误的问题。
下面,将通过两种可能的场景,对本申请提供的代码的静态检测方法进行详细地说明。在一种可能的场景下,当新的对象为新的外部声明时,可参见下述图1所示的实施例;在另一种可能的场景下,当新的对象为新的原型声明时,可参见下述图2所示的实施例。可以理解的是,下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
在一种可能的场景下,当新的对象为新的外部声明时,可参见图2所示,图2为本申请实施例提供的另一种代码的静态检测方法的流程示意图,该代码的静态检测方法可以由软件和/或硬件装置执行,例如,该硬件装置可以为代码的静态检测装置,该代码的静态检测装置可以为服务器。该代码的静态检测方法可以包括:
S201、在对软件系统中的至少两个工程对应的代码进行编译时,检测是否存在新的外部声明。
其中,声明包括全局变量和/或函数。
示例的,在检测是否存在新的外部声明时,可以先判断对至少两个工程对应的代码是否执行过编译操作;若对至少两个工程对应的代码已执行过编译操作,说明当前数据库中已经存储了已执行过的代码中的原型声明,在该种情况下,则检测是否存在新的对象,并根据检测结果执行下述S202;相反的,若对至少两个工程对应的代码未执行过编译操作,说明书当前数据库中未存储有原型声明,则对至少两个工程对应的代码进行编译,并获取至少两个工程对应的代码中的原型声明,再将至少两个工程对应的代码中的原型声明存储在数据库中,这样后续有新的外部声明时,就可以将该新的外部声明与数据库中存储的原型声明进行匹配。
S202、若存在新的外部声明,则在数据库中检索是否存在与新的全局变量的变量名相同的原型声明,和/或,与新的函数的函数名相同的原型声明。
其中,数据库中存储有至少两个工程对应的已编译代码中的原型声明。
由于声明包括全局变量和/或函数,因此,在存在新的外部声明时,可以将新的全局变量与数据库中存储的所有原型声明进行比较,以判断数据库中是否存在与新的全局变量的变量名相同的原型声明;和/或,可以将新的函数的函数名与数据库中存储的所有原型声明进行比较,以判断数据库中是否存在与新的函数的函数名相同的原型声明,若存在与新的全局变量的变量名相同的原型声明和/或与新的函数的函数名相同的原型声明,则执行下述S203;若不存在,则执行下述S204:
S203、若存在,则输出与新的全局变量的变量名相同的原型声明和/或与新的函数的函数名相同的原型声明。
若存在与新的全局变量的变量名相同的原型声明,则输出与新的全局变量的变量名相同的原型声明;和/或,若存在与新的函数的函数名相同的原型声明,则可以输出与新的函数的函数名相同的原型声明,这样测试人员可以根据输出结果查看当前的软件系统中具有相同的函数名或者全局变量的新的外部声明和原型声明。
以新的外部声明为调用其他工程的外部函数为例,继续结合前面描述的两个工程具有相同的函数名第一种情况,工程A初始定义的原型声明为uint32test(),但随着工程A不断的推移,可能修改了工程A中的原型声明,将原型声明修改成了uint8 test(),且已将新的原型声明uint8 test()存储在数据库中。当工程B引用了工程A中初始原型声明uint32 test(),其定义的外部声明为extern uint32 test(),该外部声明extern uint32test()可以理解为新的外部声明,在检测到工程B新定义的外部声明extern uint32 test()后,将该新的外部声明extern uint32 test()的函数名test()与数据库中存储的所有原型声明的函数名进行匹配,由于数据库中已经存储有工程A定义的原型声明uint8 test(),且新的外部声明extern uint32 test()的函数名与数据库中存储的工程A定义的原型声明uint8 test()的函数名相同,因此,数据库中存在与工程B新定义的外部声明externuint32 test()具有相同的函数名test()的原型声明uint8 test(),则输出与工程B新定义的外部声明extern uint32 test()具有相同的函数名的原型声明uint8 test(),这样可以有效地检测出软件系统中具有相同的函数名uint test()的新的外部声明externuint32 test()和原型声明uint8 test(),从而解决了因外部声明extern uint32 test()与其引用的原型声明uint8 test()不一致,导致工程B的代码出现运行错误的问题。
可以理解的是,上述只是以外部声明为调用其他工程的外部函数为例进行说明,当外部声明为调用其他对象的外部全局变量时,其实现方式与外部声明为调用其他对象的外部函数的实现方式类似,可参见外部声明为调用其他对象的外部函数的实现方式,在此,本申请实施例不再进行赘述。
S204、若数据库中不存在与新的全局变量的变量名相同的原型声明,则将新的全局变量存储在数据库中;和/或,若数据库中不存在与新的函数的函数名相同的原型声明,则将新的函数存储在数据库中。
结合上述S203中的描述,同样以外部声明为调用其他对象的外部函数为例,假设在检测到工程B新定义的外部声明extern uint32 test()后,将该新的外部声明externuint32 test()的函数名test()与数据库中存储的所有原型声明的函数名进行匹配,且数据库中不存在与新的外部声明extern uint32 test()的函数名相同的原型声明,则可以将工程B新定义的外部声明extern uint32 test()中的函数uint32 test()存储在数据库中,用于后续的匹配操作。
通过本申请实施例提供的技术方案,在对软件系统中的至少两个工程对应的代码进行编译时,通过在数据库中存储有至少两个工程对应的已编译代码中的原型声明,使得在检测新的外部声明,声明包括全局变量和/或函数时,可以在数据库中检索是否存在与新的全局变量的变量名相同的原型声明,和/或,在数据库中检索是否存在与新的函数的函数名相同的原型声明,若存在与新的全局变量的变量名相同的原型声明,和/或,存在与新的函数的函数名相同的原型声明,则输出与新的全局变量的变量名相同的原型声明,和/或,与新的函数的函数名相同的原型声明,这样可以有效地检测出软件系统中具有相同的函数名或者全局变量的新的外部声明和原型声明,从而解决了因外部声明与其引用的原型声明不一致,导致外部声明所属工程的代码出现运行错误的问题。
上述图2所示的实施例,详细描述了当新的对象为新的外部声明时,如何实现代码的静态检测方法的技术方案。下面,将详细描述在另一种可能的场景下,当新的对象为新的原型声明时,可参见图3所示,图3为本申请实施例提供的又一种代码的静态检测方法的流程示意图,该代码的静态检测方法同样可以由软件和/或硬件装置执行,例如,该硬件装置可以为代码的静态检测装置,该代码的静态检测装置可以为服务器。该代码的静态检测方法可以包括:
S301、在对软件系统中的至少两个工程对应的代码进行编译时,检测是否存在新的原型声明。
其中,声明包括全局变量和/或函数。
示例的,在检测是否存在新的原型声明时,可以先判断对至少两个工程对应的代码是否执行过编译操作;若对至少两个工程对应的代码已执行过编译操作,说明当前数据库中已经存储了已执行过的代码中的原型声明,在该种情况下,则检测是否存在新的原型声明,并根据检测结果执行下述S302;相反的,若对至少两个工程对应的代码未执行过编译操作,说明书当前数据库中未存储有原型声明,则对至少两个工程对应的代码进行编译,并获取至少两个工程对应的代码中的原型声明,再将至少两个工程对应的代码中的原型声明存储在数据库中,这样后续有新的外部声明时,就可以将该新的原型声明与数据库中存储的原型声明进行匹配。
S302、若存在新的原型声明,则在数据库中检索是否存在与新的全局变量的变量名相同的原型声明,和/或,与新的函数的函数名相同的原型声明。
其中,数据库中存储有至少两个工程对应的已编译代码中的原型声明。
由于声明包括全局变量和/或函数,因此,在存在新的原型声明时,可以将新的全局变量与数据库中存储的所有原型声明进行比较,以判断数据库中是否存在与新的全局变量的变量名相同的原型声明;和/或,可以将新的函数的函数名与数据库中存储的所有原型声明进行比较,以判断数据库中是否存在与新的函数的函数名相同的原型声明,若存在与新的全局变量的变量名相同的原型声明和/或与新的函数的函数名相同的原型声明,则执行下述S303;若不存在,则执行下述S304:
S303、若存在,则输出与新的全局变量的变量名相同的原型声明和/或与新的函数的函数名相同的原型声明。
若存在与新的全局变量的变量名相同的原型声明,则输出与新的全局变量的变量名相同的原型声明;和/或,若存在与新的函数的函数名相同的原型声明,则可以输出与新的函数的函数名相同的原型声明,这样测试人员可以根据输出结果查看当前的软件系统中具有相同的函数名或者全局变量的新的外部声明和原型声明。
以新的原型声明为定义的新的声明为例,继续结合前面描述的两个工程具有相同的函数名第二种情况,工程A初始定义的原型声明为uint32 test(),且已将工程A初始定义的原型声明uint32 test()存储在数据库中。当工程B定义了一个原型声明uint8 test(),该工程B新定义的原型声明uint8 test()可以理解为新的原型声明,在检测到工程B新定义的原型声明uint8 test()后,将该新定义的原型声明uint8 test()的函数名test()与数据库中存储的所有原型声明的函数名进行匹配,由于数据库中已经存储有工程A定义的原型声明uint32test(),且新定义的原型声明uint8 test()的函数名与数据库中存储的工程A定义的原型声明uint32 test()的函数名相同,因此,数据库中存在与工程B新定义的原型声明uint8 test()具有相同的函数名test()的原型声明uint32 test(),则输出与工程B新定义的原型声明uint8 test()具有相同的函数名的原型声明uint32 test(),这样可以有效地检测出软件系统中具有相同的函数名uint test()的新定义的原型声明uint8 test()和原型声明uint32 test(),从而可以解决当软件系统中的工程C引用该函数uint test()时,但由于软件系统中工程A和工程B均定义了函数uint test(),导致工程C的程序运行出现错误的问题。
可以理解的是,上述只是以原型声明为定义的新的函数为例进行说明,当原型声明为定义的新的全局变量时,其实现方式与原型声明为定义的新的函数的实现方式类似,可参见原型声明为定义的新的函数的实现方式,在此,本申请实施例不再进行赘述。
S304、若数据库中不存在与新的全局变量的变量名相同的原型声明,则将新的全局变量存储在数据库中;和/或,若数据库中不存在与新的函数的函数名相同的原型声明,则将新的函数存储在数据库中。
结合上述S303中的描述,同样以原型声明为定义的新的函数为例,假设在检测到工程B新定义的原型声明uint8 test()后,将该新定义的原型声明uint8test()的函数名test()与数据库中存储的所有原型声明的函数名进行匹配,且数据库中不存在与新定义的原型声明uint8 test()的函数名相同的原型声明,则可以将工程B新定义的原型声明uint8 test()中的函数uint8 test()存储在数据库中,用于后续的匹配操作。
通过本申请实施例提供的技术方案,在对软件系统中的至少两个工程对应的代码进行编译时,通过在数据库中存储有至少两个工程对应的已编译代码中的原型声明,使得在检测新的原型声明,声明包括全局变量和/或函数时,可以在数据库中检索是否存在与新的全局变量的变量名相同的原型声明,和/或,在数据库中检索是否存在与新的函数的函数名相同的原型声明,若存在与新的全局变量的变量名相同的原型声明,和/或,存在与新的函数的函数名相同的原型声明,则输出与新的全局变量的变量名相同的原型声明,和/或,与新的函数的函数名相同的原型声明,这样可以有效地检测出软件系统中具有相同的全局变量或者函数的两个原型声明,从而解决了当软件系统中其它工程引用该原型声明时,因软件系统中存在两个具有变量名和/或函数名相同的原型声明,则导致软件系统中的其它工程的代码出现运行错误的问题。
基于上述图2或图3所示的实施例,当检测到新的对象时,若存在与新的全局变量的变量名相同的原型声明和/或与新的函数的函数名相同的原型声明,则输出与新的全局变量的变量名相同的原型声明和/或与新的函数的函数名相同的原型声明之后,还可以进一步输出相应的提示信息,以提示测试人员对代码进行修改。
在一种情况下,若存在与新的函数的函数名相同的原型声明,则在输出与新的函数的函数名相同的原型声明后,还可以进一步判断新的函数的参数类型和返回类型,分别和数据库中与新的函数的函数名相同的原型声明的参数类型和返回类型是否相同;若参数类型和返回类型均相同,则输出第三提示信息,第三提示信息用于提醒用户已调用其他工程的函数;若参数类型和/或返回类型不同,则输出第四提示信息,第四提示信息用于提醒用户重新定义新的函数。
当新的函数的参数类型和返回类型,分别和数据库中与新的函数的函数名相同的原型声明的参数类型和返回类型相同时,说明新的函数可以正确调用数据库中的原型函数,则输出第一提示信息,用于提醒工程师新的函数所属的工程调用了其它工程中的原型函数。
当新的函数的参数类型和返回类型中存在类型不同时,包括参数类型和返回类型与分别和数据库中原型声明的参数类型和返回类型均不相同、新的函数的参数类型与数据库中原型声明的参数类型不相同、以及新的函数的返回类型与数据库中原型声明的返回类型不相同三种情况,在该三种情况下,说明新的函数可以错误地调用了数据库中的原型函数,则可以输出第四提示信息,用于提醒用户重新定义新的函数,或者,也可以提醒工程师修改代码逻辑,这样可以有效地检测出具有相同的函数名或者全局变量的对象,从而解决了因软件系统中包括两个相同函数名或者全局变量的对象导致程序出现运行错误的问题。
以新的对象为新的外部声明,且外部声明为调用其他工程的外部函数为例,继续结合上述S203中的描述,在输出与工程B新定义的外部声明extern uint32 test()具有相同的函数名的原型声明uint8 test()后,判断工程B新定义的外部声明extern uint32test()和数据库中工程A定义的原型声明uint8 test()的参数类型和返回类型是否相同,经过比较之后,确定工程B新定义的外部声明extern uint32 test()和数据库中工程A定义的原型声明uint8 test()的参数类型相同,但返回类型不同,说明工程B错误地调用了工程A中的原型声明uint8test(),则输出第四提示信息,提示信息可以用于提醒工程B的工程师重新定义新的函数,或者,也可以提醒工程B的工程师修改工程B的代码逻辑,这样可以避免因外部声明extern uint32 test()与其引用的原型声明uint8 test()不一致,导致工程B的代码出现运行错误的问题。
在另一种情况下,若存在与新的全局变量的变量名相同的原型声明,则在输出与新的全局变量的变量名相同的原型声明后,还可以进一步判断新的全局变量的变量类型和数据库中与新的全局变量相同的原型声明的变量类型是否相同;若变量类型相同,则输出第一提示信息,第一提示信息用于提醒用户已调用其他工程的全局变量;若变量类型不同,则输出第二提示信息,第二提示信息用于提醒用户重新定义新的全局变量。
可以理解的是,在本申请实施例中,当外部声明为调用其他工程的全局变量时,输出提示信息的方法与上述当外部声明为调用其他工程的函数时,输出提示信息的方法类似,可参见上述当外部声明为调用其他工程的函数时,输出提示信息的方法的相关描述,在此,本申请实施例不再进行赘述。
图4为本申请实施例提供的一种代码的静态检测装置40的结构示意图,示例的,请参见图4所示,该代码的静态检测装置40可以包括:
处理单元401,用于在对软件系统中的至少两个工程对应的代码进行编译时,检测是否存在新的对象;其中,新的对象为新的外部声明和/或新的原型声明,声明包括全局变量和/或函数。
处理单元401,还用于若存在新的对象,则在数据库中检索是否存在与新的全局变量的变量名相同的原型声明,和/或,与新的函数的函数名相同的原型声明,数据库中存储有至少两个工程对应的已编译代码中的原型声明。
输出单元402,用于若存在,则输出与新的全局变量的变量名相同的原型声明和/或与新的函数的函数名相同的原型声明。
可选的,该代码的静态检测装置40还包括存储单元403。
存储单元403,用于若数据库中不存在与新的全局变量的变量名相同的原型声明,则将新的全局变量存储在数据库中;和/或,若数据库中不存在与新的函数的函数名相同的原型声明,则将新的函数存储在数据库中。
可选的,声明为全局变量;存储单元403,还用于判断新的全局变量的变量类型和数据库中与新的全局变量相同的原型声明的变量类型是否相同。
输出单元402,还用于若变量类型相同,则输出第一提示信息,第一提示信息用于提醒用户已调用其他工程的全局变量;若变量类型不同,则输出第二提示信息,第二提示信息用于提醒用户重新定义新的全局变量。
可选的,对象为函数,处理单元401,还用于判断新的函数的参数类型和返回类型,分别和数据库中与新的函数的函数名相同的原型声明的参数类型和返回类型是否相同。
输出单元402,还用于若参数类型和返回类型均相同,则输出第三提示信息,第三提示信息用于提醒用户已调用其他工程的函数;若参数类型和/或返回类型不同,则输出第四提示信息,第四提示信息用于提醒用户重新定义新的函数。
可选的,处理单元401,具体用于判断对至少两个工程对应的代码是否执行过编译操作;若对至少两个工程对应的代码已执行过编译操作,则检测是否存在新的对象。
可选的,处理单元401,还用于若对至少两个工程对应的代码未执行过编译操作,则对至少两个工程对应的代码进行编译,并获取至少两个工程对应的代码中的原型声明。
存储单元403,还用于将至少两个工程对应的代码中的原型声明存储在数据库中。
本申请实施例提供的代码的静态检测装置40,可以执行上述任一实施例中的代码的静态检测方法的技术方案,其实现原理以及有益效果与代码的静态检测方法的实现原理及有益效果类似,可参见代码的静态检测方法的实现原理及有益效果,此处不再进行赘述。
图5为本申请实施例提供的另一种代码的静态检测装置50的结构示意图,示例的,请参见图5所示,该代码的静态检测装置50可以包括处理器501和存储器502;其中,
所述存储器502,用于存储计算机程序。
所述处理器501,用于读取所述存储器502存储的计算机程序,并根据所述存储器502中的计算机程序执行上述任一实施例中的样本数据的获取方法的技术方案。
可选地,存储器502既可以是独立的,也可以跟处理器501集成在一起。当存储器502是独立于处理器501之外的器件时,代码的静态检测装置还可以包括:总线,用于连接存储器502和处理器501。
可选地,本实施例还包括:通信接口,该通信接口可以通过总线与处理器501连接。处理器501可以控制通信接口来实现上述代码的静态检测装置的获取和发送的功能。
本申请实施例所示的代码的静态检测装置50,可以执行上述任一实施例中的代码的静态检测方法的技术方案,其实现原理以及有益效果与代码的静态检测方法的实现原理及有益效果类似,可参见代码的静态检测方法的实现原理及有益效果,此处不再进行赘述。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现上述任一实施例中的代码的静态检测方法的技术方案,其实现原理以及有益效果与代码的静态检测方法的实现原理及有益效果类似,可参见代码的静态检测方法的实现原理及有益效果,此处不再进行赘述。
本申请实施例还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时,实现上述任一实施例中的代码的静态检测方法的技术方案,其实现原理以及有益效果与代码的静态检测方法的实现原理及有益效果类似,可参见代码的静态检测方法的实现原理及有益效果,此处不再进行赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所展示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元展示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本申请各个实施例方法的部分步骤。
应理解的是,上述处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital SignalProcessor,简称:DSP)、专用集成电路(英文:Application Specific IntegratedCircuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。
总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
上述计算机可读存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (15)
1.一种代码的静态检测方法,其特征在于,包括:
在对软件系统中的至少两个工程对应的代码进行编译时,检测是否存在新的对象;其中,所述新的对象为新的外部声明和/或新的原型声明,所述声明包括全局变量和/或函数;
若存在所述新的对象,则在数据库中检索是否存在与新的全局变量的变量名相同的原型声明,和/或,与新的函数的函数名相同的原型声明,所述数据库中存储有所述至少两个工程对应的已编译代码中的原型声明;
若存在,则输出与所述新的全局变量的变量名相同的原型声明和/或与所述新的函数的函数名相同的原型声明。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若所述数据库中不存在与所述新的全局变量的变量名相同的原型声明,则将所述新的全局变量存储在所述数据库中;和/或,
若所述数据库中不存在与所述新的函数的函数名相同的原型声明,则将所述新的函数存储在所述数据库中。
3.根据权利要求1所述的方法,其特征在于,所述声明为全局变量,所述方法还包括:
判断所述新的全局变量的变量类型和所述数据库中与所述新的全局变量相同的原型声明的变量类型是否相同;
若变量类型相同,则输出第一提示信息,所述第一提示信息用于提醒用户已调用其他工程的全局变量;
若变量类型不同,则输出第二提示信息,所述第二提示信息用于提醒用户重新定义所述新的全局变量。
4.根据权利要求1所述的方法,其特征在于,所述对象为函数,所述方法还包括:
判断所述新的函数的参数类型和返回类型,分别和所述数据库中与所述新的函数的函数名相同的原型声明的参数类型和返回类型是否相同;
若参数类型和返回类型均相同,则输出第三提示信息,所述第三提示信息用于提醒用户已调用其他工程的函数;
若参数类型和/或返回类型不同,则输出第四提示信息,所述第四提示信息用于提醒用户重新定义所述新的函数。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述在对软件系统中的至少两个工程对应的代码进行编译时,检测是否存在新的对象,包括:
判断对所述至少两个工程对应的代码是否执行过编译操作;
若对所述至少两个工程对应的代码已执行过编译操作,则检测是否存在所述新的对象。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
若对所述至少两个工程对应的代码未执行过编译操作,则对所述至少两个工程对应的代码进行编译,并获取所述至少两个工程对应的代码中的原型声明;
将所述至少两个工程对应的代码中的原型声明存储在所述数据库中。
7.一种代码的静态检测装置,其特征在于,包括:
处理单元,用于在对软件系统中的至少两个工程对应的代码进行编译时,检测是否存在新的对象;其中,所述新的对象为新的外部声明和/或新的原型声明,所述声明包括全局变量和/或函数;
所述处理单元,还用于若存在所述新的对象,则在数据库中检索是否存在与新的全局变量的变量名相同的原型声明,和/或,与新的函数的函数名相同的原型声明,所述数据库中存储有所述至少两个工程对应的已编译代码中的原型声明;
输出单元,用于若存在,则输出与所述新的全局变量的变量名相同的原型声明和/或与所述新的函数的函数名相同的原型声明。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括存储单元;
所述存储单元,用于若所述数据库中不存在与所述新的全局变量的变量名相同的原型声明,则将所述新的全局变量存储在所述数据库中;和/或,若所述数据库中不存在与所述新的函数的函数名相同的原型声明,则将所述新的函数存储在所述数据库中。
9.根据权利要求7所述的装置,其特征在于,所述声明为全局变量;
所述存储单元,还用于判断所述新的全局变量的变量类型和所述数据库中与所述新的全局变量相同的原型声明的变量类型是否相同;
所述输出单元,还用于若变量类型相同,则输出第一提示信息,所述第一提示信息用于提醒用户已调用其他工程的全局变量;若变量类型不同,则输出第二提示信息,所述第二提示信息用于提醒用户重新定义所述新的全局变量。
10.根据权利要求7所述的装置,其特征在于,所述对象为函数;
所述处理单元,还用于判断所述新的函数的参数类型和返回类型,分别和所述数据库中与所述新的函数的函数名相同的原型声明的参数类型和返回类型是否相同;
所述输出单元,还用于若参数类型和返回类型均相同,则输出第三提示信息,所述第三提示信息用于提醒用户已调用其他工程的函数;若参数类型和/或返回类型不同,则输出第四提示信息,所述第四提示信息用于提醒用户重新定义所述新的函数。
11.根据权利要求7-10任一项所述的装置,其特征在于,
所述处理单元,具体用于判断对所述至少两个工程对应的代码是否执行过编译操作;若对所述至少两个工程对应的代码已执行过编译操作,则检测是否存在所述新的对象。
12.根据权利要求11所述的装置,其特征在于,
所述处理单元,还用于若对所述至少两个工程对应的代码未执行过编译操作,则对所述至少两个工程对应的代码进行编译,并获取所述至少两个工程对应的代码中的原型声明;
存储单元,还用于将所述至少两个工程对应的代码中的原型声明存储在所述数据库中。
13.一种代码的静态检测装置,其特征在于,包括处理器和存储器;其中,
所述存储器,用于存储计算机程序;
所述处理器,用于读取所述存储器存储的计算机程序,并根据所述存储器中的计算机程序执行上述权利要求1-6任一项所述的代码的静态检测方法。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现上述权利要求1-6任一项所述的代码的静态检测方法。
15.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时,实现上述权利要求1-6任一项所述的代码的静态检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011496871.9A CN112527660B (zh) | 2020-12-17 | 2020-12-17 | 代码的静态检测方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011496871.9A CN112527660B (zh) | 2020-12-17 | 2020-12-17 | 代码的静态检测方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112527660A true CN112527660A (zh) | 2021-03-19 |
CN112527660B CN112527660B (zh) | 2022-11-22 |
Family
ID=75001146
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011496871.9A Active CN112527660B (zh) | 2020-12-17 | 2020-12-17 | 代码的静态检测方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112527660B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109902001A (zh) * | 2019-02-12 | 2019-06-18 | 科华恒盛股份有限公司 | 对未初始化变量的检测方法及终端设备 |
CN110688320A (zh) * | 2019-09-30 | 2020-01-14 | 潍柴动力股份有限公司 | 全局变量的检测方法、装置及终端设备 |
-
2020
- 2020-12-17 CN CN202011496871.9A patent/CN112527660B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109902001A (zh) * | 2019-02-12 | 2019-06-18 | 科华恒盛股份有限公司 | 对未初始化变量的检测方法及终端设备 |
CN110688320A (zh) * | 2019-09-30 | 2020-01-14 | 潍柴动力股份有限公司 | 全局变量的检测方法、装置及终端设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112527660B (zh) | 2022-11-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20100180263A1 (en) | Apparatus and method for detecting software error | |
CN111124479B (zh) | 配置文件的解析方法、系统及电子设备 | |
CN110209520B (zh) | 一种提高ssd测试效率的方法、装置、计算机设备及存储介质 | |
CN111124921B (zh) | 内存越界的检测方法、装置、设备和存储介质 | |
CN109739824B (zh) | 日志获取方法及设备 | |
WO2020237508A1 (zh) | 一种断言验证代码绑定方法及装置 | |
CN112149136A (zh) | loT设备固件漏洞的检测方法、系统及电子设备 | |
CN113031967B (zh) | 一种代码转换方法及装置 | |
CN110688320B (zh) | 全局变量的检测方法、装置及终端设备 | |
CN112835564A (zh) | 代码生成方法和装置 | |
CN111857785B (zh) | 一种mcu的启动方法、装置及终端设备 | |
CN112527660B (zh) | 代码的静态检测方法和装置 | |
CN110765008A (zh) | 一种数据处理方法及装置 | |
CN109189671B (zh) | 逐层夹逼式变量定位方法、系统及终端设备 | |
US9063723B2 (en) | Function-based software comparison method | |
CN112052165B (zh) | 一种检测目标函数被调试的方法、系统及存储介质 | |
CN114817047A (zh) | 编译器测试方法、用例生成方法及装置、指令存储结构 | |
CN110275710B (zh) | 一种Java本地接口一致性检查方法及系统、存储介质及终端 | |
CN113760249A (zh) | 程序文件的处理方法、装置及设备 | |
CN113986744A (zh) | 一种分库分表组件的测试方法、装置及存储介质 | |
KR100580071B1 (ko) | 메모리 오류 검출방법 | |
CN113031956A (zh) | 程序编译方法和装置以及程序运行方法和装置 | |
CN115470151B (zh) | 一种应用运行分析方法、计算设备及存储介质 | |
CN106502755B (zh) | 一种检查Linux内核模块未知符号的方法及装置 | |
CN112948241B (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 |