关于"静态代码分析"相信大部分的嵌入式开发者或多或少在日常的开发中都有所了解,但可能在实际的开发中我们使用的并不多也不习惯通过工具对我们编写的代码进行静态扫描而是完全依赖于在开发板上运行然后基于运行结果来判断自己所编写的代码的好坏、是否有bug. 然而这是远远不够的,本文章提供了一个基于开源平台"PlatformIO" 的静态代码分析工具. 希望能够让大家开始对于代码静态分析更加感兴趣,也能开始尝试使用该工具对我们的代码进行扫描分析!
静态代码分析
静态分析在我们的开发周期中已经变得越来越重要了. 它可以通过对源码进行分析来识别潜在的bug、漏洞和安全问题,而不需要再硬件上进行 测试和执行任何代码.
静态代码分析帮助降低了开发成本,使工程师能够检查缺陷的准确位置,并在开发周期的早起更加高效、更早的发现并解决问题. 它也可以确保我们的代码是否符合内部或者行业的标准!
Static Code Analysis 可以检测的代码缺陷(这里所针对是嵌入式的常用开发语言: C/C++)
- 潜在的对空指针的使用
- 可能的数组下标越界
- 未初始化对象(变量)的读取
- 定义但未使用的变量或者函数
- 内存越界
静态代码分析工具在实际工程的使用
环境准备
- 首先在阅读以下的文章内容前请先安装VS Code和VS Code下的插件PlatformIO IDE.
- 文章中的实例是基于Linux下进行的
- 测试工程创建,通过终端创建test目录,目录下的文件如下截图:
如上面截图所示,platformio.ini 是platformio对于静态代码分析工程的配置文件,在这次简单的试例中内容如下:
[env:tracy]
platform = native ## platform 是最关键的变量,native的意思是我们静态分析是基于本机的
check_patterns = ## 指定需要进行代码分析的文件or目录,默认是顶层的src目录下的文件
src/*.c
而src/main.c 只是简单的一个代码段
#include <stdio.h>
void test(void){
}
int main(int argc, char **argv){
printf("test-----\r\n");
int *a;
free(a);
}
- 通过VS Code打开我们创建的test目录
- 通过VS Code中的PlatformIO 插件加载test工程
按照下面截图中的1、2、3、4 步骤加载test工程(我这边多了个"Tracy"是因为我修改了PlatformIO的源码请忽略).
基于PlatformIO IDE进行静态代码分析
在通过上面的环境准备后,我们可以开始对test目录的代码进行分析了.
如下截图中的1、2、3、4、5步骤,
1 - 代码静态代码分析的界面
2 - 选择我们需要进行分析的test工程
3 - Environment选择为tracy,也就是platformio.ini配置文件中中evn所赋值的值
4 - 选上"Check Code"
5 - 点击"Inspect"按键,开始静态代码分析
操作完以上4个不走后,静态代码分析结果如下:
如截图中所示,分析出了三个缺陷!!!
总结
以上文章只是简单的展示了如何基于PlatformIO 进行静态代码分析,更多、更好的使用方式还需要一起进一步的尝试学习,有任何相关的问题也请留言沟通!
相关参考链接: