转自 | 嵌入式大杂烩
之前给大家分享过嵌入式开发常用的代码静态分析工具,比如:pc-lint、ldra、vectorcast等。
今天再给大家分享一款不错的嵌入式静态代码扫描工具。
静态代码扫描?
静态代码扫描是指无需运行被测代码,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。
同样的,也有运行时诊断的工具,如valgrind等。
往期博文:valgrind仿真调试工具的使用
静态代码扫描工具有很多,主流如:
cppcheck。免费,开源,更新较慢,可自己拓展开发。
clang。免费,开源,更新较慢,可自己拓展开发。
tscancode 。免费,有专人维护,定期根据用户需求扩展规则或新增功能特性。
pclint。付费,商业软件,难以进行功能扩展。
coverity。付费,商业软件,难以进行功能扩展。
关于这几个工具各个指标的详细对比可参考文章:
本篇博文我们来介绍tscancode。
tscancode
tscancode是腾讯研发的静态代码扫描工具,最早的版本是基于 cppcheck 二次开发。之后又重新自研,不仅支持 c/c++,还支持 c#,lua 语言,在发掘 c/c++ 空指针、越界、未初始化、c#空引用、lua变量未初始化等比较有效。
tscancode 的 github链接:
https://github.com/tencent/tscancode
tscancode 可编译、运行于多个平台:windows/linux/mac。
tscancode 主要能够发现的问题如下:
自动变量检查:返回自动变量(局部变量)指针;
越界检查:数组越界返回自动变量(局部变量)指针;
类检查:构造函数初始化;
内存泄露检查;
空指针检查;
废弃函数检查;
下载得到:
各文件夹的内容:
release文件夹:存放编译后的二进制文件,包含有linux、mac、windows平台。
samples文件夹:存放一些代码示例,分别有c++、c#、lua语言。
trunk文件夹:存放tscancode源代码。
1、linux下使用tscancode
对应的linux二进制文件存放在如下路径:
tscancode-master/release/linux/tscancodev2.14.2395.linux
使用前需要加上执行权限:
chmod +x tscancode
例子:使用tscancode检测samples文件夹下关于cpp的一些例子。
在tscancode-master/release/linux/tscancodev2.14.2395.linux路径下执行命令:
./tscancode --xml --enable=all -q ../../../samples/cpp/ >scan_result.xml 2>&1
得到扫描结果文件:scan_result.xml。该文件复制到windows下使用表格工具打开可比较清晰地看到扫描结果:
例子:使用tscancode检测c语言例子。
在tscancode-master/release/linux/tscancodev2.14.2395.linux路径下新建一个文件:
test.c:
#include void test(void){ char buf[5] = {0}; for (size_t i = 0; i scan_result.xml 2>&1
结果:
2、windows下使用tscancode
最新版本的release下已经去掉windows下的可执行文件。可使用v2.14.24版本的tscancodev2.14.24.windows.exe。
人工智能很可能会引发行业的重大变革
华纳云浅析海外服务器的3种体系架构:SMP、NUMA、MPP
吃屎?NASA给登陆火星航天员准备的美食大礼包
小米首发索尼IMX989 明年大规模普及
华为邱真:5G智慧园区空间巨大,产业风口已至
分享一款不错的嵌入式静态代码扫描工具
为何说Bert是近年来NLP重大进展的集大成者?
热管理:突破功率密度障碍的 3 种方法
关于智能照明控制系统的设计以及应用
IDIADA机动车试验中心的检测能力范围正式获得更新
ART-Pi Studio工程下NimBLE软件包的使用
小米被动接入华为鸿蒙系统的可能性很小
LT1372/ LT1377 5V 至 12V 升压型转换器
物奇微电子持续拓展产品纵深领域 回顾物奇微电子六载芯路
苹果三款新iPhone即将开售 肾准备好了没?
法拉利塞博朋克2077概念车曝光!经典设计语言、未来派风格和科技感的结合
一个简单但非常有用的小前置放大器电路
利用电脑端软件WINCC控制台灯
为什么图片识别要将彩色图像灰度化?
索尼将于1月8日发布全新一代电视芯片