CN113485923B - 项目代码检测方法与装置、电子设备 - Google Patents
项目代码检测方法与装置、电子设备 Download PDFInfo
- Publication number
- CN113485923B CN113485923B CN202110746909.1A CN202110746909A CN113485923B CN 113485923 B CN113485923 B CN 113485923B CN 202110746909 A CN202110746909 A CN 202110746909A CN 113485923 B CN113485923 B CN 113485923B
- Authority
- CN
- China
- Prior art keywords
- file
- project
- source code
- code
- code file
- 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/3668—Software testing
- G06F11/3672—Test management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种项目代码检测方法与装置、电子设备,该方法包括:获取项目代码文件和代码检查工具;根据项目代码文件确定代码检查工具所需执行的项目配置文件,项目配置文件用于配置以下至少之一的目录信息:在项目代码文件中待检查的源代码文件列表、源代码文件列表中的各源代码文件所需的头文件的路径、源代码文件列表中的各源代码文件所需的宏定义;根据代码检测工具对应的命令执行项目配置文件以检测源代码文件列表中的代码,从而通过项目配置文件实现对项目代码文件中需要检测的源代码文件进行预定义或模块化,避免对项目代码文件中的整个源代码文件进行检测,缩减人力成本,提高代码检测效率和准确性。
Description
技术领域
本申请涉及计算机技术领域,具体涉及一种项目代码检测方法与装置、电子设备。
背景技术
代码检测是保证软件质量的前提,而通过代码检测能有效识别代码中存在的一些质量问题,比如,识别代码的语义缺陷、告警、安全漏洞、故障、不一致、不可移植的结构、冗余代码等。
由于一个项目(如Android项目等)可能涉及几十至几千个的目录,而每个目录下又可能涉及几千至几万个的项目代码文件,因此一个项目可能包含几万至几十万个的项目代码文件。然而。在利用代码检测工具对成千上万的项目代码文件进行代码检测时,通常存在耗费时长、人力紧张、效率低下、检测错误多等问题。
发明内容
本申请实施例提供了一种项目代码检测方法与装置、电子设备,以期望通过项目配置文件实现对项目代码文件中需要检测的源代码文件进行预定义或模块化,避免对项目代码文件中的整个源代码文件进行检测,从而有利于缩减人力成本,提高代码检测效率和准确性。
第一方面,本申请实施例提供一种项目代码检测方法,包括:
获取项目代码文件和代码检测工具;
根据所述项目代码文件确定所述代码检测工具所需执行的项目配置文件,所述项目配置文件用于配置以下至少之一的目录信息:在所述项目代码文件中待检测的源代码文件列表、所述源代码文件列表中的各源代码文件所需的头文件的路径、所述源代码文件列表中的各源代码文件所需的宏定义;
根据所述代码检测工具对应的命令执行所述项目配置文件以检测所述源代码文件列表中的代码。
第二方面,本申请实施例提供一种项目代码检测装置,所述装置包括处理单元,所述处理单元用于:
获取项目代码文件和代码检测工具;
根据所述项目代码文件确定所述代码检测工具所需执行的项目配置文件,所述项目配置文件用于配置以下至少之一的信息:在所述项目代码文件中待检测的源代码文件列表、所述源代码文件列表中的各源代码文件所需的头文件的路径、所述源代码文件列表中的各源代码文件所需的宏定义;
根据所述代码检测工具对应的命令执行所述项目配置文件以检测所述源代码文件列表中的代码。
第三方面,本申请实施例提供一种电子设备,包括处理器、存储器和通信接口,所述存储器存储有至少一个程序,并且所述至少一个程序由所述处理器执行,所述至少一个程序包括用于执行本申请实施例第一方面中的步骤的指令。
第四方面,本申请实施例提供一种计算机可读存储介质,其中,所述计算机可读存储介质存储用于电子数据交换的计算机程序和数据,所述计算机程序和数据可操作来使得计算机执行本申请实施例第一方面中所描述的部分或全部步骤。
第五方面,本申请实施例提供一种计算机程序产品,其中,所述计算机程序产品包括计算机程序,所述计算机程序可操作来使得计算机执行本申请实施例第一方面中所描述的部分或全部步骤。所述计算机程序产品可以为一个软件安装包。
可以看出,获取项目代码文件和代码检测工具;根据项目代码文件确定代码检测工具所需执行的项目配置文件;根据代码检测工具对应的命令执行项目配置文件以检测源代码文件列表中的代码。由于项目配置文件用于配置以下至少之一的目录信息:在项目代码文件中待检测的源代码文件列表、源代码文件列表中的各源代码文件所需的头文件的路径、源代码文件列表中的各源代码文件所需的宏定义,因此当该项目配置文件配置有源代码文件列表(即由至少一个源代码文件所组成的目录)时,在执行该项目配置文件之后,将该源代码文件列表中的各源代码文件进行代码检测,从而通过项目配置文件实现对项目代码文件中需要检测的源代码文件进行预定义或模块化,避免对项目代码文件中的整个源代码文件进行检测,进而有利于缩减人力成本,提高代码检测效率和准确性。
另外,由于每个源代码文件可能需要(依赖)特定的头文件和/或特定的宏定义,因此该项目配置文件中还需要配置源代码文件所需的头文件的路径和/或源代码文件所需的宏定义等目录信息,避免因缺少特定的头文件和/或特定的宏定义而导致源代码文件的检测失败,从而有利于保证代码检测的准确性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述的附图仅仅是本申请的一些实施例。对于本领域技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。
图1是本申请实施例提供的一种电子设备的硬件结构示意图;
图2是本申请实施例提供的一种电子设备的软件结构示意图;
图3是本申请实施例提供的一种项目代码检测方法的流程示意图;
图4是本申请实施例提供的一种项目代码检测装置的功能单元组成框图;
图5是本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为了本技术领域人员更好理解本申请的技术方案,下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请的部分实施例,而并非全部的实施例。基于本申请实施例的描述,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请所保护的范围。
本申请的说明书、权利要求书以及附图中的“第一”、“第二”等术语是用于区别不同对象,而不是用于描述特定顺序。另外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、软件、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。
在对本申请的技术方案进行描述之前,下面先对本申请可能涉及的相关概念、电子设备的软硬件结构等进行具体说明。
需要说明的是,本申请的电子设备可以是手持设备、可穿戴设备、连接到无线调制解调器的其他设备,也可以是各种具体形式的用户设备(user equipment,UE)、终端设备(terminal device)、手机(smart phone)、智慧屏、智慧电视、智能手表、笔记本电脑、个人数字助理(personal digital assistant,PDA)、个人计算机(personal computer,PC)或者中继设备等。
下面结合图1对本申请实施例的电子设备的硬件结构进行详细说明,可以理解的是,图1示意的结构并不构成对电子设备的具体限定。在一些可能示例中,电子设备还可以包括比图1示意更多或更少的模块,或者组合图1示意的某些模块,或者拆分图1示意的某些模块,或者不同于图1示意的各模块分布。另外,图1示意的模块可以通过硬件、软件或者软硬件结合的方式实现。
请参阅图1,电子设备可以包括处理器110、天线1、天线2、移动通信模块120、无线通信模块130、音频模块140、传感器模块150、显示模块160、摄像模块170、充电管理模块180、内部存储器1901和外部存储器接口1902等。
具体的,处理器110可以用于运行或加载一种操作系统,该操作系统可以是Android操作系统、RTOS(real-time operating system,实时操作系统)操作系统、Unix操作系统、Linux操作系统、DOS操作系统、Windows操作系统、Mac操作系统等。需要说明的是,处理器可以看作一个完整的系统级芯片(system on chip,SOC)。
具体的,处理器110可以包括一个或多个处理单元。例如,处理器110可以包括中央处理器(central processing unit,CPU)、应用处理器(application processor,AP)、微控制单元(microcontroller Unit,MCU)、单片微型计算机(single chip microcomputer,SCM)、单片机、图形处理器(graphics processing unit,GPU)、图像信号处理器(imagesignal processor,ISP)、控制器、数字信号处理器(digital signal processor,DSP)、现场可编程逻辑门阵列(field programmable gate array,FPGA)、专用集成电路(application-specific integrated circuit,ASIC)、基带处理器、神经网络处理器(neural-network processing unit,NPU)等中的至少之一。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
进一步的,处理器110中还可以设置存储器,用于存储指令和数据。可选的,处理器可以调用存储器中存储的程序以运行操作系统。可选的,处理器中的存储器可以保存或缓存该处理器刚用过或循环使用的指令。若该处理器需要再次使用该指令或数据,则可以从该存储器中直接调用,从而避免重复存取,减少处理器的等待时间以提高系统效率。可选的,处理器中的存储器还可以保存或缓存数据,并该数据同步或传输给其他处理器执行。其中,处理器中的存储器可以为高速缓冲存储器。
进一步的,处理器110还可以包括一个或多个通信接口。其中,该通信接口可以包括串行外设接口(serial peripheral interface,SPI)、集成电路(inter-integratedcircuit,I2C)接口、集成电路内置音频(inter-integrated circuit sound,I2S)接口、脉冲编码调制(pulse code modulation,PCM)接口、通用异步收发传输器(universalasynchronous receiver/transmitter,UART)接口、移动产业处理器接口(mobileindustry processor interface,MIPI)、通用输入输出(general-purpose input/output,GPIO)接口、用户标识模块(subscriber identity module,SIM)接口、通用串行总线(universal serial bus,USB)接口等中的至少之一。
需要说明的是,电子设备的无线通信功能可以通过天线1、天线2、移动通信模块120、无线通信模块130、调制解调处理器和基带处理器等实现。其中,天线1和天线2用于发射和接收电磁波信号。电子设备中的每个天线可用于覆盖单个或多个通信频带。另外,不同的天线还可以复用以提高天线的利用率。例如,将天线1复用为无线局域网的分集天线。
具体的,移动通信模块120可以提供应用在电子设备上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块120可以包括至少一个滤波器、开关、功率放大器和低噪声放大器(low noise amplifier,LNA)等。
进一步的,移动通信模块120可以由天线1接收电磁波,并对接收的电磁波进行滤波、放大等处理,传送至调制解调处理器进行解调。另外,移动通信模块120还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。
进一步的,移动通信模块120的至少部分功能模块可以被设置于处理器110中;或者,移动通信模块120的至少部分功能模块可以与处理器110的部分模块设置在同一个器件中。
具体的,无线通信模块130可以提供应用在电子设备上的包括蓝牙(Bluetooth,BT)、无线局域网(wireless local area networks,WLAN)、无线保真(wireless fidelity,Wi-Fi)网络、近距离无线通信(near field communication,NFC)、红外技术(infrared,IR)等无线通信的解决方案。
进一步的,无线通信模块130可以是集成至少一个通信处理模块的一个或多个器件。另外,无线通信模块130经由天线2接收电磁波,将电磁波信号调频以及滤波处理,将处理后的信号发送到处理器110。无线通信模块130还可以从处理器110接收待发送的信号,对其进行调频和放大,再由天线2转为电磁波辐射出去。
需要说明的是,电子设备可以通过音频模块140、扬声器1401、受话器1402、麦克风1403、耳机接口1404以及处理器110等实现音频功能。例如,音乐/视频播放、录音等。
具体的,音频模块140可以用于将数字音频信息转换成模拟音频信号输出,也可以用于将模拟音频输入转换为数字音频信号。另外,音频模块140还可以用于对音频信号编码和解码。在一些可能示例中,音频模块140可以设置于处理器110中,或将音频模块140的部分功能模块设置于处理器110中。
具体的,扬声器1401可以用于将音频电信号转换为声音信号。电子设备可以通过扬声器1401收听音乐/视频中播放的声音,或收听免提通话等。在一些可能示例中,扬声器1401可以作为发声组件中的一种。
具体的,受话器1402可以用于将音频电信号转换成声音信号。电子设备接听电话或语音信息时,可以通过将受话器1402靠近人耳接听语音。在一些可能示例中,受话器1402可以作为发声组件中的一种。
具体的,麦克风1403可以用于将声音信号转换为电信号。当拨打电话或发送语音信息时,用户可以通过人嘴靠近麦克风1403发声,将声音信号输入到麦克风1403。另外,电子设备可以设置至少一个麦克风1403。在一些可能的示例中,电子设备可以设置两个麦克风1403,除了采集声音信号外,还可以实现降噪功能;在一些可能的示例中,电子设备还可以设置三个、四个或更多麦克风1403,除了可以实现采集声音信号或降噪外,还可以识别声音来源以实现定向录音功能等,对此不作具体限制。
具体的,耳机接口1404可以用于连接有线耳机。耳机接口1404可以是USB接口1803,也可以是3.5mm的开放移动电子设备平台(open mobile terminal platform,OMTP)标准接口、美国蜂窝电信工业协会(cellular telecommunications industryassociation of the USA,CTIA)标准接口等。
具体的,传感器模块150中可以包括惯性传感器、压力传感器、陀螺仪传感器、气压传感器、磁传感器、加速度传感器、距离传感器、接近光传感器、指纹传感器、温度传感器、触摸传感器、环境光传感器、骨传导传感器、超带宽UWB传感器、近场通信NFC传感器、激光传感器和/或可见光传感器等。
需要说明的是,电子设备可以通过GPU、显示模块160以及处理器110等实现显示功能。其中,GPU可以用于执行数学和几何计算,并进行图形渲染。另外,GPU可以为图像处理的微处理器,并连接显示模块160和处理器110。处理器110可以包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
具体的,显示模块160可以为显示屏,其用于显示图像、视频等。其中,显示模块160可以包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD)、有机发光二极管(organic light-emitting diode,OLED)、有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrix organic light emitting diode,AMOLED)、柔性发光二极管(flex light-emitting diode,FLED)、量子点发光二极管(quantum dot lightemitting diodes,QLED)等。在一些可能的示例中,电子设备可以包括一个或多个显示模块160。
需要说明的是,电子设备可以通过ISP、DSP、摄像模块170、视频编解码器、GPU、显示模块160以及处理器110等实现拍摄功能。其中,ISP可以用于处理摄像模块170反馈的数据。例如,在拍照时,先打开快门,再由光线通过摄像模块170的镜头传递到摄像模块170的感光元件上,实现光信号转换为电信号,最终通过感光元件将该电信号传递给ISP处理以转化为数字图像等。另外,ISP还可以对图像的噪点、亮度、肤色进行算法优化。ISP还可以对拍摄场景的曝光、色温等参数进行优化。在一些可能的示例中,ISP和/或DSP可以设置在摄像模块170中。
具体的,摄像模块170可以为摄像头或者摄像模组,其用于捕获或拍摄静态/动态的图像或视频。其中,摄像模块170可以包括镜头、感光元件等,而感光元件可以是电荷耦合器件(charge coupled device,CCD)或互补金属氧化物半导体(complementary metal-oxide-semiconductor,CMOS)光电晶体管。因此,立体物体可以通过镜头生成光学图像投射到感光元件。感光元件可以把该光学图像中的光信号转换成电信号,再将该电信号传递给ISP转换成数字图像信号。ISP将该数字图像信号输出到DSP。DSP将该数字图像信号转换成标准的RGB、YUV等格式的图像信号。在一些可能的示例中,电子设备可以包括一个或多个摄像模块170。
具体的,充电管理模块180可以用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。在一些可能的示例中,充电管理模块180可以通过USB接口1803接收有线充电器的充电输入。在一些可能的示例中,充电管理模块180可以通过电子设备的无线充电线圈接收无线充电输入。充电管理模块180为电池1801充电的同时,还可以通过电源管理模块1802为电子设备供电。
需要说明的是,电源管理模块1802可以用于连接电池1801、充电管理模块180和处理器110。其中,电源管理模块1802接收电池1801和/或充电管理模块180的输入,为电子设备中的各个模块和处理器110等供电。
具体的,电源管理模块1802还可以用于监测电池容量、电池循环次数、电池健康状态(漏电、阻抗)等参数。在一些可能的示例中,电源管理模块1802也可以设置于处理器110中;在一些可能的示例中,电源管理模块1802和充电管理模块180也可以设置于同一个器件中。
需要说明的是,内部存储器1901可以用于存储计算机可执行程序代码,该可执行程序代码包括指令。其中,处理器110通过运行存储在内部存储器1901的指令,从而执行电子设备的各种功能应用以及数据处理。在一些可能的示例中,内部存储器1901存储执行本申请实施例的技术方案的程序代码。
具体的,内部存储器1901可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(例如,声音播放功能和图像播放功能等)等。存储数据区可存储电子设备使用过程中所创建的数据(例如,音频数据和电话本等)等。另外,内部存储器1901可以包括高速随机存取存储器,还可以包括非易失性存储器。例如,至少一个磁盘存储器件、闪存器件、通用闪存存储器(universal flash storage,UFS)等。
具体的,外部存储器接口1902可以用于连接外部存储卡,例如micro SD卡,实现扩展电子设备的存储能力。外部存储卡通过外部存储器接口1902与处理器110通信,实现数据存储功能。例如,将音乐、视频等文件保存在外部存储卡中。
本申请实施例中,电子设备的软件系统可以采用分层架构、事件驱动架构、微核架构、微服务架构或云架构。另外,电子设备可以包括硬件层、运行在硬件层之上的操作系统层、运行在操作系统层上的应用层等。其中,该硬件层可以包括CPU、内存管理单元(memorymanagement unit,MMU)和内存(也称为存储器)等硬件。内存可以用于存储软体程序和/或模块,并且可以包括存储程序区和存储数据区,而存储程序区可以用于存储操作系统或者至少一个功能所需的软体程序等。该操作系统可以是任意一种或多种通过进程(process)实现业务处理的计算机操作系统。例如,Linux操作系统、Unix操作系统、Android操作系统、iOS操作系统或Windows操作系统等。
下面本申请实施例以分层架构的Android系统为例,示例性说明电子设备的软件结构。
如图2所示的设置有Android系统的软硬件系统的架构示意图。其中,内部存储器1901中可存储有内核层220、系统运行库层240、应用框架层260和应用层280。其中,层与层之间通过软件接口通信,并且内核层220、系统运行库层240和应用框架层260属于操作系统空间。
具体的,应用层280属于用户空间,应用层280中运行有至少一个应用程序(或简称为“应用”),这些应用程序可以是操作系统自带的原生应用程序,也可以是第三方开发者所开发的第三方应用程序。例如,应用层280可以包括相机、图库、日历、通话、地图、导航、WLAN、蓝牙、音乐、视频和短信息等应用程序。
在本申请实施例中,应用层中还可以代码检测工具,该代码检测工具用于检测项目代码文件中的代码。
需要说明的是,应用框架层260提供构建应用层的应用程序可能用到的各种应用编程接口(application programming interface,API)和编程框架,从而开发者也可以通过使用这些API来构建自己的应用程序。例如,窗口管理器(window manager)、内容提供器(content providers)、视图系统(view system)、电话管理器(telephony manager)、资源管理器、通知管理器(notification manager)、消息管理器、活动管理器(activitymanager)、包管理器(package manager)、位置管理(location manager)和NFC服务等。
具体的,窗口管理器可以用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏、锁定屏幕、截取屏幕等。
具体的,内容提供器可以用于存放和获取数据,并使该数据可以被应用程序访问。其中,该数据可以包括视频、图像、音频、拨打和接听的电话、浏览历史和书签、电话簿等。另外,内容提供器可以使得应用程序可以访问另一个应用程序的数据,如联系人数据库,或者共享它们自己的数据。
具体的,视图系统包括可视控件。例如,显示文字的控件和显示图片的控件等。视图系统可以用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。
具体的,电话管理器用于提供电子设备的通信功能。例如,通话状态的管理(如接通、挂断等)。
具体的,资源管理器可以为应用程序提供各种资源。比如,本地化字符串、图标、图片、布局文件、视频文件等。
具体的,通知管理器使得应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如,通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知。另外,后台运行的应用程序的通知还可以是以对话窗口形式出现在屏幕上的通知。例如,在状态栏提示文本信息,发出提示音,电子设备振动、指示灯闪烁等。
具体的,消息管理器可以用于存储各个应用程序上报的消息的数据,并对各个应用程序上报的数据进行处理。
具体的,活动管理器可以用于管理应用程序生命周期并提供常用的导航回退功能。其中,消息管理器可以是通知管理器的一部分。
需要说明的是,系统运行库层240通过一些C/C++库来为Android系统提供了主要的特性支持。如SQLite库提供了数据库的支持,OpenGL/ES库提供了3D绘图的支持,Webkit库提供了浏览器内核的支持等。在系统运行库层240中还提供有安卓运行时库(AndroidRuntime),其主要提供了一些核心库,能够允许开发者使用Java语言来编写Android应用。
具体的,内核层220可以为电子设备的各种硬件提供了底层的驱动,如显示驱动、音频驱动、摄像头驱动、蓝牙驱动、Wi-Fi驱动、电源管理、NFC驱动、UWB驱动等。
结合上述描述,下面将从方法示例的角度介绍项目代码检测方法的执行步骤,请参阅图3。图3是本申请实施例提供的一种项目代码检测方法的流程示意图,该方法包括:
S310、获取项目代码文件和代码检测工具。
具体的,项目代码文件可以包括多个组织文件、多个源代码文件、多个头文件等。
其中,本申请的项目代码文件可以包括安卓(Android)项目的项目代码文件、Linux项目的项目代码文件、Unix项目的项目代码文件等。也就说是,本申请的项目代码文件可以是C/C++语言所编写的项目的项目代码文件,对此不作具体限制。
需要说明的是,由于一个项目可能涉及几十至几千个的目录,而每个目录下又可能涉及几千至几万个的项目代码文件,因此一个项目可能包含几万至几十万个的项目代码文件。其中,在这些成千上万的项目代码文件中可能包括多个组织文件、多个源代码文件、多个头文件等。
组织文件可以用于组织配置编译规则,并按照该编译规则将源代码文件编译成可执行的二进制文件。例如,组织文件可以包括Makefile文件(如Android.mk、build/core/*.mk等)。另外,组织文件所包含的内容信息是一些目录信息。
源代码文件可以用于存放C、C++等源代码。例如,源代码文件可以包括*.c文件、*.cpp文件、*.cc文件等。
头文件可以用于存放宏定义声明、函数声明、变量声明、全局变量声明等。例如,头文件可以包括*.h文件。
具体的,代码检测工具可以用于检测项目代码文件中的代码。
其中,本申请的代码检测工具可以包括PC-lint Plus或者PC-lint。
需要说明的是,PC-lint Plus或者PC-lint是一种GIMPEL SOFTWARE公司开发的C/C++软件代码静态分析工具,其全称是PC-Lint/FlexeLint for C/C++,能够在Windows、DOS、Linux、Android、Unix等操作系统上使用,以二进制可执行文件的形式发布。
PC-lint Plus或者PC-lint可以检测C/C++源代码中存在的一般的语法错误,还可以检测潜在的错误,比如不可移植的结构、冗余代码、数组访问越界、内存泄漏、使用未初始化变量、使用空指针等。
像编译器一样,PC-lint Plus或者PC-lint能解析源代码文件,执行语义分析,并构建抽象语法树来表示程序PC-lint Plus采用各种机制,包括数据流分析、值跟踪、读写分析、强类型检测、功能语义验证等技术,以提供对单个文件和整个项目的稳健和整体分析。
另外,PC-lint Plus或者PC-lint使用易于理解的清晰、简洁和可操作的诊断报告。诊断报告的格式可以是完全可定制的,包括快速解决缺陷所需的精确位置信息和上下文。PC-lint Plus或者PC-lint可以从命令行运行,集成到构建过程持续集成系统中。
具体的,在S310中的获取项目代码文件和代码检测工具之后,该方法还可以包括:获取编译器配置文件,编译器配置文件用于配置项目代码文件编译所需的编译器。
需要说明的是,本申请需要对Android项目配置用于编译代码文件的编译器。因此,通过获取编译器配置文件实现编译器的配置。
可选的,获取编译器配置文件,可以包括:根据代码检测工具中的编译器配置工具将所需编译器的路径作为参数进行传递以得到编译器配置文件。
需要说明的是,本申请可以通过代码检测工具中的编译器配置工具将需要用到的编译器的路径作为参数进行传递,从而通过传递编译器的路径作为参数的方式实现获取编译器配置文件。
示例性的,下面以编译器配置文件为co-gcc.lnt文件,代码检测工具为PC-lintPlus或者PC-lint为例,对co-gcc.lnt文件的进行说明,具体如下:
pclp_config.py
--compiler=gcc
--compiler-bin=/path/to/compiler
--config-output-lnt-file=co-gcc.lnt
--config-output-header-file=co-gcc.h
--generate-compiler-config
其中,pclp_config.py为PC-lint Plus或者PC-lint中的编译器配置工具;gcc为需要用到的编译器;/path/to/compiler为gcc的路径;co-gcc.h为生成的头文件。
S320、根据项目代码文件确定代码检测工具所需执行的项目配置文件。
其中,项目配置文件可以用于配置以下至少之一的目录信息:在项目代码文件中待检测的源代码文件列表、源代码文件列表中的各源代码文件所需的头文件的路径、源代码文件列表中的各源代码文件所需的宏定义。
其中,项目配置文件可以属于LIN文件。可以理解的是,由于该项目配置文件只能由本申请的代码检测工具所执行,因此若该代码检测工具包括PC-lint Plus或者PC-lint,则该项目配置文件属于LNT文件。
需要说明的是,由于一个项目可能包含几万至几十万个的项目代码文件,因此在利用代码检测工具对成千上万的项目代码文件进行代码检测时,为了减缩人力成本,提高代码检测效率和准确性,本申请根据项目代码文件来确定代码检测工具所需执行的项目配置文件,该项目配置文件用于配置需要检测的哪些源代码文件和/或该些源代码文件所需(或所依赖)的相关文件等,并通过代码检测工具执行该项目配置文件以实现项目代码的检测。
其次,项目配置文件,可以理解为,针对项目代码文件所制定的代码检测规则或条件,并根据该代码检测规则或条件从项目代码文件中提取(或配置)出需要检测的源代码文件等目录信息。也就是说,当项目配置文件配置有源代码文件列表(即由至少一个源代码文件所组成的目录)时,在执行该项目配置文件之后,将该源代码文件列表中的各源代码文件进行代码检测,从而通过项目配置文件实现对项目代码文件中需要检测的源代码文件进行预定义或模块化,避免对项目代码文件中的整个源代码文件进行检测,进而有利于缩减人力成本,提高代码检测效率和准确性。
最后,由于每个源代码文件可能需要(依赖)特定的头文件和/或特定的宏定义,因此项目配置文件中还需要配置源代码文件所需的头文件的路径和/或源代码文件所需的宏定义等目录,避免因缺少特定的头文件和/或特定的宏定义而导致源代码文件的检测失败,进而有利于保证代码检测的准确性。
具体的,S320中的根据项目代码文件确定代码检测工具所需执行的项目配置文件,可以包括:将项目代码文件中的第一类组织文件进行格式转换以得到第二类组织文件,第二类组织文件的内容信息用于将项目代码文件中待检测的源代码文件列表中的各源代码文件编译成二进制可执行文件;根据第二类组织文件确定代码检测工具所需执行的项目配置文件。
其中,第二类组织文件的内容信息用于将源代码文件编译成二进制可执行文件的效率比第一类组织文件的内容信息用于将该源代码文件编译成二进制可执行文件的高。
需要说明的是,由于代码检测工具在执行项目配置文件以检测源代码文件时需要用到的一些文件是编译出来的,因此本申请需要先对待检测的源代码文件进行相关的编译,再对编译后的源代码文件进行代码检测。
另外,由于组织文件可以用于组织配置编译规则,并按照该编译规则将源代码文件编译成可执行的二进制文件,因此为了提高编译效率,本申请需要先将项目代码文件中的第一类组织文件转换为第二类组织文件,再根据第二类组织文件确定代码检测工具所需执行的项目配置文件,从而利用第二类组件文件的内容信息来将该项目配置文件所配置的源代码文件编译成二进制可执行文件,以便有利于对编译后的源代码文件执行代码检测。
具体的,第一类组织文件包括Makefile文件和Blueprint文件,所述第二类组织文件包括第一类Ninja文件和第二类Ninja文件。
需要说明的是,本申请将项目代码文件中的所有Makefile文件和所有Blueprint文件转换为Ninja文件,再通过Ninja文件来确定代码检测工具所需执行的项目配置文件。也就是说,从Ninja文件中提取待检测的源代码文件的目录、源代码文件所需要(依赖)的头文件的目录、源代码文件所需要(依赖)的宏定义的目录等中的至少之一来作为项目配置文件。由于Makefile文件(如Android.mk文件)和Blueprint文件(如Android.bp)文件比较复杂,而Ninja文件相对简单,因此为了提高编译效率,本申请需要先将项目代码文件中的Makefile文件和Blueprint文件转换为Ninja文件。
具体的,将项目代码文件中的第一类组织文件进行格式转换以得到第二类组织文件,可以包括:将项目代码文件中的Makefile文件转换成Ninja格式的组织文件以得到第一类Ninja文件;将项目代码文件中的Blueprint文件转换成Ninja格式的组织文件以得到第二类Ninja文件。
其中,Makefile文件可以包括build/core/*.mk文件和/或Android.mk文件等。可以理解的是,本申请需要将项目代码文件中的所有Makefile文件转换成Ninja文件。例如,将所有的Android.mk文件转换成Ninja文件。
其中,Blueprint文件可以包括Android.bp文件等。可以理解的是,本申请需要将项目代码文件中的所有Blueprint文件转换成Ninja文件。例如,将所有的Android.bp文件转换成Ninja文件。
其中,第一类Ninja文件可以包括out/build-*.ninja文件等。第二类Ninja文件可以包括out/soong/build.ninja文件等。
需要说明的是,Android.mk文件是Makefile的一种形式,采用的是领域特定语言(Domain Specific Language,DSL),包括不同的规则、条件、分支、循环等复杂的流程控制。Android.mk文件通常具有多个具有相同名称的模块。
Android.bp文件的出现是为了替换Android.mk文件。Android.bp文件是在Android 7.0之后使用,是一种简单的配置文件,而不像Makefile有条件、分支、循环等流程控制,也没有运算、逻辑等操作。如果Android.bp文件需要控制逻辑,那么需要通过Go语言编写。Android.bp文件需要每个模块具有唯一的名称,但是可以在多个变体中构建单个模块。
Soong工具类似于Makefile编译系统的核心,负责提供Android.bp文件的语义解析,并将Android.bp文件转换成Ninja文件。Soong工具还会编译生成一个androidmk命令,用于将Android.mk文件转换为Android.bp文件,而该转换功能仅限于没有分支、循环等流程控制的Android.mk文件。
Blueprint工具用于生成、解析Android.bp文件,是Soong工具的一部分。Soong工具用于负责Android编译而设计,并用于解析内容的具体含义,而Blueprint工具用于解析文件格式。Blueprint工具和Soong工具都是由Golang写的项目,从Android 7.0,prebuilts/go/目录下新增Golang所需的运行环境,在编译时使用。
可选的,将项目代码文件中的Makefile文件转换成Ninja格式的组织文件以得到第一类Ninja文件,可以包括:通过Kati工具将项目代码文件中的Makefile文件转换成Ninja格式的组织文件以得到第一类Ninja文件。
需要说明的是,Kati工具是Google专门为了Android而开发的一个小项目,基于Golang和C++。目的是为了把项目中的Makefile文件转换成Ninja文件。其中,通过Kati工具能将Android.mk文件转换成out/build-*.ninja文件。
另外,从Android 7开始,编译时默认使用Ninja,而Android项目中通常没有Ninja文件。在编译时,本申请需要先把Makefile文件通过Kati工具转换成Ninja文件,再使用ninja命令进行编译。Ninja文件都产生在out/目录下,存在如下三类:
第一类是out/build-*.ninja文件,对make全编译,该类文件的大小通常占到几十到几百MB。如果Makefile文件发生修改,需要重新产生该类文件;
第二类是out/soong/build.ninja文件,该类文件是从所有的Android.bp文件转换过来的;
第三类是out/combined-*.ninja文件,在对Makefile文件使用了Soong工具后,除了生成out/build-*.ninja文件之外,还会生成out/combined-*.ninja。其中,out/combined-*.ninja文件是将out/build-*.ninja文件和out/soong/build.ninja文件进行组合后的文件。
示例性的,本申请以Android项目为“ums***_1h10_Natv”为例,介绍out/combined-ums***_1h10_Natv.ninja文件的内容信息,具体如下:
builddir=out
pool highmem_pool
depth=9
build_kati_always_build_:phony
subninja out/build-ums***_1h10_Natv.ninja
subninja out/build-ums***_1h10_Natv-package.ninja
subninja out/soong/build.ninja
另外,out/build-ums***_1h10_Natv.ninja文件的部分内容信息,具体如下:
/bin/bash
-c"PWD=/proc/self/cwd
prebuilts/clang/host/linux-x86/clang-r383902b/bin/clang
-Iexternal/boringssl/src/include
-Iexternal/zlib
-Iexternal/libcxx/include
-Iexternal/libcxxabi/include
-D__LIBC_API__=10000
-Ibionic/libc/include
-D__LIBM_API__=10000
-D__LIBDL_API__=10000
-Iexternal/libcxxabi/include
-I system/core/include
-I system/media/audio/include
-I hardware/libhardware/include
-I hardware/libhardware_legacy/include
-I hardware/ril/include
-I frameworks/native/include
-I frameworks/native/opengl/include
-I frameworks/av/include
-isystem bionic/libc/include
-isystem bionic/libc/kernel/uapi
-isystem bionic/libc/kernel/uapi/asm-arm64
-isystem bionic/libc/kernel/android/scsi
-isystem bionic/libc/kernel/android/uapi
-c-Werror=implicit-function-declaration
-DANDROID-fmessage-length=0
-W-Wall-Wno-unused-Winit-self
-Wpointer-arith-no-canonical-prefixes
-DNDEBUG-UDEBUG-fno-exceptions
-Wno-multichar-O2-g-fno-strict-aliasing
-Werror=date-time-
external/openssh/*.c
其中,在上述out/build-ums***_1h10_Natv.ninja文件的部分内容信息中,external/openssh/*.c为待检测的源代码文件;-I参数用于设置待检测的源代码文件(external/openssh/*.c)所需的头文件的路径;-D参数用于设置待检测的源代码文件(external/openssh/*.c)所需的宏定义。另外,上述out/build-ums***_1h10_Natv.ninja文件还包括除特定的头文件的路径和特定的宏定义外的其他内容信息,如-isystem参数、-c参数、-Werror参数、-DNDEBUG参数等所设置的内容信息。
可选的,将项目代码文件中的Blueprint文件转换成Ninja格式的组织文件以得到第二类Ninja文件,可以包括:通过Soong工具和/或Blueprint工具将将项目代码文件中的Blueprint文件转换成Ninja格式的组织文件以得到第二类Ninja文件。
具体的,根据第二类组织文件确定代码检测工具所需执行的项目配置文件,可以包括:从第二类组织文件的内容信息中提取目标内容信息,目标内容信息包括以下至少之一:在项目代码文件中待检测的源代码文件列表的目录、源代码文件列表中的各源代码文件所需的头文件的路径的目录、源代码文件列表中的各源代码文件所需的宏定义的目录;将目标内容信息保存成JSON文件;将JSON文件按照项目代码文件定义的各模块所指定的内容信息进行提取以生成项目配置文件。
需要说明的是,首先,组织文件的内容信息主要包括一些代码文件的目录。由于第二类组织文件可能还包括除特定的头文件的路径和特定的宏定义外的其他内容信息,因此为了提高代码检索效率,本申请需要从第二类组织文件的内容信息中提取出待检测的源代码文件的目录、该源代码文件所需的头文件的路径的目录、该源代码文件所需的宏定义的目录等中的至少之一以作为目标内容信息。
示例性的,在对上述out/build-ums***_1h10_Natv.ninja文件的部分内容信息进行提取之后,目标内容信息可以包括如下:
-D__LIBM_API__=10000
-D__LIBDL_API__=10000
-Iexternal/libcxxabi/include
-I system/core/include
-I system/media/audio/include
-I hardware/libhardware/include
-I hardware/libhardware_legacy/include
-I hardware/ril/include
-I frameworks/native/include
-I frameworks/native/opengl/include
external/openssh/**.c
其次,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于保存、检索、处理和编写。当采用代码检测工具进行代码检测时,代码检测工具能够在JSON文件中快速找到待检测的源代码文件、该源代码文件所依赖的头文件的目录、该源代码文件所依赖的宏定义的目录等。基于此,为了提高代码检测效率,本申请需要将目标内容信息保存成JSON文件。
示例性的,以JSON文件为ninja_info.json文件为例,保存成ninja_info.json文件的内容信息,具体如下:
最后,由于Android项目通常涉及几万至几十万的代码文件,因此需要将Android项目进行模块化设计,从而通过模块化提高项目开发的效率。其中,项目代码文件所定义的各类模块可以是预先定义好的项目。
另外,对于项目代码文件所定义的各模块所指定的内容信息,可以理解为,由于不同模块具有不同的功能,而不同模块所指定的内容信息包含不同的源代码文件的目录以及其依赖的头文件的目录和宏定义的目录等,因此将JSON文件作为处理对象,并按照各模块所指定的内容信息对该处理对象进行提取,从而实现按照各模块所指定的内容信息进行代码检测,实现模块化的代码检测,进一步提高代码检测的效率。
例如,若JSON文件的内容信息包含两个待检测的源代码文件的目录以及其依赖的头文件的目录和宏定义的目录,而某个模块所指定的内容信息包含该两个源代码文件中的一个,则将该JSON文件按照该模块所制定的内容信息进行提取以生成的项目配置文件只配置有一个待检测的源代码文件以及其依赖的头文件的目录和宏定义的目录。
示例性的,以JSON文件为ninja_info.json文件为例,生成项目配置文件的方法,具体如下:
python ninja_info.json module_name
其中,module_name为项目代码文件所定义的模块。然后,将ninja_info.json文件和module_name作为参数传递到由python编写的脚本文件,实现按照module_name所指定的内容信息对ninja_info.json文件的内容信息进行提取,从而生成项目配置文件。
S330、根据代码检测工具对应的命令执行项目配置文件以检测源代码文件列表中的代码。
需要说明的是,根据码检测工具对应的命令执行项目配置文件,输出针对该项目配置文件所配置的源代码文件列表中的代码的检测报告。其中,该检测报告包括语义缺陷、告警、安全漏洞、故障、不一致、不可移植的结构、冗余代码等信息。
示例性的,以代码检测工具为PC-lint Plus或者PC-lint为例,对执行项目配置文件进行说明,具体如下:
pclp project.lnt
其中,pclp为PC-lint Plus或者PC-lint对应的用于执行project.lnt的命令;project.lnt为项目配置文件。
可以看出,获取项目代码文件和代码检测工具;根据项目代码文件确定代码检测工具所需执行的项目配置文件;根据代码检测工具对应的命令执行项目配置文件以检测源代码文件列表中的代码。由于项目配置文件用于配置以下至少之一的目录信息:在项目代码文件中待检测的源代码文件列表、源代码文件列表中的各源代码文件所需的头文件的路径、源代码文件列表中的各源代码文件所需的宏定义,因此当该项目配置文件配置有源代码文件列表(即由至少一个源代码文件所组成的目录)时,在执行该项目配置文件之后,将该源代码文件列表中的各源代码文件进行代码检测,从而通过项目配置文件实现对项目代码文件中需要检测的源代码文件进行预定义或模块化,避免对项目代码文件中的整个源代码文件进行检测,进而有利于缩减人力成本,提高代码检测效率和准确性。
另外,由于每个源代码文件可能需要(依赖)特定的头文件和/或特定的宏定义,因此该项目配置文件中还需要配置源代码文件所需的头文件的路径和/或源代码文件所需的宏定义等目录信息,避免因缺少特定的头文件和/或特定的宏定义而导致源代码文件的检测失败,从而有利于保证代码检测的准确性。
上述主要从方法侧执行过程的角度对本申请实施例的方案进行了介绍。可以理解的是,电子设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该知悉,结合本文中所提供的实施例描述的各示例的方法、功能、模块、单元或者步骤,本申请能够以硬件或者硬件与计算机软件的结合形式来实现。某个方法、功能、模块、单元或者步骤究竟以硬件或计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以对每个特定的应用使用不同方法来实现所描述的方法、功能、模块、单元或者步骤,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对电子设备进行功能单元/模块的划分。例如,可以对应各个功能划分各个功能单元/模块,也可以将两个或两个以上的功能集成在一个功能单元/模块中。上述集成的功能单元/模块既可以采用硬件的方式实现,也可以采用软件程序的方式实现。需要说明的是,本申请实施例中对功能单元/模块的划分是示意性的,只是一种逻辑功能划分,而实际实现时可以有另外的划分方式。
在采用集成的单元/模块的情况下,图4提供一种项目代码检测装置的功能单元组成框图。项目代码检测装置400,具体包括:处理单元420和通信单元430。处理单元420用于对项目代码检测装置400的动作进行控制管理,例如,处理单元420用于支持项目代码检测装置执行图3中的部分或全部步骤,以及用于本文所描述的技术的其它过程。通信单元430用于支持项目代码检测装置400与其他设备的通信。项目代码检测装置400还可以包括存储单元410,用于存储其所需的程序代码和数据。
其中,处理单元420可以是处理器或控制器,例如CPU、通用处理器、DSP、ASIC、FPGA、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请实施例所描述的各种示例性的逻辑方框、模块和电路。另外,处理单元420也可以是实现计算功能的组合,例如包含一个或多个微处理器组合、DSP和微处理器的组合。通信单元430可以是通信接口、收发器和收发电路等。存储单元410可以是存储器。当处理单元420为处理器,通信单元430为通信接口,存储单元410为存储器时,本申请实施例所涉及的项目代码检测装置400可以为图5所示的电子设备。
具体的,处理单元420用于执行如图3所述方法实施例的任一步骤,且在执行诸如发送等数据传输时,可选择的调用通信单元430来完成相应操作。下面进行详细说明。
处理单元420用于:获取项目代码文件和代码检测工具;根据项目代码文件确定代码检测工具所需执行的项目配置文件,项目配置文件用于配置以下至少之一的目录信息:在项目代码文件中待检测的源代码文件列表、源代码文件列表中的各源代码文件所需的头文件的路径、源代码文件列表中的各源代码文件所需的宏定义;根据代码检测工具对应的命令执行项目配置文件以检测源代码文件列表中的代码。
需要说明的是,项目代码检测装置400执行的各个操作的具体实现可以参见上述图3所示的方法实施例的相应描述,在此不再赘述。
可以看出,本申请实施例中,获取项目代码文件和代码检测工具;根据项目代码文件确定代码检测工具所需执行的项目配置文件;根据代码检测工具对应的命令执行项目配置文件以检测源代码文件列表中的代码。由于项目配置文件用于配置以下至少之一的目录信息:在项目代码文件中待检测的源代码文件列表、源代码文件列表中的各源代码文件所需的头文件的路径、源代码文件列表中的各源代码文件所需的宏定义,因此当该项目配置文件配置有源代码文件列表(即由至少一个源代码文件所组成的目录)时,在执行该项目配置文件之后,将该源代码文件列表中的各源代码文件进行代码检测,从而通过项目配置文件实现对项目代码文件中需要检测的源代码文件进行预定义或模块化,避免对项目代码文件中的整个源代码文件进行检测,进而有利于缩减人力成本,提高代码检测效率和准确性。
另外,由于每个源代码文件可能需要(依赖)特定的头文件和/或特定的宏定义,因此该项目配置文件中还需要配置源代码文件所需的头文件的路径和/或源代码文件所需的宏定义等目录信息,避免因缺少特定的头文件和/或特定的宏定义而导致源代码文件的检测失败,从而有利于保证代码检测的准确性。
具体的,在检测根据检测项目代码文件确定检测代码检测工具所需执行的项目配置文件方面,处理单元420具体用于:将检测项目代码文件中的第一类组织文件进行格式转换以得到第二类组织文件,检测第二类组织文件的内容信息用于将检测项目代码文件中待检测的检测源代码文件列表中的各源代码文件编译成二进制可执行文件;根据检测第二类组织文件确定检测代码检测工具所需执行的检测项目配置文件。
具体的,检测第一类组织文件包括Makefile文件和Blueprint文件,检测第二类组织文件包括第一类Ninja文件和第二类Ninja文件;在检测将检测项目代码文件中的第一类组织文件进行格式转换以得到第二类组织文件方面,处理单元420具体用于:将检测项目代码文件中的检测Makefile文件转换成Ninja格式的组织文件以得到检测第一类Ninja文件;将检测项目代码文件中的检测Blueprint文件转换成Ninja格式的组织文件以得到检测第二类Ninja文件。
具体的,在检测根据检测第二类组织文件确定检测代码检测工具所需执行的检测项目配置文件方面,处理单元420具体用于:从检测第二类组织文件的内容信息中提取目标内容信息,检测目标内容信息包括以下至少之一:在检测项目代码文件中待检测的检测源代码文件列表的目录、检测源代码文件列表中的各源代码文件所需的头文件的路径的目录、检测源代码文件列表中的各源代码文件所需的宏定义的目录,将检测目标内容信息保存成JSON文件;将检测JSON文件按照检测项目代码文件所定义的各模块所指定的内容信息进行提取以生成检测项目配置文件。
具体的,检测代码检测工具包括PC-lint Plus或者PC-lint,检测项目配置文件属于LIN文件。
具体的,在检测获取项目代码文件和代码检测工具之后,处理单元420用于还用于:获取编译器配置文件,检测编译器配置文件用于配置检测项目代码文件编译所需的编译器。
具体的,在检测获取编译器配置文件方面,处理单元420具体用于:根据检测代码检测工具中的编译器配置工具将所需编译器的路径作为参数进行传递以得到检测编译器配置文件。
下面介绍本申请实施例提供的一种电子设备的结构示意图,如图5所示。其中,电子设备500包括处理器510、存储器520、通信接口530和至少一个用于连接处理器510、存储器520、通信接口530的通信总线。
处理器510可以是一个或多个中央处理器CPU。在处理器510是一个CPU的情况下,该CPU可以是单核CPU,也可以是多核CPU。存储器520包括但不限于是随机存储记忆体(random access memory,RAM)、只读存储器(read-only memory,ROM)、可擦除可编程只读存储器(rrasable programmable read only memory,EPROM)或便携式只读存储器(compact disc read-only memory,CD-ROM),并且存储器520用于存储相关指令及数据。通信接口530用于接收和发送数据。
电子设备500中的处理器510用于读取存储器520中存储的至少一个程序521用于执行以下步骤:获取项目代码文件和代码检测工具;根据项目代码文件确定代码检测工具所需执行的项目配置文件,项目配置文件用于配置以下至少之一的目录信息:在项目代码文件中待检测的源代码文件列表、源代码文件列表中的各源代码文件所需的头文件的路径、源代码文件列表中的各源代码文件所需的宏定义;根据代码检测工具对应的命令执行项目配置文件以检测源代码文件列表中的代码。
需要说明的是,电子设备500执行的各个操作的具体实现可以参见上述图3所示的方法实施例的相应描述,在此不再赘述。
本申请实施例还提供一种计算机可读存储介质,其中,该计算机可读存储介质存储用于电子数据交换的计算机程序,该计算机程序可操作来使得计算机执行如上述方法实施例中记载的任一方法的部分或全部步骤。
本申请实施例还提供一种计算机程序产品,其中,该计算机程序产品包括计算机程序,该计算机程序可操作来使计算机执行如上述方法实施例中记载的任一方法的部分或全部步骤。该计算机程序产品可以为一个软件安装包。
需要说明的是,对于上述的各个实施例,为了简单描述,将其都表述为一系列的动作组合。本领域技术人员应该知悉,本申请不受所描述的动作顺序的限制,因为本申请实施例中的某些步骤可以采用其他顺序或者同时进行。另外,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作、步骤、模块或单元等并不一定是本申请实施例所必须的。
在上述实施例中,本申请实施例对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
本领域技术人员应该知悉,本申请实施例所描述的方法、步骤或者相关模块/单元的功能可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式来实现,也可以是由处理器执行计算机程序指令的方式来实现。其中,该计算机程序产品包括至少一个计算机程序指令,计算机程序指令可以由相应的软件模块组成,软件模块可以被存放于RAM、闪存、ROM、EPROM、EEPROM、寄存器、硬盘、移动硬盘、只读光盘(CD-ROM)或者本领域熟知的任何其它形式的存储介质中。该计算机程序指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输。例如,该计算机程序指令可以从一个网站站点、计算机、服务器或数据中心通过有线或无线方式向另一个网站站点、计算机、服务器或数据中心进行传输。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质、或者半导体介质(如SSD)等。
上述实施例中描述的各个装置或产品包含的各个模块/单元,其可以是软件模块/单元,可以是硬件模块/单元,也可以一部分是软件模块/单元,而另一部分是硬件模块/单元。例如,对于应用于或集成于芯片的各个装置或产品,其包含的各个模块/单元可以都采用电路等硬件的方式实现;或者,其包含的一部分模块/单元可以采用软件程序的方式实现,该软件程序运行于芯片内部集成的处理器,而另一部分(如果有)的部分模块/单元可以采用电路等硬件方式实现。对于应用于或集成于芯片模组的各个装置或产品,或者应用于或集成于终端的各个装置或产品,同理可知。
以上所述的具体实施方式,对本申请实施例的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请实施例的具体实施方式而已,并不用于限定本申请实施例的保护范围。凡在本申请实施例的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本申请实施例的保护范围之内。
Claims (9)
1.一种项目代码检测方法,其特征在于,包括:
获取项目代码文件和代码检测工具;
将所述项目代码文件中的第一类组织文件进行格式转换以得到第二类组织文件,所述第二类组织文件的内容信息用于将所述项目代码文件中待检测的源代码文件列表中的各源代码文件编译成二进制可执行文件;
根据所述第二类组织文件确定所述代码检测工具所需执行的项目配置文件,所述项目配置文件用于配置以下至少之一的目录信息:所述源代码文件列表、所述源代码文件列表中的各源代码文件所需的头文件的路径、所述源代码文件列表中的各源代码文件所需的宏定义;
根据所述代码检测工具对应的命令执行所述项目配置文件以检测所述源代码文件列表中的代码。
2.根据权利要求1所述的方法,其特征在于,所述第一类组织文件包括Makefile文件和Blueprint文件,所述第二类组织文件包括第一类Ninja文件和第二类Ninja文件;
所述将所述项目代码文件中的第一类组织文件进行格式转换以得到第二类组织文件,包括:
将所述项目代码文件中的所述Makefile文件转换成Ninja格式的组织文件以得到所述第一类Ninja文件;
将所述项目代码文件中的所述Blueprint文件转换成Ninja格式的组织文件以得到所述第二类Ninja文件。
3.根据权利要求1所述的方法,其特征在于,所述根据所述第二类组织文件确定所述代码检测工具所需执行的所述项目配置文件,包括:
从所述第二类组织文件的内容信息中提取目标内容信息,所述目标内容信息包括以下至少之一:在所述项目代码文件中待检测的所述源代码文件列表的目录、所述源代码文件列表中的各源代码文件所需的头文件的路径的目录、所述源代码文件列表中的各源代码文件所需的宏定义的目录,
将所述目标内容信息保存成JSON文件;
将所述JSON文件按照所述项目代码文件所定义的各模块所指定的内容信息进行提取以生成所述项目配置文件。
4.根据权利要求1所述的方法,其特征在于,所述代码检测工具包括PC-lint Plus或者PC-lint,所述项目配置文件属于LIN文件。
5.根据权利要求1所述的方法,其特征在于,在所述获取项目代码文件和代码检测工具之后,所述方法还包括:
获取编译器配置文件,所述编译器配置文件用于配置所述项目代码文件编译所需的编译器。
6.根据权利要求5所述的方法,其特征在于,所述获取编译器配置文件,包括:
根据所述代码检测工具中的编译器配置工具将所需编译器的路径作为参数进行传递以得到所述编译器配置文件。
7.一种项目代码检测装置,其特征在于,所述装置包括处理单元,所述处理单元用于:
获取项目代码文件和代码检测工具;
将所述项目代码文件中的第一类组织文件进行格式转换以得到第二类组织文件,所述第二类组织文件的内容信息用于将所述项目代码文件中待检测的源代码文件列表中的各源代码文件编译成二进制可执行文件;
根据所述第二类组织文件确定所述代码检测工具所需执行的项目配置文件,所述项目配置文件用于配置以下至少之一的信息:所述源代码文件列表、所述源代码文件列表中的各源代码文件所需的头文件的路径、所述源代码文件列表中的各源代码文件所需的宏定义;
根据所述代码检测工具对应的命令执行所述项目配置文件以检测所述源代码文件列表中的代码。
8.一种电子设备,其特征在于,包括处理器、存储器和通信接口,所述存储器存储有至少一个程序,并且所述至少一个程序由所述处理器执行,所述至少一个程序包括用于执行如权利要求1-6任一项所述的方法中的步骤的指令。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储用于电子数据交换的计算机程序和数据,其中,所述计算机程序和数据可操作来使得计算机执行如权利要求1-6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110746909.1A CN113485923B (zh) | 2021-06-30 | 2021-06-30 | 项目代码检测方法与装置、电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110746909.1A CN113485923B (zh) | 2021-06-30 | 2021-06-30 | 项目代码检测方法与装置、电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113485923A CN113485923A (zh) | 2021-10-08 |
CN113485923B true CN113485923B (zh) | 2022-12-27 |
Family
ID=77939189
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110746909.1A Active CN113485923B (zh) | 2021-06-30 | 2021-06-30 | 项目代码检测方法与装置、电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113485923B (zh) |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108459954B (zh) * | 2017-02-22 | 2022-08-26 | 腾讯科技(深圳)有限公司 | 应用程序漏洞检测方法和装置 |
CN107704394A (zh) * | 2017-09-30 | 2018-02-16 | 郑州云海信息技术有限公司 | 一种FindBugs代码检测方法及装置 |
CN110554965B (zh) * | 2019-09-05 | 2021-08-17 | 腾讯科技(深圳)有限公司 | 自动化模糊测试方法及相关设备、计算机可读存储介质 |
-
2021
- 2021-06-30 CN CN202110746909.1A patent/CN113485923B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN113485923A (zh) | 2021-10-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2021036735A1 (zh) | 显示用户界面的方法及电子设备 | |
WO2021027630A1 (zh) | 补丁方法、相关装置及系统 | |
US20240095000A1 (en) | Plug-In Installation Method, Apparatus, and Storage Medium | |
WO2022253158A1 (zh) | 一种用户隐私保护方法及装置 | |
US20230418630A1 (en) | Operation sequence adding method, electronic device, and system | |
CN113568634A (zh) | 应用优化的处理方法及处理装置 | |
CN111125602A (zh) | 页面构建方法、装置、设备和存储介质 | |
CN113656089B (zh) | 应用程序中的类验证方法和装置 | |
CN116483734B (zh) | 一种基于编译器的插桩方法、系统及相关电子设备 | |
CN116467221B (zh) | 一种基于解释器的插桩方法、系统及相关电子设备 | |
WO2021031862A1 (zh) | 一种数据处理方法及其装置 | |
CN116669064B (zh) | 无线协议测试方法及电子设备 | |
CN113485923B (zh) | 项目代码检测方法与装置、电子设备 | |
WO2021238376A1 (zh) | 功能包的加载方法、装置、服务器和电子设备 | |
WO2021052489A1 (zh) | 一种确定多核处理器中故障计算核的方法及电子设备 | |
CN114816973A (zh) | 调试代码的方法、装置、电子设备和可读存储介质 | |
CN115543276A (zh) | 一种用于实现软件开发的方法、系统以及电子设备 | |
CN115485685A (zh) | 应用程序安全检测方法、装置、存储介质及电子设备 | |
WO2024131486A1 (zh) | 性能分析方法、可读存储介质、程序产品及电子设备 | |
CN114006969B (zh) | 一种窗口启动方法和电子设备 | |
CN117982895A (zh) | 数据调用方法、装置、介质及设备 | |
CN116700811A (zh) | 应用的运行方法及相关装置 | |
CN118227431A (zh) | 性能分析方法、可读存储介质、程序产品及电子设备 | |
CN113377187A (zh) | 功耗优化参数配置方法、装置、存储介质与电子设备 | |
CN118259803A (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 |