CN110688320B - 全局变量的检测方法、装置及终端设备 - Google Patents
全局变量的检测方法、装置及终端设备 Download PDFInfo
- Publication number
- CN110688320B CN110688320B CN201910944880.0A CN201910944880A CN110688320B CN 110688320 B CN110688320 B CN 110688320B CN 201910944880 A CN201910944880 A CN 201910944880A CN 110688320 B CN110688320 B CN 110688320B
- Authority
- CN
- China
- Prior art keywords
- file
- target
- compiling
- auxiliary
- source
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
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/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
-
- 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
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/02—Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]
Abstract
本发明实施例提供一种全局变量的检测方法、装置及终端设备,该方法包括获取待编译的工程文件包,其中工程文件包包括多个源文件,从多个源文件中选取目标源文件,并获取辅助文件,其中辅助文件包括多个源文件中的已经进行编译处理的源文件所定义的全局变量,对目标源文件和辅助文件进行编译处理,在对目标源文件和辅助文件进行编译处理的过程中,若目标源文件所定义的目标全局变量中存在与辅助文件中的全局变量相同的重复定义变量,则停止进行编译处理,并生成报警信息发送至报警装置,相较于在链接过程才进行重复定义的检测,在编译过程就进行重复定义的检测可以减少全局变量重复定义的检测所需时间,提高检测效率。
Description
技术领域
本发明实施例涉及软件技术领域,尤其涉及一种全局变量的检测方法、装置及终端设备。
背景技术
源文件是指由源程序和数据构成的文件,在软件工程开发的过程中,开发人员通常需要在源文件中定义全局变量,在某个源文件内定义的全局变量可以被该源文件所在的工程文件包中的所有源文件内的对象或函数引用。为了避免由于全局变量重复定义导致的软件运行出现问题,通常需要进行全局变量重复定义检查。
现有技术中,没有依赖关系的文件在进行全局变量重复定义检查时,一般是在程序的链接过程中,检查工程文件包中的各个源文件中是否存在重复定义的全局变量,当确定存在重复定义的全局变量时,提示用户进行修改,来确保软件的正常链接。
然而,发明人发现现有技术中至少存在如下问题:由于在程序的链接过程才检查是否存在重复定义的全局变量,当代码量较大时,链接过程耗时较长,全局变量的重复定义检查时间较长。
发明内容
本发明实施例提供一种全局变量的检测方法、装置及终端设备,以减少全局变量的重复定义检查时间。
第一方面,本发明实施例提供一种全局变量的检测方法,包括:
获取待编译的工程文件包,其中所述工程文件包包括多个源文件;
从所述多个源文件中选取目标源文件,并获取辅助文件,其中所述辅助文件包括所述多个源文件中的已经进行编译处理的源文件所定义的全局变量;
对所述目标源文件和所述辅助文件进行编译处理;
在对所述目标源文件和所述辅助文件进行编译处理的过程中,若所述目标源文件所定义的目标全局变量中存在与所述辅助文件中的全局变量相同的重复定义变量,则停止进行编译处理,并生成报警信息发送至报警装置。
在一种可能的设计中,在所述对所述目标源文件和所述辅助文件进行编译处理之后,还包括:
获取目标文件,其中所述目标文件为对所述目标源文件进行编译处理后得到的文件;
根据所述目标文件,获取所述目标源文件所定义的目标全局变量;
将获取到的目标全局变量添加至所述辅助文件中,并继续从所述多个源文件中选取目标源文件。
在一种可能的设计中,所述根据所述目标文件,获取所述目标源文件所定义的目标全局变量,包括:
对所述目标文件进行分析,得到所述目标文件对应的符号表;
若所述符号表中存在目标属性所对应的属性值为预设属性值的变量,则确定所述变量为所述目标全局变量。
在一种可能的设计中,在所述将获取到的目标全局变量添加至所述辅助文件中之后,还包括:
判断所述多个源文件中是否存在未进行编译处理的源文件;
若不存在未进行编译处理的源文件,则对所述辅助文件进行编译处理;
在对所述辅助文件进行编译处理的过程中,若所述辅助文件中存在相同的全局变量,则停止进行编译处理,并生成报警信息发送至报警装置。
在一种可能的设计中,所述对所述目标源文件和所述辅助文件进行编译处理,包括:
获取编译配置脚本文件,根据所述编译配置脚本文件,对所述目标源文件和所述辅助文件进行编译处理。
第二方面,本发明实施例提供一种全局变量的检测装置,包括:
第一文件获取模块,用于获取待编译的工程文件包,其中所述工程文件包包括多个源文件;
第二文件获取模块,用于从所述多个源文件中选取目标源文件,并获取辅助文件,其中所述辅助文件包括所述多个源文件中的已经进行编译处理的源文件所定义的全局变量;
文件编译处理模块,用于对所述目标源文件和所述辅助文件进行编译处理;
报警处理模块,用于在对所述目标源文件和所述辅助文件进行编译处理的过程中,若所述目标源文件所定义的目标全局变量中存在与所述辅助文件中的全局变量相同的重复定义变量,则停止进行编译处理,并生成报警信息发送至报警装置。
在一种可能的设计中,所述装置还包括辅助文件更新模块;
所述辅助文件更新模块,用于在所述对所述目标源文件和所述辅助文件进行编译处理之后,获取目标文件,其中所述目标文件为对所述目标源文件进行编译处理后得到的文件;
根据所述目标文件,获取所述目标源文件所定义的目标全局变量;
将获取到的目标全局变量添加至所述辅助文件中,并继续从所述多个源文件中选取目标源文件。
在一种可能的设计中,所述辅助文件更新模块具体用于:对所述目标文件进行分析,得到所述目标文件对应的符号表;
若所述符号表中存在目标属性所对应的属性值为预设属性值的变量,则确定所述变量为所述目标全局变量。
在一种可能的设计中,所述辅助文件更新模块还用于:在所述将获取到的目标全局变量添加至所述辅助文件中之后,判断所述多个源文件中是否存在未进行编译处理的源文件;
若不存在未进行编译处理的源文件,则对所述辅助文件进行编译处理;
在对所述辅助文件进行编译处理的过程中,若所述辅助文件中存在相同的全局变量,则停止进行编译处理,并生成报警信息发送至报警装置。
在一种可能的设计中,所述文件编译处理模块具体用于:
获取编译配置脚本文件,根据所述编译配置脚本文件,对所述目标源文件和所述辅助文件进行编译处理。
第三方面,本发明实施例提供一种终端设备,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如上第一方面以及第一方面各种可能的设计所述的全局变量的检测方法。
第四方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上第一方面以及第一方面各种可能的设计所述的页全局变量的检测方法。
本发明实施例提供了一种全局变量的检测方法、装置及终端设备,该方法通过从待编译的工程文件包所包括的多个源文件中选取目标源文件以及获取包括该多个源文件中已经进行编译处理的源文件所定义的全局变量,在对该目标源文件和辅助文件进行编译处理的过程,确定目标源文件所定义的目标全局变量中是否存在与辅助文件中的全局变量相同的全局变量,若存在,表示该全局变量便为重复定义的全局变量,则停止进行编译处理,并生成报警信息发送至报警装置以使相关开发人员可以及时解决全局变量重复定义的问题,实现在编译过程中进行全局变量的重复定义的检测,相较于在链接过程才进行重复定义的检测,在编译过程就进行重复定义的检测可以减少全局变量重复定义的检测所需时间,提高检测效率,从而加快整个开发进程。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的全局变量的检测系统的架构示意图;
图2为本发明实施例提供的全局变量的检测方法的流程示意图一;
图3为本发明实施例提供的全局变量的检测方法的流程示意图二;
图4为本发明实施例提供的符号表的示意图;
图5为本发明实施例提供的全局变量的检测装置的结构示意图;
图6为本发明实施例提供的终端设备的硬件结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的全局变量的检测系统的架构示意图。如图1所示,本实施例提供的系统包括终端设备101,当需要检测某个待编译的工程文件中是否存在重复定义的全局变量时,用户可以在终端设备101上输入相关编译请求,该请求中包括该待编译的工程文件包的文件标识。终端设备101根据该请求中的文件标识获取对应的工程文件包,然后检测该待编译的工程文件中是否存在重复定义的全局变量,即从待编译的工程文件包所包括的多个源文件中选取目标源文件以及获取包括该多个源文件中已经进行编译处理的源文件所定义的全局变量,在对该目标源文件和辅助文件进行编译处理的过程,确定目标源文件所定义的目标全局变量中是否存在与辅助文件中的全局变量相同的全局变量,若存在,表示该全局变量便为重复定义的全局变量,则停止进行编译处理,并生成报警信息发送至报警装置以使相关开发人员可以及时解决全局变量重复定义的问题,实现在编译过程中进行全局变量的重复定义的检测,相较于在链接过程才进行重复定义的检测,在编译过程就进行重复定义的检测可以减少全局变量重复定义的检测所需时间,提高检测效率,从而加快整个开发进程。
下面以具体地实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
图2为本发明实施例提供的全局变量的检测方法的流程示意图一,本实施例的执行主体可以为图1所示实施例中的终端设备,本实施例此处不做特别限制。如图2所示,该方法包括:
S201:获取待编译的工程文件包,其中工程文件包包括多个源文件。
在本实施例中,获取待编译的工程文件包,该工程文件包中存在多个源文件,当编译该工程文件包时,实际上是按照预设的编译次序逐个编译该工程文件包中源文件。
S202:从多个源文件中选取目标源文件,并获取辅助文件,其中辅助文件包括多个源文件中的已经进行编译处理的源文件所定义的全局变量。
在本实施例中,从多个源文件中选取一个源文件,并作为目标源文件,该目标源文件为当前需要进行编译处理的源文件。
其中,在从多个源文件中选取一个源文件时,实际上是按照编译次序,从多个源文件中的还未进行编译处理的源文件中选取源文件。
其中,该编译次序可以直接从预设次序表中获取,也可以从编译配置脚本文件中获取。该编译配置脚本文件可以为makefile文件,该文件定义了源文件的编译顺序、源文件对应的编译规则以及辅助文件对应的编译规则,即如何编译源文件。
在从多个源文件中选取目标源文件时,还要获取最新的辅助文件,该辅助文件包括该多个源文件中的已经进行编译处理的源文件所定义的全局变量。
以一个具体应用场景为例,工程文件包包括3个源文件,分别是源文件A、源文件B和源文件C,预设的编译次序是源文件A、源文件B和源文件C,即先编译源文件A,然后再编译源文件B,最后编译源文件C,源文件A已经编译完成,因此,在从多个源文件中选取目标源文件时,将源文件B作为目标源文件,获取到的辅助文件包括源文件A所定义的全局变量。
S203:对目标源文件和辅助文件进行编译处理。
在本实施例中,在得到目标源文件和辅助文件后,通过编译器对该目标源文件和辅助文件进行编译处理。
其中,通过编译器对目标源文件和辅助文件进行编译处理的过程包括:
获取编译配置脚本文件,根据编译配置脚本文件,对目标源文件和辅助文件进行编译处理。
在本实施例中,在通过编译器对目标源文件和辅助文件进行编译处理时,控制编译器按照编译配置脚本文件对目标源文件和辅助文件进行编译处理,在编译器按照该编译配置脚本文件对目标源文件和辅助文件进行编译处理时,编译器实际是根据编译配置脚本文件中的编译选项,在编译目标源文件同时编译辅助文件,然后根据编译配置脚本中的编译规则,对目标源文件同时辅助文件进行编译。
其中,该编译选项表示编译源文件时,在不修改源文件的条件下强制Include辅助文件,该编译选项是开发人员根据实际需求在编译配置脚本文件中添加的。
其中,控制编译器按照编译配置脚本文件对目标源文件和辅助文件进行编译处理时,可以通过发送相应的控制指令,以使编译器按照编译配置脚本文件对目标源文件和辅助文件进行编译处理。
S204:在对目标源文件和辅助文件进行编译处理的过程中,若目标源文件所定义的目标全局变量中存在与辅助文件中的全局变量相同的重复定义变量,则停止进行编译处理,并生成报警信息发送至报警装置。
在本实施例中,在通过编译器对目标源文件和辅助文件进行编译处理的过程中,检测目标源文件所定义的目标全局变量中是否存在与辅助文件中的全局变量相同的重复定义变量,当目标源文件所定义的目标全局变量中存在与辅助文件中的全局变量相同的全局变量时,表示该目标源文件中存在重复定义的全局变量,则编译器发送相应的警告信息至终端设备,以使终端设备控制编译器停止对目标源文件和辅助文件继续进行编译处理,并从该警告信息中提取重复定义变量名称和源文件标识,然后按照预设格式生成报警信息发送至报警装置,使该报警装置播放或显示该报警信息,以提醒用户工程文件包中存在重复定义的全局变量,并使用户可以根据报警信息及时解决全局变量重复定义的问题。
其中,报警装置可以为显示屏或语音播放器。
其中,检测目标源文件所定义的目标全局变量中是否存在与辅助文件中的全局变量相同的重复定义变量时,针对各个目标全局变量,分别判断该目标全局变量是否与辅助文件中的各个全局变量相同,若相同,则确定该目标全局变量即为重复定义变量,例如,目标源文件所定义的目标全局变量包括目标全局变量a和目标全局变量b,辅助文件所包括的全局变量包括全局变量a和全局变量c,针对目标全局变量a,在判断目标全局变量a是否与辅助文件中的全局变量a是否相同以及判断目标全局变量a是否辅助文件中的全局变量b相同时,确定目标全局变量a与全局变量a相同,则确定该目标全局变量a为重复定义变量。
可选的,当目标源文件所定义的目标全局变量中存在与辅助文件中的全局变量相同的全局变量时,编译器可以直接停止继续进行编译处理,直接输出警告信息至显示屏,以使显示屏显示该警告信息。
在本实施例中,在检测待编译的多个源文件中是否存在重复定义的全局变量时,将当前正在编译的源文件所定义的目标全局变量与辅助文件所包括的之前已经进行编译的源文件所定义的全局变量进行比较,确定当前正在编译的源文件所定义的目标全局变量中是否存在与其它源文件所定义的全局变量相同的全局变量,若存在,表示存在重复定义的全局变量,通过在编译源文件时一起编译辅助文件,将当前正在编译的源文件所定义的全局变量与其它源文件所定义的全局变量进行了关联,在编译阶段便可以实现全局变量的重复定义的检测,即使代码量较大时,相较于对软件代码进行链接的速度,对软件代码进行编译的速度会较快,因此,相较于在链接过程才进行重复定义的检测,在编译过程就进行重复定义的检测可以减少全局变量重复定义的检测所需时间,且可以检测出所有源文件中是否存在重复定义的全局变量,提高全局变量重复定义检测的准确率以及覆盖率,避免发生在链接过程进行重复定义的检测时出现检测覆盖率较低的问题。
需要说明的是,为了提高检测效率,本实施例在检测工程文件包中的多个源文件中是否存在重复定义的全局变量时,可以仅检测多个源文件中未存在依赖关系的源文件之间是否存在重复定义的全局变量,而存在依赖关系的源文件的全局变量重复定义的检测可以通过现有技术在编译过程中进行检测,在此,不再对在编译过程中检测存在依赖关系的源文件中是否存在重复定义的全局变量的过程进行赘述。
从上述描述可知,通过从待编译的工程文件包所包括的多个源文件中选取目标源文件以及获取包括该多个源文件中已经进行编译处理的源文件所定义的全局变量,在对该目标源文件和辅助文件进行编译处理的过程,确定目标源文件所定义的目标全局变量中是否存在与辅助文件中的全局变量相同的全局变量,若存在,表示该全局变量便为重复定义的全局变量,则停止进行编译处理,并生成报警信息发送至报警装置以使相关开发人员可以及时解决全局变量重复定义的问题,实现在编译过程中进行全局变量的重复定义的检测,相较于在链接过程才进行重复定义的检测,在编译过程就进行重复定义的检测可以减少全局变量重复定义的检测所需时间,提高检测效率,从而加快整个开发进程。
可以理解的时,在对目标源文件和辅助文件进行编译处理后,当该目标源文件所定义的目标全局变量均与辅助文件中的全局变量不同时,会生成该目标源文件所对应的目标文件和该辅助文件,利用该目标文件,对辅助文件进行更新,下面结合一个具体的实施例对利用目标文件对辅助文件进行更新的过程进行详细描述。
图3为本发明实施例提供的页面加载方法的流程示意图二,本实施例在图2实施例的基础上,对利用目标文件对辅助文件进行更新的具体过程进行了详细说明。如图3所示,该方法包括:
S301:获取待编译的工程文件包,其中工程文件包包括多个源文件。
S302:从多个源文件中选取目标源文件,并获取辅助文件,其中辅助文件包括多个源文件中的已经进行编译处理的源文件所定义的全局变量。
S303:对目标源文件和辅助文件进行编译处理。
其中,本实施例中的S301-S303的实现过程与图2实施例中的S201-S203过程类似,在此,不再进行赘述。
S304:获取目标文件,其中目标文件为对目标源文件进行编译处理后得到的文件。
在本实施例中,当对目标源文件和辅助文件进行编译处理,并编译成功后,编译器会生成目标源文件所对应的目标文件以及辅助文件所对应的辅助目标文件,终端设备对辅助文件更新时,需要获取编译器生成的目标文件。
S305:根据目标文件,获取目标源文件所定义的目标全局变量。
在本实施例中,在得到目标文件后,需要对辅助文件进行全局变量更新,即将目标源文件所定义的目标全局变量添加至辅助文件,因此,需要利用目标文件获取目标源文件所定义的目标全局变量。
其中,利用目标文件获取目标源文件所定义的目标全局变量的过程包括:
对目标文件进行分析,得到目标文件对应的符号表。
若符号表中存在目标属性所对应的属性值为预设属性值的变量,则确定变量为目标全局变量。
在本实施例中,对目标文件进行分析,得到目标文件所对应的符号表,该符号表中包括用于定位、重定位程序中的符号定义和引用的信息。
符号表包括变量对应的多个属性和各属性对应的属性值,当目标文件对应的符号表中存在目标属性所对应的属性值为预设属性值的变量,则确定该数据对象为目标全局变量,该目标属性为用户预先指定的属性,可以根据实际需求进行设置,例如,目标属性为Bind属性和Type属性,如图4所示,符号表包括变量对应的多个属性和各属性对应的具体值,Nax Nmae属性为变量名称,将Bind属性值为GLOBAL以及Type属性值为OBJECT的变量作为目标全局变量,例如,符号表中的Nax Nmae属性值为CVNcalc_data,即变量名称为CVNcalc_data的变量所对应的Bind属性值为GLOBAL且Type属性值为OBJECT,因此,该CVNcalc_data所对应的变量为全局变量。
其中,对目标文件进行分析,得到目标文件所对应的符号表的过程为现有过程,在此不再对其进行赘述。
S306:将获取到的目标全局变量添加至辅助文件中,并继续从多个源文件中选取目标源文件。
在本实施例中,将获取到的所有目标全局变量添加至辅助文件中,即将目标源文件所定义的全局变量添加至辅助文件中,实现辅助文件的更新。
其中,在将目标全局变量添加至辅助文件中时,需要按照预设添加格式添加至辅助文件中,例如,将全局变量Int_numDataFrameVer_C按照如下格式添加至辅助文件中:
#ifdef Int_numDataFrameVer_C
#warn"redeclaration of Int_numDataFrameVer_C XX.c"
#define redeclarationflg
#else
#define Int_numDataFrameVer_C
#endif
其中,XX.c为全局变量Int_numDataFrameVer_C所在的源文件标识。
在将获取到的目标全局变量添加至辅助文件中后,若仍存在未进行编译的源文件,则需要利用更新的辅助文件检测该未进行编译的源文件中是否存在重复定义的全局变量,从而继续从多个源文件中的未进行编译处理的源文件中选取新的目标源文件,以检测该新的目标源文件是否存在重复定义的全局变量。
在将获取到的目标全局变量添加至辅助文件中后,若多个源文件中不存在未进行编译的源文件,则对辅助文件进行编译以进一步检测是否存在重复定义的全局变量,提高全局变量重复定义检测的准确性,其具体过程包括:判断多个源文件中是否存在未进行编译处理的源文件。若不存在未进行编译处理的源文件,则对辅助文件进行编译处理。在对辅助文件进行编译处理的过程中,若辅助文件中存在相同的全局变量,则停止进行编译处理,并生成报警信息发送至报警装置。
在本实施例中,在确定工程文件包所包括的多个源文件中不存在未进行编译处理的源文件后,对辅助文件进行编译处理,在对辅助文件进行编译处理的过程中,若辅助文件中存在相同的全局变量,表示源文件中存在重复定义的全局变量,则停止对该辅助文件进行编译,并生成相应的报警信息发送至报警装置,保证全局变量重复定义的检测的准确性。
其中,对辅助文件进行编译处理的过程、停止进行编译处理的过程以及生成报警信息发送至报警装置的过程与图2实施例中的编译处理过程、停止进行编译处理过程以及生成报警信息发送至报警装置的过程类似,在此,不再对其进行赘述。
在实施例中,当对目标源文件编译成功后,需要将该目标源文件所定义的全局变量添加至辅助文件,实现辅助文件的更新,保证后续可以利用辅助文件检测未进行编译处理的源文件中是否存在重复定义的全局变量。
图5为本发明实施例提供的全局变量的检测装置的结构示意图。如图5所示,该全局变量的检测装置500包括:第一文件获取模块501、第二文件获取模块502、文件编译处理模块503和报警处理模块504。
其中,第一文件获取模块501,用于获取待编译的工程文件包,其中工程文件包包括多个源文件。
第二文件获取模块502,用于从多个源文件中选取目标源文件,并获取辅助文件,其中辅助文件包括多个源文件中的已经进行编译处理的源文件所定义的全局变量。
文件编译处理模块503,用于对目标源文件和辅助文件进行编译处理。
报警处理模块504,用于在对目标源文件和辅助文件进行编译处理的过程中,若目标源文件所定义的目标全局变量中存在与辅助文件中的全局变量相同的重复定义变量,则停止进行编译处理,并生成报警信息发送至报警装置。
在一种可能的设计中,装置还包括辅助文件更新模块。
辅助文件更新模块,用于在对目标源文件和辅助文件进行编译处理之后,获取目标文件,其中目标文件为对目标源文件进行编译处理后得到的文件。
根据目标文件,获取目标源文件所定义的目标全局变量。
将获取到的目标全局变量添加至辅助文件中,并继续从多个源文件中选取目标源文件。
在一种可能的设计中,辅助文件更新模块具体用于:对目标文件进行分析,得到目标文件对应的符号表。
若符号表中存在目标属性所对应的属性值为预设属性值的变量,则确定变量为目标全局变量。
在一种可能的设计中,辅助文件更新模块还用于:在将获取到的目标全局变量添加至辅助文件中之后,判断多个源文件中是否存在未进行编译处理的源文件。
若不存在未进行编译处理的源文件,则对辅助文件进行编译处理。
在对辅助文件进行编译处理的过程中,若辅助文件中存在相同的全局变量,则停止进行编译处理,并生成报警信息发送至报警装置。
在一种可能的设计中,文件编译处理模块具体用于:
获取编译配置脚本文件,根据编译配置脚本文件,对目标源文件和辅助文件进行编译处理。
本实施例提供的装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
图6为本发明实施例提供的终端设备的硬件结构示意图。如图6所示,本实施例的终端设备600包括:处理器601以及存储器602;其中
存储器602,用于存储计算机执行指令;
处理器601,用于执行存储器存储的计算机执行指令,以实现上述实施例中接收设备所执行的各个步骤。具体可以参见前述方法实施例中的相关描述。
可选地,存储器602既可以是独立的,也可以跟处理器601集成在一起。
当存储器602独立设置时,该页面加载设备还包括总线603,用于连接所述存储器和处理器。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上所述的全局变量的检测方法。
在本发明所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。上述模块成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本申请各个实施例所述方法的部分步骤。
应理解,上述处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application Specific Integrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。
总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于专用集成电路(Application Specific Integrated Circuits,简称:ASIC)中。当然,处理器和存储介质也可以作为分立组件存在于电子设备或主控设备中。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (6)
1.一种全局变量的检测方法,其特征在于,包括:
获取待编译的工程文件包,其中所述工程文件包包括多个源文件;
从所述多个源文件中选取目标源文件,并获取辅助文件,其中所述辅助文件包括所述多个源文件中的已经进行编译处理的源文件所定义的全局变量;
对所述目标源文件和所述辅助文件进行编译处理;
在对所述目标源文件和所述辅助文件进行编译处理的过程中,若所述目标源文件所定义的目标全局变量中存在与所述辅助文件中的全局变量相同的重复定义变量,则停止进行编译处理,并生成报警信息发送至报警装置;
在所述对所述目标源文件和所述辅助文件进行编译处理之后,还包括:
获取目标文件,其中所述目标文件为对所述目标源文件进行编译处理后得到的文件;
根据所述目标文件,获取所述目标源文件所定义的目标全局变量;
将获取到的目标全局变量添加至所述辅助文件中,并继续从所述多个源文件中选取目标源文件;
所述根据所述目标文件,获取所述目标源文件所定义的目标全局变量,包括:
对所述目标文件进行分析,得到所述目标文件对应的符号表;
若所述符号表中存在目标属性所对应的属性值为预设属性值的变量,则确定所述变量为所述目标全局变量。
2.根据权利要求1所述的方法,其特征在于,在所述将获取到的目标全局变量添加至所述辅助文件中之后,还包括:
判断所述多个源文件中是否存在未进行编译处理的源文件;
若不存在未进行编译处理的源文件,则对所述辅助文件进行编译处理;
在对所述辅助文件进行编译处理的过程中,若所述辅助文件中存在相同的全局变量,则停止进行编译处理,并生成报警信息发送至报警装置。
3.根据权利要求1所述的方法,其特征在于,所述对所述目标源文件和所述辅助文件进行编译处理,包括:
获取编译配置脚本文件,根据所述编译配置脚本文件,对所述目标源文件和所述辅助文件进行编译处理。
4.一种全局变量的检测装置,其特征在于,包括:
第一文件获取模块,用于获取待编译的工程文件包,其中所述工程文件包包括多个源文件;
第二文件获取模块,用于从所述多个源文件中选取目标源文件,并获取辅助文件,其中所述辅助文件包括所述多个源文件中的已经进行编译处理的源文件所定义的全局变量;
文件编译处理模块,用于对所述目标源文件和所述辅助文件进行编译处理;
报警处理模块,用于在对所述目标源文件和所述辅助文件进行编译处理的过程中,若所述目标源文件所定义的目标全局变量中存在与所述辅助文件中的全局变量相同的重复定义变量,则停止进行编译处理,并生成报警信息发送至报警装置;
所述装置还包括辅助文件更新模块;
所述辅助文件更新模块,用于在所述对所述目标源文件和所述辅助文件进行编译处理之后,获取目标文件,其中所述目标文件为对所述目标源文件进行编译处理后得到的文件;
根据所述目标文件,获取所述目标源文件所定义的目标全局变量;
将获取到的目标全局变量添加至所述辅助文件中,并继续从所述多个源文件中选取目标源文件;
所述辅助文件更新模块还用于:对所述目标文件进行分析,得到所述目标文件对应的符号表;
若所述符号表中存在目标属性所对应的属性值为预设属性值的变量,则确定所述变量为所述目标全局变量。
5.一种终端设备,其特征在于,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如权利要求1至3任一项所述的全局变量的检测方法。
6.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如权利要求1至3任一项所述的全局变量的检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910944880.0A CN110688320B (zh) | 2019-09-30 | 2019-09-30 | 全局变量的检测方法、装置及终端设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910944880.0A CN110688320B (zh) | 2019-09-30 | 2019-09-30 | 全局变量的检测方法、装置及终端设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110688320A CN110688320A (zh) | 2020-01-14 |
CN110688320B true CN110688320B (zh) | 2023-05-23 |
Family
ID=69111626
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910944880.0A Active CN110688320B (zh) | 2019-09-30 | 2019-09-30 | 全局变量的检测方法、装置及终端设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110688320B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112527660B (zh) * | 2020-12-17 | 2022-11-22 | 展讯通信(上海)有限公司 | 代码的静态检测方法和装置 |
CN113741411B (zh) * | 2021-11-08 | 2022-02-01 | 西安热工研究院有限公司 | 一种分散控制系统全局变量点产物文件生成方法和系统 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11272475A (ja) * | 1998-03-20 | 1999-10-08 | Nec Corp | 非リエントラントプログラムの自動リエントラント化方法及びシステム |
WO1999061970A2 (en) * | 1998-05-29 | 1999-12-02 | Sun Microsystems, Inc. | Global register systems, methods, and computer program products |
JP2000010792A (ja) * | 1998-05-29 | 2000-01-14 | Sun Microsyst Inc | グロ―バルレジスタシステム、方法及びコンピュ―タプログラム製品 |
US6026242A (en) * | 1998-05-29 | 2000-02-15 | Sun Microsystems, Inc. | Methods, computer program products, and apparatus for initializing global registers |
CN1790268A (zh) * | 2004-12-14 | 2006-06-21 | 艾克斯麦提克方案私人有限公司 | 通过散列技术的编译时间链接 |
JP2009176178A (ja) * | 2008-01-28 | 2009-08-06 | Meidensha Corp | Plcのグローバル変数定義方式 |
CN102880461A (zh) * | 2012-08-29 | 2013-01-16 | 华为技术有限公司 | 一种编译链接方法及装置 |
CN102902568A (zh) * | 2011-07-27 | 2013-01-30 | 国际商业机器公司 | 一种用于处理应用程序的内容表访问溢出的方法和系统 |
CN105335137A (zh) * | 2014-07-23 | 2016-02-17 | 国际商业机器公司 | 用于处理源文件的方法和装置 |
CN106407243A (zh) * | 2016-04-19 | 2017-02-15 | 北京新能源汽车股份有限公司 | 工程文件的容量信息处理方法及装置 |
CN107992307A (zh) * | 2017-12-11 | 2018-05-04 | 北京奇虎科技有限公司 | 一种函数编译方法及装置 |
CN110286934A (zh) * | 2019-06-30 | 2019-09-27 | 潍柴动力股份有限公司 | 一种静态代码的检查方法及装置 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6298479B1 (en) * | 1998-05-29 | 2001-10-02 | Sun Microsystems, Inc. | Method and system for compiling and linking source files |
CN103257919B (zh) * | 2012-02-21 | 2015-05-13 | 腾讯科技(深圳)有限公司 | 脚本程序检查方法和装置 |
CN104252599B (zh) * | 2013-06-28 | 2019-07-05 | 深圳市腾讯计算机系统有限公司 | 一种检测跨站脚本漏洞的方法及装置 |
CN104881611B (zh) * | 2014-02-28 | 2017-11-24 | 国际商业机器公司 | 保护软件产品中的敏感数据的方法和装置 |
US9213531B2 (en) * | 2014-05-01 | 2015-12-15 | Google Inc. | Methods to eliminate extra memory loads while accessing global variables in position independent code |
KR101668564B1 (ko) * | 2015-09-02 | 2016-10-21 | 충북대학교 산학협력단 | 소프트웨어 코드 리팩토링 방법 및 이를 기록한 기록매체 |
US9823913B2 (en) * | 2015-12-03 | 2017-11-21 | International Business Machines Corporation | Method of adding local variables in place of global in JavaScript |
JP6845429B2 (ja) * | 2017-03-15 | 2021-03-17 | 富士通株式会社 | コンパイラプログラム、情報処理装置およびコンパイル方法 |
CN108206972B (zh) * | 2018-01-02 | 2019-10-25 | 武汉斗鱼网络科技有限公司 | 直播间人气处理方法、装置、服务器及存储介质 |
CN109902001B (zh) * | 2019-02-12 | 2022-06-07 | 科华恒盛股份有限公司 | 对未初始化变量的检测方法及终端设备 |
CN110058861B (zh) * | 2019-04-19 | 2020-11-10 | 同盾控股有限公司 | 源码处理方法及装置、存储介质、电子设备 |
-
2019
- 2019-09-30 CN CN201910944880.0A patent/CN110688320B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11272475A (ja) * | 1998-03-20 | 1999-10-08 | Nec Corp | 非リエントラントプログラムの自動リエントラント化方法及びシステム |
WO1999061970A2 (en) * | 1998-05-29 | 1999-12-02 | Sun Microsystems, Inc. | Global register systems, methods, and computer program products |
JP2000010792A (ja) * | 1998-05-29 | 2000-01-14 | Sun Microsyst Inc | グロ―バルレジスタシステム、方法及びコンピュ―タプログラム製品 |
US6026242A (en) * | 1998-05-29 | 2000-02-15 | Sun Microsystems, Inc. | Methods, computer program products, and apparatus for initializing global registers |
CN1790268A (zh) * | 2004-12-14 | 2006-06-21 | 艾克斯麦提克方案私人有限公司 | 通过散列技术的编译时间链接 |
JP2009176178A (ja) * | 2008-01-28 | 2009-08-06 | Meidensha Corp | Plcのグローバル変数定義方式 |
CN102902568A (zh) * | 2011-07-27 | 2013-01-30 | 国际商业机器公司 | 一种用于处理应用程序的内容表访问溢出的方法和系统 |
CN102880461A (zh) * | 2012-08-29 | 2013-01-16 | 华为技术有限公司 | 一种编译链接方法及装置 |
CN105335137A (zh) * | 2014-07-23 | 2016-02-17 | 国际商业机器公司 | 用于处理源文件的方法和装置 |
CN106407243A (zh) * | 2016-04-19 | 2017-02-15 | 北京新能源汽车股份有限公司 | 工程文件的容量信息处理方法及装置 |
CN107992307A (zh) * | 2017-12-11 | 2018-05-04 | 北京奇虎科技有限公司 | 一种函数编译方法及装置 |
CN110286934A (zh) * | 2019-06-30 | 2019-09-27 | 潍柴动力股份有限公司 | 一种静态代码的检查方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110688320A (zh) | 2020-01-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109976761B (zh) | 软件开发工具包的生成方法、装置及终端设备 | |
US20190324772A1 (en) | Method and device for processing smart contracts | |
US9201757B2 (en) | Offline type checking in programming languages | |
US11036491B1 (en) | Identifying and resolving firmware component dependencies | |
KR20090017598A (ko) | 소프트웨어를 분석하기 위한 방법 및 시스템 | |
CN110688320B (zh) | 全局变量的检测方法、装置及终端设备 | |
US10747514B2 (en) | Reduced save and restore instructions for call-clobbered registers | |
US20150339219A1 (en) | Resilient mock object creation for unit testing | |
US8769498B2 (en) | Warning of register and storage area assignment errors | |
CN114116505A (zh) | 代码测试方法及装置 | |
CN110688198B (zh) | 系统调用方法、装置和电子设备 | |
CN112882694A (zh) | 一种程序编译方法、装置、电子设备及可读存储介质 | |
CN111625225A (zh) | 一种程序指定数据输出方法和装置 | |
CN110765008A (zh) | 一种数据处理方法及装置 | |
CN114356290A (zh) | 一种数据处理方法、装置及计算机可读存储介质 | |
CN112068895B (zh) | 代码配置方法、装置、视频播放设备及存储介质 | |
CN110275710B (zh) | 一种Java本地接口一致性检查方法及系统、存储介质及终端 | |
US10671397B2 (en) | Reduced save and restore instructions for call-clobbered registers | |
CN112416444A (zh) | 一种板卡切换控制方法、装置、设备及介质 | |
CN107391223B (zh) | 一种文件处理方法及装置 | |
CN112527660B (zh) | 代码的静态检测方法和装置 | |
CN117407048B (zh) | 一种插件化数据处理软件的流程配置方法及系统 | |
CN112162776B (zh) | 依赖关系获取方法及装置 | |
CN113778505A (zh) | 组件处理方法及装置 | |
CN115168911A (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 |