CN102722442A - 一种宏状态自动分析方法及其装置 - Google Patents
一种宏状态自动分析方法及其装置 Download PDFInfo
- Publication number
- CN102722442A CN102722442A CN2012101932574A CN201210193257A CN102722442A CN 102722442 A CN102722442 A CN 102722442A CN 2012101932574 A CN2012101932574 A CN 2012101932574A CN 201210193257 A CN201210193257 A CN 201210193257A CN 102722442 A CN102722442 A CN 102722442A
- Authority
- CN
- China
- Prior art keywords
- grand
- macro
- information
- module
- obtains
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
本发明实施例提供了一种宏状态自动分析方法,通过分析脚本文件,并收集脚本文件中的宏开关信息;以及通过分析源代码,并收集源代码中的宏定义信息,再根据收集的该宏开关信息和宏定义信息分析各个宏的实际状态,并存储宏的实际状态,从而实现宏状态的自动分析,不需要编译验证,也不需要搜索后再进行筛选,进而提高了效率,也提高了可靠性。相应地,本发明实施例还提供了一种对应的宏状态自动分析装置。
Description
技术领域
本发明涉及嵌入式领域,尤其涉及一种宏状态自动分析方法及其装置。
背景技术
随着科技的发展,电子设备广泛应用到人们的日常生活中。电子产品的功能离不开软件的开发,如今嵌入式开发是最方便的方式。在嵌入式开发过程中,需要广泛的使用到宏,其与编译命令、配置环境等相关。由于宏既可以定义在源代码中,如*.c,*.cpp,*.h文件中,也可以定义在makefile,python脚本中,如*.mk,*.scons。因此,在查看代码时,需要查看关联的文件才能判断宏是否定义,从而需要花很长时间。
目前,代码查看工具为Source Insight。Source Insight是一种支持多种开发语言(java,c ,c++,x86汇编语言程序等等)的编辑器,其查找、定位、彩色显示等功能的强大。由于其内置对C/C++,Java和x86汇编语言程序的解析,并且有自己的动态数据库,因此,其不仅能分析源代码,并在工程师工作的同时动态维护它自己的符号数据库,且自动显示有用的上下文信息,包括有关的函数,宏,参数等。查看代码时,只要在源代码中(*.C,*.Cpp,*.h)定义了宏,在Source Insight中就显示为红色,表示宏已经定义,不管其前提是否有条件;如果是在汇编里或make file等脚本里定义的宏,由于Source Insight不能够解析,因此,显示为黑色,表示宏未定义。
但是在实际操作过程中,则存在两个问题:
(1)若显示为红色的宏的上级条件宏没有定义,则该宏实际上也没有定义;
(2)若显示为黑色的宏是定义在汇编或make file等脚本里,则该宏实际上已经定义。
因此,使用当前的Source Insight工具,并不能够得到宏的真实状态。
一般嵌入式开发工程师在碰到上述问题时,只有两种方法处理:
1、故意写错误语法代码,编译验证;
2、使用软件搜索功能搜索,却不能使用全字符匹配,在搜完了之后,需要再做筛选。
这两种方法需要花大量的时间去分析,判断宏是否开启,效率较低,可靠性也较低。
发明内容
本发明实施例所要解决的技术问题在于,提供一种宏状态自动分析装置,能够更有效地得到宏的真实状态,且可靠性较高。
为了解决上述技术问题,本发明实施例提供了一种宏状态自动分析方法,包括:
分析脚本文件,并收集所述脚本文件中的宏的开关信息;
分析源代码,并收集所述源代码中的宏定义信息;
根据收集的所述宏的开关信息和所述宏定义信息,分析各个宏的实际状态;
保存分析得到的宏的实际状态。
相应地,本发明还提供了一种宏状态自动分析装置,包括:
脚本分析模块,用于分析脚本文件,得到所述脚本文件中的宏的开关信息;
源代码分析模块,用于分析源代码,得到所述源代码中的宏定义信息;
信息收集模块,用于收集所述脚本分析模块分析得到的宏的开关信息,以及所述源代码分析模块分析得到的所述宏定义信息;
状态分析模块,用于根据所述信息收集模块收集的所述宏的开关信息和所述宏定义信息,分析各个宏的实际状态;
存储模块,用于存储所述状态分析模块分析得到的宏的实际状态。
实施本发明实施例,具有如下有益效果:
本发明实施例提供的一种宏状态自动分析方法及其装置,通过分析脚本文件得到脚本中宏的开关信息,同时通过分析源代码,得到源代码中的宏定义信息,并收集这两者,再根据收集的宏开关信息和宏定义信息来分析各个宏的实际状态,得到宏的实际状态,并存储,从而实现宏状态自动分析,不需要编译验证,也不需要搜索后再进行筛选,进而提高了效率,也提高了可靠性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明的一种宏状态自动分析方法的一实施例的流程图;
图2是本发明的一种宏状态自动分析方法的又一实施例的流程图;
图3是本发明的一种宏状态自动分析装置的一实施例的功能模块图;
图4是本发明的一种宏状态自动分析状态的又一实施例的功能模块图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,为本发明的一种宏状态自动分析方法的一种实施例的流程图。具体实施时,本实施例的宏状态自动分析方法的实施过程如下:
S11,分析脚本文件,并收集该脚本文件中的宏开关信息。具体实施时,该步骤S11的具体实施过程如下:解析相关脚本,得到预定义宏信息,该预定义宏信息包括宏名,以及各个宏之间的依赖关系等信息;根据各个宏之间的依赖关系、宏名等信息,分析得到宏的开关信息,并收集宏的开关信息。在嵌入式开发中,可由make,python等通过解析相关脚本,得到预定义宏信息等等。在一具体实施例中:
……
#ifdef 宏A
#define 宏B
#eldef 宏C
#endif
……
SourceInsight工具分析相关脚本文件得到预定义宏B和预定义宏C均依赖宏A,根据该依赖关系得知:如果定义了宏A,则预定义宏B的开关信息为开,预定义宏C的开关信息为关;如果未定义宏A,则预定义宏C的开关信息为开,预定义宏B的开关信息为关。
在另一具体实施例中,执行该步骤S11之前,在SourceInsight工具中需要行编译环境的配置,即在SourceInsight工具中进行*.cmd文件或*.bat文件等脚本文件的设置,其主要包括编译工具的路径,产品的宏开关定义等。由于cmd或bat是整个项目编译的起点,也是后面脚本关联的起点,因此,在编译环境的配置过程中,还需要查找这些脚本文件中的宏定义,并记录查找到的宏定义,同时表明其控制范围,从而便于分析脚本文件时得到正确的宏的开关信息。具体实施时,由于*.cmd文件或*.bat文件等脚本文件中的宏定义是从编译命令的输入开始进行宏定义的,因此,可直接通过cmd命令语法来查找脚本文件中的宏定义。一个定义的宏,有可见区域,如在一个头文件A中定义一个宏,在一个源文件B中使用这个宏,如果B文件没有直接或间接包含这个头文件A,那么对于B来说,这个宏是不可见的。本实施例中,查找到的Cmd、Bat的宏定义,为整个项目可见,级别最高。
S12,分析源代码,并收集该源代码中的宏定义信息,该宏定义信息包括:该宏是否定义在源代码中,以及该宏是否存在上级条件宏等。一般宏定义在头文件中,也有一些定义在源文件中,因此,需要通过分析源代码文件来收集该源代码中的宏定义信息。在一具体实施中,SourceInsight工具分析源代码,即在源代码中搜索各个宏,并得到宏定义信息,再将该宏定义信息收集起来。
S13,根据所收集的宏开关信息和宏定义信息,分析各个宏的实际状态。具体实施时,由于各种头文件的包含关系和嵌入关系,因此,只需要根据步骤S11中分析得到的宏开关信息和步骤S12中分析得到的宏定义信息,对当前状态显示为未定义的宏进行分析即可,从而得到该宏的实际状态。在一具体实施例中,由于各种头文件的包含关系和嵌入关系,且在SourceInsight工具基础上,只需要对SourceInsight工具中当前状态颜色显示为黑色的宏进行分析即可,从而分析出该宏的实际状态;同理,若红色部分的上级条件宏为黑色,当经过步骤S13分析即可得到该呈黑色的上级条件宏的实际状态,从而得到呈红色的宏的实际状态。
本实施例中的宏的状态包括:该宏已经定义;该宏还未定义。
S14,存储分析得到的宏的实际状态。具体实施时,将分析的宏的实际状态,加到头文件中保存,从而使得sourceinsight这样的工具识别,便于sourceinsight工具后续根据该头文件中的各个宏的实际状态重新的同步,进而更新原来的宏的颜色,并正确显示。
本实施例中,当所有处理后,需要同步更新所有代码,作最后处理,因此,如图2所示,本实施例的宏状态自动分析方法还可包括步骤:
S15,根据保存得到的宏的实际状态,更新源代码中宏的状态。具体实施时,若SourceInsight工具中,当前状态显示为黑色的宏的实际状态为已经定义,则将源代码中该宏的状态更新为已经定义,即在SourceInsight工具中将颜色由黑色更新为红色;同理,若当前状态显示为红色的宏的实际状态为未定义(其上级条件宏未定义),则将源代码中该宏的状态更新为未定义,即在SourceInsight工具中将颜色由红色更新为黑色。
本实施例的宏状态自动分析方法,通过分析脚本文件,并收集脚本中宏的开关信息;以及通过分析源代码,并收集源代码中的宏定义信息,再根据该宏开关信息和宏定义信息分析各个宏的实际状态,即由cmd到make到源代码,这样一级一级解析下去,从而得到哪些宏是定义的,哪些未定义,实现了宏状态的自动分析,不需要编译验证,也不需要搜索后再进行筛选,进而提高了效率,也提高了可靠性。
为了更高的可靠性,在另一具体实施例中,该宏状态自动分析方法除了包括上述实施例的步骤S11至S14之外,本实施例的宏状态自动分析方法,在执行步骤S11之前还可包括步骤:
获取项目自定义的参数,并解析输入参数,将其带入makefile文件。具体实施时,由于cmd是整个项目编译的起点,通常需要自定义cmd或bat,而当一套代码对应多个项目时,则需要定义对应的产品、功能、特性宏等,这就需要通过简单的cmd带参数方式来解决,因此,项目自定义的参数也可能影响产品的功能开关,例如自定义了gosomo.make:
……
if /i "%GOSO_PROJECT_NAME%"=="ua6300" goto ua6300
if /i "%GOSO_PROJECT_NAME%"=="ual600" goto ual600
goto NoArg
……
其中,gosomo.make 可输入参数 ua6300、ual600等。如果输入ual600,则对应ual600的项目,定义ual600的项目宏;如果输入ua6300,则对应ua6300的项目宏。若要定义对应ua6300的项目宏,则通过cmd.exe 输入命令: gosomo.make ua6300即可。
相应地,本发明实施例还提供了一种宏状态自动分析装置,下面将结合附图对其进行详细的说明。
参见图3,为本发明的一种宏状态自动分析装置的一种实施例的功能模块图。具体实施时,本实施例的宏状态自动分析装置的实施过程如下:
脚本分析模块11,用于分析脚本文件,得到脚本文件中的宏开关信息;具体实施时,该脚本分析模块11具体包括:
解析子模块,用于解析相关脚本,得到预定义宏信息;该预定义宏信息包括该预定义宏名,以及各个预定义宏之间的依赖关系等信息;
分析子模块,用于根据该解析子模块解析得到的预定义宏信息,分析得到该宏的开关信息;
源代码分析模块12,用于分析源代码,得到源代码中的宏定义信息;该宏定义信息包括该宏是否定义在源代码中,以及该宏是否存在上级条件宏等;
信息收集模块13,用于收集脚本分析模块11分析得到的宏的开关信息,以及源代码分析模块12分析得到的宏定义信息;
状态分析模块14,用于根据信息收集模块13收集到的宏的开关信息和宏定义信息,分析得到各个宏的实际状态;具体实施时,该状态分析模块14具体包括:
选择子模块,用于从各个宏当中选择当前状态显示为未定义的宏;
分析子模块,用于根据脚本分析模块11的分析子模块分析得到的宏的开关信息,以及源代码分析模块12分析得到的宏定义信息,对选择子模块所选择的宏的实际状态进行分析,并得到宏的实际状态;
存储模块15,用于存储状态分析模块14分析得到的宏的实际状态。
当处理完成之后,编译代码之前,还需要对所有的代码进行更新,因此,如图4所示,本实施例的宏状态自动分析装置还可包括:
更新模块16,用于根据存储模块15存储的宏的实际状态,更新源代码中宏的状态。
在另一具体实施例中,宏状态自动分析装置包括上述实施例中的脚本分析模块11至存储模块15,不同的是本实施例的装置还包括:
配置模块,用于配置编译环境;
查找模块,用于在配置编译环境过程中,查找宏定义,并记录查找到的宏定义,同时表明其控制范围。
在又一具体实施例中,宏状态自动分析装置包括上述实施例中的脚本分析模块11至配置模块、查找模块,不同的是本实施例的装置还包括:
项目参数获取模块,用于获取待分析项目自定义的参数;
输入模块,用于用户输入参数;
参数解析模块,用于结合所获取的待分析项目自定义参数对用户所输入的参数进行解析,并将其带入makefile文件。
本实施例的宏状态自动分析装置,通过脚本分析模块来分析脚本文件,以及源代码分析模块来分析源代码,并采用信息收集模块来收集脚本中宏的开关信息和源代码中的宏定义信息,再根据收集的宏的开关信息和宏定义信息分析各个宏的实际状态,即由cmd到make到源代码,这样一级一级解析下去,从而得到哪些宏是定义的,哪些未定义,实现了宏状态的自动分析,不需要编译验证,也不需要搜索后再进行筛选,进而提高了效率,也提高了可靠性。
本发明实施例是以SourceInsight工具为例来进行详细的说明,当然本发明实施例也可应用与其他编译工具。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。
Claims (8)
1.一种宏状态自动分析方法,其特征在于,包括:
分析脚本文件,并收集所述脚本文件中的宏的开关信息;
分析源代码,并收集所述源代码中的宏定义信息;
根据收集的所述宏的开关信息和所述宏定义信息,分析各个宏的实际状态;
保存分析得到的宏的实际状态。
2.如权利要求1所述的宏状态自动分析方法,其特征在于,所述分析脚本文件,并收集所述脚本文件中的宏开关信息的步骤,具体包括:
解析相关脚本,得到预定义宏信息;
根据所述预定义宏信息,分析得到各个宏的开关信息,并收集各个宏的开关信息。
3.如权利要求1所述的宏状态自动分析方法,其特征在于,所述根据所收集的各个宏的开关信息和所述宏定义信息,分析得到各个宏的实际状态的步骤,具体为:
根据各个宏的开关信息和宏定义信息,对当前状态显示为未定义的宏进行分析,并得到所述当前状态显示为未定义的宏的实际状态。
4.如权利要求1至3中任意一项所述的宏状态自动分析方法,其特征在于,还包括:
根据保存的宏的实际状态,更新源代码中的宏的状态。
5.一种宏状态自动分析装置,其特征在于,包括:
脚本分析模块,用于分析脚本文件,得到所述脚本文件中的宏的开关信息;
源代码分析模块,用于分析源代码,得到所述源代码中的宏定义信息;
信息收集模块,用于收集所述脚本分析模块分析得到的所述宏的开关信息,以及所述源代码分析模块分析得到的所述宏定义信息;
状态分析模块,用于根据所述信息收集模块收集的所述宏的开关信息和所述宏定义信息,分析各个宏的实际状态;
存储模块,用于存储所述状态分析模块分析得到的宏的实际状态。
6.如权利要求5所述的宏状态自动分析装置,其特征在于,所述脚本分析模块包括:
解析子模块,用于解析相关脚本,得到预定义宏信息;
分析子模块,用于根据所述解析子模块解析得到的预定义宏信息,分析得到宏的开关信息。
7.如权利要求5所述的宏状态自动分析装置,其特征在于,所述状态分析模块包括:
选择子模块,用于从各个宏当中选择当前状态显示为未定义的宏;
分析子模块,用于根据所述宏的开关信息和所述宏定义信息,对所述选择子模块所选择的宏的实际状态进行分析,并得到该宏的实际状态。
8.如权利要求5至7中任意一项所述的宏状态自动分析装置,其特征在于,还包括:
更新子模块,用于根据存储模块存储的宏的实际状态,更新源代码中宏的状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012101932574A CN102722442A (zh) | 2012-06-13 | 2012-06-13 | 一种宏状态自动分析方法及其装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012101932574A CN102722442A (zh) | 2012-06-13 | 2012-06-13 | 一种宏状态自动分析方法及其装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102722442A true CN102722442A (zh) | 2012-10-10 |
Family
ID=46948216
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012101932574A Pending CN102722442A (zh) | 2012-06-13 | 2012-06-13 | 一种宏状态自动分析方法及其装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102722442A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112631852A (zh) * | 2020-12-22 | 2021-04-09 | 海光信息技术股份有限公司 | 宏检查方法、装置、电子设备和计算机可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1812285A (zh) * | 2005-01-30 | 2006-08-02 | 中兴通讯股份有限公司 | 一种宏分集状态下的下行链路功率平衡方法 |
US20070044012A1 (en) * | 2005-08-19 | 2007-02-22 | Microsoft Corporation | Encoding of markup language data |
CN101283335A (zh) * | 2005-10-07 | 2008-10-08 | 微软公司 | 闪存管理 |
-
2012
- 2012-06-13 CN CN2012101932574A patent/CN102722442A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1812285A (zh) * | 2005-01-30 | 2006-08-02 | 中兴通讯股份有限公司 | 一种宏分集状态下的下行链路功率平衡方法 |
US20070044012A1 (en) * | 2005-08-19 | 2007-02-22 | Microsoft Corporation | Encoding of markup language data |
CN101283335A (zh) * | 2005-10-07 | 2008-10-08 | 微软公司 | 闪存管理 |
Non-Patent Citations (2)
Title |
---|
守夜者: "它被定义了,但它却被定义为未定义-有趣的宏定义", 《HTTP://WWW.CNBLOGS.COM/NIGHTWATCHER/ARCHIVE/2011/03/13/1982610.HTML》, 13 March 2011 (2011-03-13), pages 1 - 2 * |
蒋辉等: "一种高效的Verilog预处理工具的实现", 《江南大学学报(自然科学版)》, vol. 7, no. 5, 31 October 2008 (2008-10-31), pages 573 - 578 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112631852A (zh) * | 2020-12-22 | 2021-04-09 | 海光信息技术股份有限公司 | 宏检查方法、装置、电子设备和计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Krüger et al. | Where is my feature and what is it about? a case study on recovering feature facets | |
US20150363197A1 (en) | Systems And Methods For Software Analytics | |
Canfora et al. | Achievements and challenges in software reverse engineering | |
US20160357519A1 (en) | Natural Language Engine for Coding and Debugging | |
US11579856B2 (en) | Multi-chip compatible compiling method and device | |
CN104077140A (zh) | 用于持续集成的自动化编译方法和编译装置 | |
Obbink et al. | An extensible approach for taming the challenges of JavaScript dead code elimination | |
US10133871B1 (en) | Method and system for identifying functional attributes that change the intended operation of a compiled binary extracted from a target system | |
CN105512021A (zh) | 用于软件测试的Diff分析方法及装置 | |
US20060101392A1 (en) | Strongly-typed UI automation model generator | |
CN105512044A (zh) | 用于关键字驱动测试的对象库的更新方法及系统 | |
CN111459499A (zh) | 程序编译方法及装置、计算机存储介质、电子设备 | |
CN107015904B (zh) | 堆栈的保护方法及装置 | |
US8302084B2 (en) | Using compiler commentary for configuring an integrated development environment | |
CN102722442A (zh) | 一种宏状态自动分析方法及其装置 | |
CN102799528A (zh) | 一种用于电路板级测试的脚本调试方法、装置及其系统 | |
Grüner et al. | Demonstration of a toolchain for feature extraction, analysis and visualization on an industrial case study | |
CN115705250A (zh) | 监测堆栈使用量以优化程序 | |
CN103699418A (zh) | 一种检索外部sd卡的方法及装置 | |
CN102866893B (zh) | 基于中间语言il的遗产软件结构析取方法 | |
Dajsuren et al. | Modernizing legacy software using a System Grokking technology | |
Islam et al. | PyMigBench and PyMigTax: A benchmark and taxonomy for Python library migration | |
CN110083362A (zh) | 文件处理方法、系统、可读存储介质及设备 | |
CN110674024A (zh) | 电子设备集成测试系统及其方法 | |
Couto et al. | MapIt: A model based pattern recovery tool |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20121010 |