一款不错嵌入式静态代码扫描工具

关注+星标公众,不错过精彩内容

a68e2f42d494afa5d3d42ddd1ba9ab32.gif

转自 | 嵌入式大杂烩

之前给大家分享过嵌入式开发常用的代码静态分析工具,比如:PC-lint、LDRA、VectorCAST等。

今天再给大家分享一款不错的嵌入式静态代码扫描工具。

静态代码扫描?

静态代码扫描是指无需运行被测代码,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。

同样的,也有运行时诊断的工具,如Valgrind等。

往期博文:Valgrind仿真调试工具的使用

静态代码扫描工具有很多,主流如:

  • cppcheck。免费,开源,更新较慢,可自己拓展开发。

  • clang。免费,开源,更新较慢,可自己拓展开发。

  • TscanCode 。免费,有专人维护,定期根据用户需求扩展规则或新增功能特性。

  • pclint。付费,商业软件,难以进行功能扩展。

  • coverity。付费,商业软件,难以进行功能扩展。

关于这几个工具各个指标的详细对比可参考文章:

https://blog.csdn.net/wetest_tencent/article/details/51516347

本篇博文我们来介绍TscanCode。

TscanCode

TscanCode是腾讯研发的静态代码扫描工具,最早的版本是基于 cppcheck 二次开发。之后又重新自研,不仅支持 C/C++,还支持 C#,Lua 语言,在发掘 C/C++ 空指针、越界、未初始化、C#空引用、Lua变量未初始化等比较有效。

TscanCode 的 Github链接:

https://github.com/Tencent/TscanCode

b9be17ceefa167cfefcafc817b22dfca.png

TscanCode 可编译、运行于多个平台:Windows/Linux/Mac。

TscanCode 主要能够发现的问题如下:

  • 自动变量检查:返回自动变量(局部变量)指针;

  • 越界检查:数组越界返回自动变量(局部变量)指针;

  • 类检查:构造函数初始化;

  • 内存泄露检查;

  • 空指针检查;

  • 废弃函数检查;

下载得到:

908e81edab07a2821b45497b23fcc955.png

各文件夹的内容:

  • release文件夹:存放编译后的二进制文件,包含有Linux、Mac、Windows平台。

  • samples文件夹:存放一些代码示例,分别有C++、C#、Lua语言。

  • trunk文件夹:存放TscanCode源代码。

1、Linux下使用TscanCode

对应的Linux二进制文件存放在如下路径:

TscanCode-master/release/linux/TscanCodeV2.14.2395.linux

0809035dff0db2c6fcda1abd8d542c6a.png

使用前需要加上执行权限:

chmod +x tscancode

例子:使用tscancode检测samples文件夹下关于cpp的一些例子。

3241809ababfe781f340e52691be8c0c.png

在TscanCode-master/release/linux/TscanCodeV2.14.2395.linux路径下执行命令:

./tscancode --xml --enable=all -q ../../../samples/cpp/ >scan_result.xml 2>&1

得到扫描结果文件:scan_result.xml。该文件复制到Windows下使用表格工具打开可比较清晰地看到扫描结果:

4442e8fb3c106bf4a1028333e138bed1.png 6781b25138c8eaa382b3be2c4847b300.png

例子:使用tscancode检测C语言例子。

在TscanCode-master/release/linux/TscanCodeV2.14.2395.linux路径下新建一个文件:

test.c:

#include <stdio.h>

void test(void)
{
    char buf[5] = {0};

    for (size_t i = 0; i < 10; i++)
    {
        buf[i] = 1;
    }
}

int main(int argc, char **argv)
{
    test();
    return 0;
}

扫描:

./tscancode --xml --enable=all -q ./test.c >scan_result.xml 2>&1

结果:

a96eccb847f3e3eeb6535ab1e4241b09.png

2、Windows下使用TscanCode

最新版本的release下已经去掉windows下的可执行文件。可使用V2.14.24版本的TscanCodeV2.14.24.windows.exe。

可参照文章:

https://blog.csdn.net/m0_53168002/article/details/126596565

------------ END ------------

5f0f6c5af24137244e539efccee1f37f.gif

●专栏《嵌入式工具

●专栏《嵌入式开发》

●专栏《Keil教程》

●嵌入式专栏精选教程

关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

5b41b7dda70ba29afc07e3102dd8995c.jpeg

90ef6bc68ffbe6f5752f02a31fdc6e83.png

点击“阅读原文”查看更多分享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值