一种获取编译信息的方法和相关设备技术

技术编号:37642088 阅读:14 留言:0更新日期:2023-05-25 10:08
本申请实施例公开了一种获取编译信息的方法和相关设备,用于获取编译信息的情况下降低编译过程的时长。本申请实施例方法包括:获取执行命令,并确定所述执行命令的命令类型,其中,所述执行命令的命令类型包括编译类命令和非编译类命令,所述编译类命令为编译命令或链接命令,所述非编译类命令为所述编译类命令之外的其他执行命令。若所述执行命令的命令类型为编译类命令,则保存所述执行命令,而不执行所述执行命令,从而可以获取编译命令或链接命令作为编译信息,同时由于不执行该执行命令,节省了大量的时间。节省了大量的时间。节省了大量的时间。

【技术实现步骤摘要】
一种获取编译信息的方法和相关设备


[0001]本申请涉及计算机
,尤其涉及一种获取编译信息的方法和相关设备。

技术介绍

[0002]代码静态分析(static code analysis,SCA)是在不执行代码的情况下,通过词法分析、语法分析、控制流、数据流分析等技术对代码进行分析,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。
[0003]当前,对于获取代码的编译信息,可以SCA工具提供的功能生成编译数据库(用于存储编译过程的编译命令等编译信息,目前通常采用.json文件的方式存储)。例如,使用作为SCA工具的cmake,支持使用选项包括CMake_export_Compile_Commands,命令包括cmake

CMake_export_Compile_Commands=1

,从而在当前文件夹下生成compile_commands.json。但是这种方法不能完整的还原编译过程,当环境准备信息丢失、非编译命令丢失、环境变量丢失时,SCA工具无法有效、正确运行编译信息。
[0004]当前,SCA工具还可以在编译过程中获取编译信息,从而使能还原编译过程,是目前商用工具中较为普遍采用的获取代码的编译信息的方法,例如商用工具Coverity,Fortify都是采用这种方法。该方法主要是通过操作系统提供的动态加载方式,加载分析SCA工具的系统命令拦截程序,通过适配配置工程编译器的方式,来获取编译信息。但是,由于执行了完整的编译过程,需要浪费大量编译时间。

技术实现思路

[0005]本申请实施例提供了一种获取编译信息的方法和相关设备,用于获取编译信息的情况下降低编译过程的时长。
[0006]本申请第一方面提供了一种获取编译信息的方法,包括获取执行命令,并确定所述执行命令的命令类型,其中,所述执行命令的命令类型包括编译类命令和非编译类命令,所述编译类命令为编译命令或链接命令,所述非编译类命令为所述编译类命令之外的其他执行命令。若所述执行命令的命令类型为编译类命令,则保存所述执行命令,而不执行所述执行命令,从而可以获取编译命令或链接命令作为编译信息,同时由于不执行该执行命令,节省了大量的时间。
[0007]由于所述编译类命令为编译命令和链接命令,这些执行命令是SCA工具所需要的编译信息,但是这些执行命令不是编译过程中必须执行的,而且执行这些执行命令需要耗费大量时间。因此,通过识别编译命令和链接命令,可以在保证编译过程的情况下,节省大量时间,并获取了所需要的编译信息。
[0008]在一些可行的实现方式中,在所述保存所述执行命令之后,生成与所述执行命令具有同样文件名的空文件,以躲避编译器的检查。
[0009]在一些可行的实现方式中,所述非编译类命令为编译过程命令或可忽略命令。其中,若所述执行命令为所述编译过程命令,则执行所述执行命令。其中,编译过程命令是编
译过程中必须的执行命令,但是并非SCA工具所需要的编译信息,因此不保存该编译过程命令,但是继续执行该编译过程命令,避免影响编译过程。若所述执行命令为所述可忽略命令,则不执行所述执行命令,且不保存所述执行命令,以减少编译过程的时长。
[0010]本申请第二方面提供了一种获取编译信息的设备,所述设备用于执行前述第一方面中任一项所述的方法。
[0011]第三方面,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面中任一项所述的方法。
[0012]本申请第四方面提供一种计算机程序产品,该计算机程序产品包括计算机执行指令,该计算机执行指令存储在计算机可读存储介质中;设备的至少一个处理器可以从计算机可读存储介质读取该计算机执行指令,至少一个处理器执行该计算机执行指令使得设备实施上述第一方面或者第一方面的任一种可能的实现方式所提供的方法。
[0013]本申请第五方面提供一种通信装置,该通信装置可以包括至少一个处理器、存储器和通信接口。至少一个处理器与存储器和通信接口耦合。存储器用于存储指令,至少一个处理器用于执行该指令,通信接口用于在至少一个处理器的控制下与其他通信装置进行通信。该指令在被至少一个处理器执行时,使至少一个处理器执行第一方面或第一方面的任意可能的实现方式中的方法。
[0014]本申请第六方面提供了一种芯片系统,该芯片系统包括处理器,用于支持获取编译信息的设备实现上述第一方面或第一方面任意一种可能的实现方式中所涉及的功能。
[0015]在一种可能的设计中,芯片系统还可以包括存储器,存储器,用于保存获取编译信息的设备必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其他分立器件。
[0016]其中,第四至第七方面或者其中任一种可能实现方式所带来的技术效果可参见第一方面或第一方面不同可能实现方式所带来的技术效果,此处不再赘述。
附图说明
[0017]图1

1为编译信息获取系统的实施例示意图;
[0018]图1

2编译类的SCA工具对代码的分析过程的实施例示意图;
[0019]图1

3为本申请实施例提供的一种编译信息获取系统的实施例示意图;
[0020]图1

4为编译器执行编译过程的实施例示意图;
[0021]图2为获取编译信息的方法实施例示意图;
[0022]图3为依次判断执行命令是否为编译命令、链接命令、可忽略命令和编译过程命令的实施例示意图;
[0023]图4为本申请提供的一种获取编译信息的设备的实施例示意图;
[0024]图5为本申请提供的一种通信装置的实施例示意图。
具体实施方式
[0025]本申请实施例提供了一种获取编译信息的方法,用于在获取编译信息的情况下降低编译过程的时长。
[0026]下面结合附图,对本申请的实施例进行描述。
[0027]本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本申请的实施例中对相同属性的对象在描述时所采用的区分方式。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
[0028]代码静态分析(static code analysis,SCA)是指在不执行代码的情况下,通过词法分析、语法分析、控制流、数据流分析等技术对代码进行分析,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。
[0029]按照是否在分析过程中依赖编译过程,SCA工具可以分为编译类的SCA工具和非编译类的SCA工具。本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种获取编译信息的方法,其特征在于,包括:获取执行命令;确定所述执行命令的命令类型,所述执行命令的命令类型包括编译类命令和非编译类命令,所述编译类命令为编译命令或链接命令,所述非编译类命令为所述编译类命令之外的其他执行命令;若所述执行命令的命令类型为编译类命令,则保存所述执行命令,而不执行所述执行命令。2.根据权利要求1所述方法,其特征在于,所述保存所述执行命令之后,还包括:生成与所述执行命令具有同样文件名的空文件。3.根据权利要求1或2所述方法,其特征在于,所述非编译类命令为编译过程命令或可忽略命令。4.根据权利要求3所述方法,其特征在于,所述确定所述执行命令的命令类型之后,还包括:若所述执行命令为所述编译过程命令,则执行所述执行命令。5.根据权利要求3或4所述方法,其特征在于,所述确定所述执行命令的命令类型之后,还包括:若所述执行命令为所述可忽略命令,则不执行所述执行命令。6.一种获取编译信息的设备,其特征在于,包括:获取模块,用于获取执行命令;处理模块,用于确定所述执行命令的命令类型,所述执行命令的命令类型包括编译类命令和非编译类命令,所述编译类命令为编译命令或链接命令,所述非编译类命令为所述编译类命令之外的其他执行命令;所述处理模块,还用于若所述执行命令的命令类型为编译类命令,则保存所述执行命令,而不执行所述执行命令。7.根据权利要求6所述设备,其特征在于,所述处理模块,还用于生成与所述执行命令具有同样文件名的空文件。8.根据权利要求6或7所述设备,其特征在于,所述非编译类命令为编译过程命...

【专利技术属性】
技术研发人员:沈栋邱国平赵文宇
申请(专利权)人:华为云计算技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1