网站首页 > 技术文章 正文
静态代码扫描?
静态代码扫描是指无需运行被测代码,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。
同样的,也有运行时诊断的工具,如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
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 <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
结果:
2、Windows下使用TscanCode
最新版本的release下已经去掉windows下的可执行文件。可使用V2.14.24版本的TscanCodeV2.14.24.windows.exe。
可参照文章:
https://blog.csdn.net/m0_53168002/article/details/126596565
猜你喜欢
- 2025-01-14 一个不错的“短信验证”开源项目,开箱即用
- 2025-01-14 C++入门基础(万字总结)(建议收藏!!!)
- 2025-01-14 Java 中的静态字段和静态方法
- 2025-01-14 静态代码测试多语言特长生 Klocwork 2023.2更新快讯
- 2025-01-14 GO 编程:元编程之插件系统
- 2025-01-14 代码静态分析与安全检测工具COBOT
- 2025-01-14 VB脚本修改静态文本域内容:Wincc V14文本域显示任意文字的方法
- 2025-01-14 代码静态检查Findbugs使用说明
- 2025-01-14 VuePress - Vue驱动的静态网站生成器
- 2025-01-14 Java代码优化秘籍:单例模式与静态变量的正确使用,提升程序性能
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)