推薦一個好用的嵌入式靜態(tài)代碼掃描工具!
靜態(tài)代碼掃描?
靜態(tài)代碼掃描是指無需運行被測代碼,通過詞法分析、語法分析、控制流、數(shù)據(jù)流分析等技術(shù)對程序代碼進行掃描,找出代碼隱藏的錯誤和缺陷,如參數(shù)不匹配,有歧義的嵌套語句,錯誤的遞歸,非法計算,可能出現(xiàn)的空指針引用等等。
同樣的,也有運行時診斷的工具,如Valgrind等。
靜態(tài)代碼掃描工具有很多,主流如:
-
cppcheck。免費,開源,更新較慢,可自己拓展開發(fā)。 -
clang。免費,開源,更新較慢,可自己拓展開發(fā)。 -
TscanCode。免費,有專人維護,定期根據(jù)用戶需求擴展規(guī)則或新增功能特性。 -
pclint。付費,商業(yè)軟件,難以進行功能擴展。 -
coverity。付費,商業(yè)軟件,難以進行功能擴展。
關(guān)于這幾個工具各個指標的詳細對比可參考文章:
https://blog.csdn.net/wetest_tencent/article/details/51516347
本篇博文我們來介紹TscanCode。
TscanCode
TscanCode是騰訊研發(fā)的靜態(tài)代碼掃描工具,最早的版本是基于 cppcheck 二次開發(fā)。之后又重新自研,不僅支持 C/C++,還支持 C#,Lua 語言,在發(fā)掘 C/C++ 空指針、越界、未初始化、C#空引用、Lua變量未初始化等比較有效。
TscanCode 的 Github鏈接:
https://github.com/Tencent/TscanCode
TscanCode 可編譯、運行于多個平臺:Windows/Linux/Mac。
TscanCode 主要能夠發(fā)現(xiàn)的問題如下:
-
自動變量檢查:返回自動變量(局部變量)指針; -
越界檢查:數(shù)組越界返回自動變量(局部變量)指針; -
類檢查:構(gòu)造函數(shù)初始化; -
內(nèi)存泄露檢查; -
空指針檢查; -
廢棄函數(shù)檢查;
下載得到:
各文件夾的內(nèi)容:
-
release文件夾:存放編譯后的二進制文件,包含有Linux、Mac、Windows平臺。 -
samples文件夾:存放一些代碼示例,分別有C++、C#、Lua語言。 -
trunk文件夾:存放TscanCode源代碼。
1、Linux下使用TscanCode
對應(yīng)的Linux二進制文件存放在如下路徑:
TscanCode-master/release/linux/TscanCodeV2.14.2395.linux
使用前需要加上執(zhí)行權(quán)限:
chmod +x tscancode
例子:使用tscancode檢測samples文件夾下關(guān)于cpp的一些例子。
在TscanCode-master/release/linux/TscanCodeV2.14.2395.linux路徑下執(zhí)行命令:
./tscancode --xml --enable=all -q ../../../samples/cpp/ >scan_result.xml 2>&1
得到掃描結(jié)果文件:scan_result.xml。該文件復(fù)制到Windows下使用表格工具打開可比較清晰地看到掃描結(jié)果:
例子:使用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
結(jié)果:
2、Windows下使用TscanCode
最新版本的release下已經(jīng)去掉windows下的可執(zhí)行文件。可使用V2.14.24版本的TscanCodeV2.14.24.windows.exe。
可參照文章:
https://blog.csdn.net/m0_53168002/article/details/126596565
最近很多小伙伴找我要一些程序員必備資料,于是我翻出了壓箱底的寶藏,免費分享給大家!
掃描海報二維碼免費獲取。


