首页> 中国专利> 用于静态分析的多编译器混合编译的监控方法及装置

用于静态分析的多编译器混合编译的监控方法及装置

摘要

本发明实施例公开了一种用于静态分析的多编译混合编译的监控方法及装置。所述方法包括:获取待分析程序对应的程序编译日志;根据所述程序编译日志,识别得到编译命令;根据所述编译命令,设计通用的配置文件模型,并将所述程序编译日志映射至所述配置文件模型,得到转换的编译参数;根据编译器类型提取所述待分析程序对应的编译信息。本发明实施例可以实现对多编译器混合编译的项目进行可配置的编译监控。

著录项

说明书

技术领域

本发明涉及静态分析的编译监控技术领域,特别是一种用于静态分析的多编译器混合编译的监控方法及装置。

背景技术

静态分析是软件开发过程中的重要步骤,可以在不运行程序的情况下,发现程序中可能存在的问题。

对一个软件项目进行静态分析,需要根据项目的实际编译情况进行配置,如项目编译过程中有效的源文件、引用的头文件以及宏等。项目越复杂,需要配置的内容就越繁琐,仅通过人工配置的方式,效率低并且容易出错。

编译监控是指监控项目的编译过程,从而自动获取项目编译的选项和配置的一种技术。编译监控技术是解决复杂项目静态分析时人工配置困难的有效方案,目前已有相关方面的专利,比如《一种基于makefile文件依赖的源码分析方法》(专利号CN106202450A)和《一种基于makefile的代码静态分析方法和装置》(专利号CN107832059A)。这两个专利都是通过编译器对makefile文件处理生成的中间文件进行分析,提取源文件依赖关系,但是没有对不同编译器所编译的源文件做出区分,没有提取编译器内建头文件与宏的信息。因此不能提供多编译器混合编译项目的解决方案。

缺少完整的编译参数与环境配置会使静态分析的预编译过程出现错误,导致静态分析不能正常进行或结果不准确。如何对多编译器混合编译的项目进行可配置的编译监控,仍然需要更加系统的解决方案。

发明内容

本发明解决的技术问题是:克服现有技术的不足,提供了一种用于静态分析的多编译器混合编译的监控方法及装置。

为了解决上述技术问题,本发明实施例提供了一种用于静态分析的多编译器混合编译的监控方法,包括:

获取待分析程序对应的程序编译日志;

根据所述程序编译日志,识别得到编译命令;

根据所述编译命令,设计通用的配置文件模型,并将所述程序编译日志映射至所述配置文件模型,得到转换的编译参数;

根据编译器类型提取所述待分析程序对应的编译信息。

可选地,所述获取待分析程序对应的程序编译日志,包括:

获取所述待分析程序;

调用编译器对所述待分析程序进行编译处理,并获取由所述编译器输出的所述程序编译日志;

所述程序编译日志包括编译参数。

可选地,所述根据所述程序编译日志,识别得到编译命令,包括:

设计可识别的通用的编译器种类扩展模型;

根据所述编译器种类扩展模型和配置文件,扩展编译器平台种类;

通过所述配置文件中支持的编译器名,识别得到所述程序编译日志中的编译命令。

可选地,所述配置文件模型为参数转换模型,所述根据所述编译命令,设计通用的配置文件模型,并将所述程序编译日志映射至所述配置文件模型,得到转换的编译参数,包括:

获取所述配置文件模型中所需变换的编译参数与变换后参数之间的映射关系;

根据所述映射关系,将相同属性的参数转换为统一的参数;所述相同属性的参数包括:不同编译器平台上指定宏的参数、指定头文件的参数和取消内建宏的参数;

根据所述映射关系,将部分参数变换为编译器可识别的参数;所述部分参数包括:链接动态库的参数、开启异常捕获模式的参数和启用同步异常处理的参数;

根据所述映射关系,过滤所述编译器平台上的方言参数;所述方言参数包括:对芯片的附加组件发出的伪指令参数、处理器名称的参数和助记符汇编参数。

可选地,所述根据编译器类型提取所述待分析程序对应的编译信息,包括:

根据所述转换的编译参数对所述待分析程序按照编译器进行分组,得到分组结果;

根据所述分组结果,提取每种编译器的编译信息;

根据所述编译信息,生成每种编译器对应的配置文件。

为了解决上述技术问题,本发明实施例还提供了一种用于静态分析的多编译器混合编译的监控装置,包括:

程序编译日志获取模块,用于获取待分析程序对应的程序编译日志;

编译命令识别模块,用于根据所述程序编译日志,识别得到编译命令;

转换编译参数获取模块,用于根据所述编译命令,设计通用的配置文件模型,并将所述程序编译日志映射至所述配置文件模型,得到转换的编译参数;

编译信息提取模块,用于根据编译器类型提取所述待分析程序对应的编译信息。

可选地,所述程序编译日志获取模块包括:

待分析程序获取单元,用于获取所述待分析程序;

程序编译日志获取单元,用于调用编译器对所述待分析程序进行编译处理,并获取由所述编译器输出的所述程序编译日志;

所述程序编译日志包括编译参数。

可选地,所述编译命令识别模块包括:

编译器模型设计单元,用于设计可识别的通用的编译器种类扩展模型;

编译器平台种类扩展单元,用于根据所述编译器种类扩展模型和配置文件,扩展编译器平台种类;

编译命令识别单元,用于通过所述配置文件中支持的编译器名,识别得到所述程序编译日志中的编译命令。

可选地,所述配置文件模型为参数转换模型,所述转换编译参数获取模块包括:

映射关系获取单元,用于获取所述配置文件模型中所需变换的编译参数与变换后参数之间的映射关系;

相同属性参数转换单元,用于根据所述映射关系,将相同属性的参数转换为统一的参数;所述相同属性的参数包括:不同编译器平台上指定宏的参数、指定头文件的参数和取消内建宏的参数;

部分参数变换单元,用于根据所述映射关系,将部分参数变换为编译器可识别的参数;所述部分参数包括:链接动态库的参数、开启异常捕获模式的参数和启用同步异常处理的参数;

方言参数过滤单元,用于根据所述映射关系,过滤所述编译器平台上的方言参数;所述方言参数包括:对芯片的附加组件发出的伪指令参数、处理器名称的参数和助记符汇编参数。

可选地,所述编译信息提取模块包括:

分组结果获取单元,用于根据所述转换的编译参数对所述待分析程序按照编译器进行分组,得到分组结果;

编译信息提取单元,用于根据所述分组结果,提取每种编译器的编译信息;

配置文件生成单元,用于根据所述编译信息,生成每种编译器对应的配置文件。

本发明与现有技术相比的优点在于:

本发明实施例提供了一种用于静态分析的多编译器混合编译的监控方法及装置,通过获取待分析程序对应的程序编译日志,根据程序编译日志,识别得到编译命令,根据编译命令,设计通用的配置文件模型,并将程序编译日志映射至配置文件模型,得到转换的编译参数,根据编译器类型提取待分析程序对应的编译信息。本发明实施例针对多编译器混合编译的项目,通过编译监控的方式,对监控后的日志设计了一种通过分类提取源文件,补充编译参数重新预编译获取依赖信息的方法,形成适用于多编译器全项目的编译配置,并应用于全项目的静态分析,从而可以实现对多编译器混合编译的项目进行可配置的编译监控。

附图说明

图1为本发明实施例提供的一种用于静态分析的多编译器混合编译的监控方法的步骤流程图;

图2为本发明实施例提供的一种用于静态分析的多编译器混合编译的监控装置的结构示意图。

具体实施方式

实施例一

参照图1,示出了本发明实施例提供的一种用于静态分析的多编译混合编译的监控方法的步骤流程图,如图1所示,该用于静态分析的多编译器混合编译的监控方法具体可以包括如下步骤:

步骤101:获取待分析程序对应的程序编译日志。

本发明实施例可以应用于对多编译器混合编译的项目进行可配置的编译监控的场景中。

待分析程序是指需要进行监控的多编译器混合编译的源代码程序。

在某些示例中,待分析程序可以是业务人员当前编写完成的需要进行编译器编译的源代码程序。

在某些示例中,待分析程序也可以为预先保存于源代码程序库的程序。

可以理解地,上述示例仅是为了更好地理解本发明实施例的技术方案而列举的示例,不作为对本发明实施例的唯一限制。

程序编译日志是指采用多编译器对待分析程序进行编译的过程中,生成的日志。

在获取待分析程序之后,可以采用多编译器对待分析程序进行编译,并获取待分析程序对应的程序编译日志。

对于获取待分析程序对应的程序编译日志的过程可以结合下述具体实现方式进行详细描述。

在本发明实施例的一种具体实现方式中,上述步骤101具体可以包括:

子步骤A1:获取所述待分析程序;

子步骤A2:调用编译器对所述待分析程序进行编译处理,并获取由所述编译器输出的所述程序编译日志;所述程序编译日志包括编译参数。

在本发明实施例中,首先可以获取待分析程序,然后,调用编译器对待分析程序进行编译处理,进而可以获取有编译器输出的待分析程序对应的程序编译日志,具体地,本发明实施例可以提供一种编译监控系统,该编译监控系统可以包括编译监控模块、变换参数模块和分类提取编译信息模块,其中,编译监控模块的输入为待编译项目、编译命令与执行编译的工作空间,输出为编译监控原始结果文件。其具体操作过程可以为:a、调用编译器:用户可以通过“调用编译器模块”启动编译器,执行编译;b、获取编译日志:该步骤将编译器实际输出日志重定向到编译监控系统指定的存储空间,作为编译监控的原始结果。原始结果包含了完整、详细的编译参数与操作系统输出的其他信息。

在获取待分析程序对应的程序编译日志之后,执行步骤102。

步骤102:根据所述程序编译日志,识别得到编译命令。

编译命令是指编译器对待分析程序进行编译的过程中执行的编译命令。

在获取待分析程序对应的程序编译日志之后,可以根据程序编译日志识别得到编译命令,具体地,可以结合下述具体实现方式进行详细描述。

在本发明实施例的另一种具体实现方式中,上述步骤102具体可以包括:

子步骤B1:设计可识别的通用的编译器种类扩展模型。

子步骤B2:根据所述编译器种类扩展模型和配置文件,扩展编译器平台种类。

子步骤B3:通过所述配置文件中支持的编译器名,识别得到所述程序编译日志中的编译命令。

在本实施例中,可以设计可识别的通用的编译器种类扩展模型,然后,根据编译器种类扩展模型和配置文件扩展编译器平台种类,然后,通过配置文件中支持的编译器名,识别得到程序编译日志中的编译命令,具体地,可以包括:设计可识别的通用的编译器种类扩展模型,通过配置文件扩展编译器平台种类,比如GNU、CCS,每个编译器平台分类可以添加具体的编译器名称,比如GNU,可以添加tricore-gcc,powerpc-eabivle-gcc。编译监控过程通过配置文件中支持的具体编译器名,识别日志中的编译命令。

在根据待分析程序对应的程序编译日志识别得到编译命令之后,执行步骤103。

步骤103:根据所述编译命令,设计通用的配置文件模型,并将所述程序编译日志映射至所述配置文件模型,得到转换的编译参数。

在根据待分析程序对应的程序编译日志识别得到编译命令之后,可以根据识别得到的编译命令设计通用的配置文件模型,并将程序编译日志映射至配置文件模型,进而可以得到转换的编译参数,具体地,可以结合下述具体实现方式进行详细描述。

在本发明实施例的另一种具体实现方式中,上述步骤103具体可以包括:

子步骤C1:获取所述配置文件模型中所需变换的编译参数与变换后参数之间的映射关系;

子步骤C2:根据所述映射关系,将相同属性的参数转换为统一的参数;所述相同属性的参数包括:不同编译器平台上指定宏的参数、指定头文件的参数和取消内建宏的参数;

子步骤C3:根据所述映射关系,将部分参数变换为编译器可识别的参数;所述部分参数包括:链接动态库的参数、开启异常捕获模式的参数和启用同步异常处理的参数;

子步骤C4:根据所述映射关系,过滤所述编译器平台上的方言参数;所述方言参数包括:对芯片的附加组件发出的伪指令参数、处理器名称的参数和助记符汇编参数。

在本发明实施例中,首先可以设计一种通用的参数转换模型,该模型需指定各类编译器需要变换的编译参数与变换后参数的映射关系,指定要保留和过滤的参数。需要变换的参数内容如下:

i、相同属性的参数,需变换为统一的参数,例如,不同编译器平台上指定宏的参数,不同编译器平台上指定头文件的参数,不同编译器平台上取消内建宏的参数等;

ii、部分参数需要变换为编译器可以识别的参数,例如,链接动态库的参数,开启异常捕获模式的参数,启用同步异常处理的参数等;

iii、过滤各编译器平台上的方言参数,例如,C51编译器平台上对芯片的附加组件发出的伪指令参数,ARM编译器平台上列出处理器名称的参数,CCS编译器平台上的助记符汇编参数等等。

在本实施例中,在编译监控配置文件中,对编译器名与该编译器需要进行变换的参数表进行映射。用户可通过修改配置文件,增加编译器名,扩展编译监控支持的编译器。该步骤读取原始结果文件中的编译模块,根据配置文件编译器名适配相应的参数表。

该步骤主要依据参数表,对编译模块做过滤与参数调整。去除冗余的编译参数与操作系统的输出,将每个源文件必要的编译参数模块化存储在变换后的结果文件中。参数变换示例见表1:

表1:参数变换示例

在根据编译命令,设计通用的配置文件模型,并将程序编译日志映射至配置文件模型,得到转换的编译参数之后,执行步骤104。

步骤104:根据编译器类型提取所述待分析程序对应的编译信息。

在得到转换的编译参数之后,可以根据编译器类型提取待分析程序对应的编译信息,具体地,可以结合下述具体实现方式进行详细描述。

在本发明实施例的另一种具体实现方式中,上述步骤104可以包括:

子步骤D1:根据所述转换的编译参数对所述待分析程序按照编译器进行分组,得到分组结果;

子步骤D2:根据所述分组结果,提取每种编译器的编译信息;

子步骤D3:根据所述编译信息,生成每种编译器对应的配置文件。

在本发明实施例中,在得到转换的编译参数之后,可以根据转换的编译参数对待分析程序按照编译器进行分组得到分组结果,然后,结合分组结果提取每种编译器的编译信息,然后结合每种编译器的编译信息生成每种编译器对应的配置文件,具体地可以包括以下过程:

分类提取编译信息模块的输入为变换后的结果文件,输出为适用于全项目的编译配置文件。其具体操作过程如下:

a、源代码分类

该步骤根据变换后的结果文件对源文件按照编译器进行分组。当项目为混合编译的复杂项目时,全项目编译监控结果会按编译器拆分为多个结果。

b、编译信息提取

按照各编译器拆分的结果,依次提取每种编译器的编译信息。

以上所述,该编译监控系统最终将全项目中各个编译器所编译的源文件与相应编译器配置以成对的方式输出。可以实现对多编译器混合编译的项目进行可配置的编译监控。

本发明实施例针对多编译器混合编译的项目,通过编译监控的方式,对监控后的日志设计了一种通过分类提取源文件,补充编译参数重新预编译获取依赖信息的方法,形成适用于多编译器全项目的编译配置,并应用于全项目的静态分析,从而可以实现对多编译器混合编译的项目进行可配置的编译监控。

实施例二

参照图2,示出了本发明实施例提供的一种用于静态分析的多编译混合编译的监控装置的结构示意图,如图2所示,该用于静态分析的多编译器混合编译的监控装置具体可以包括如下模块:

程序编译日志获取模块210,用于获取待分析程序对应的程序编译日志;

编译命令识别模块220,用于根据所述程序编译日志,识别得到编译命令;

转换编译参数获取模块230,用于根据所述编译命令,设计通用的配置文件模型,并将所述程序编译日志映射至所述配置文件模型,得到转换的编译参数;

编译信息提取模块240,用于根据编译器类型提取所述待分析程序对应的编译信息。

可选地,所述程序编译日志获取模块210包括:

待分析程序获取单元,用于获取所述待分析程序;

程序编译日志获取单元,用于调用编译器对所述待分析程序进行编译处理,并获取由所述编译器输出的所述程序编译日志;

所述程序编译日志包括编译参数。

可选地,所述编译命令识别模块220包括:

编译器模型设计单元,用于设计可识别的通用的编译器种类扩展模型;

编译器平台种类扩展单元,用于根据所述编译器种类扩展模型和配置文件,扩展编译器平台种类;

编译命令识别单元,用于通过所述配置文件中支持的编译器名,识别得到所述程序编译日志中的编译命令。

可选地,所述配置文件模型为参数转换模型,所述转换编译参数获取模块230包括:

映射关系获取单元,用于获取所述配置文件模型中所需变换的编译参数与变换后参数之间的映射关系;

相同属性参数转换单元,用于根据所述映射关系,将相同属性的参数转换为统一的参数;所述相同属性的参数包括:不同编译器平台上指定宏的参数、指定头文件的参数和取消内建宏的参数;

部分参数变换单元,用于根据所述映射关系,将部分参数变换为编译器可识别的参数;所述部分参数包括:链接动态库的参数、开启异常捕获模式的参数和启用同步异常处理的参数;

方言参数过滤单元,用于根据所述映射关系,过滤所述编译器平台上的方言参数;所述方言参数包括:对芯片的附加组件发出的伪指令参数、处理器名称的参数和助记符汇编参数。

可选地,所述编译信息提取模块240包括:

分组结果获取单元,用于根据所述转换的编译参数对所述待分析程序按照编译器进行分组,得到分组结果;

编译信息提取单元,用于根据所述分组结果,提取每种编译器的编译信息;

配置文件生成单元,用于根据所述编译信息,生成每种编译器对应的配置文件。

以上实施例对本发明进行了详细说明,本发明专利说明书中未作详细描述的内容属于本领域专业技术人员的公知技术。对本发明的技术方法进行修改或者等同替换,都不脱离本发明技术方法的核心思想和范围,其均应涵盖在本发明的权利要求范围当中。

本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号