0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

分享一款不錯(cuò)的嵌入式靜態(tài)代碼掃描工具

strongerHuang ? 來(lái)源:嵌入式大雜燴 ? 2023-10-16 15:39 ? 次閱讀

轉(zhuǎn)自| 嵌入式大雜燴

之前給大家分享過(guò)嵌入式開發(fā)常用的代碼靜態(tài)分析工具,比如:PC-lint、LDRA、VectorCAST等。

今天再給大家分享一款不錯(cuò)的嵌入式靜態(tài)代碼掃描工具。

靜態(tài)代碼掃描?

靜態(tài)代碼掃描是指無(wú)需運(yùn)行被測(cè)代碼,通過(guò)詞法分析、語(yǔ)法分析、控制流、數(shù)據(jù)流分析等技術(shù)對(duì)程序代碼進(jìn)行掃描,找出代碼隱藏的錯(cuò)誤和缺陷,如參數(shù)不匹配,有歧義的嵌套語(yǔ)句,錯(cuò)誤的遞歸,非法計(jì)算,可能出現(xiàn)的空指針引用等等。

同樣的,也有運(yùn)行時(shí)診斷的工具,如Valgrind等。

往期博文:Valgrind仿真調(diào)試工具的使用

靜態(tài)代碼掃描工具有很多,主流如:

cppcheck。免費(fèi),開源,更新較慢,可自己拓展開發(fā)。

clang。免費(fèi),開源,更新較慢,可自己拓展開發(fā)。

TscanCode 。免費(fèi),有專人維護(hù),定期根據(jù)用戶需求擴(kuò)展規(guī)則或新增功能特性。

pclint。付費(fèi),商業(yè)軟件,難以進(jìn)行功能擴(kuò)展。

coverity。付費(fèi),商業(yè)軟件,難以進(jìn)行功能擴(kuò)展。

關(guān)于這幾個(gè)工具各個(gè)指標(biāo)的詳細(xì)對(duì)比可參考文章:

本篇博文我們來(lái)介紹TscanCode。

TscanCode

TscanCode是騰訊研發(fā)的靜態(tài)代碼掃描工具,最早的版本是基于 cppcheck 二次開發(fā)。之后又重新自研,不僅支持 C/C++,還支持 C#,Lua 語(yǔ)言,在發(fā)掘 C/C++ 空指針、越界、未初始化、C#空引用、Lua變量未初始化等比較有效。

TscanCode 的 Github鏈接:

https://github.com/Tencent/TscanCode

b6d91d4a-6742-11ee-939d-92fbcf53809c.png

TscanCode 可編譯、運(yùn)行于多個(gè)平臺(tái):Windows/Linux/Mac。

TscanCode 主要能夠發(fā)現(xiàn)的問(wèn)題如下:

自動(dòng)變量檢查:返回自動(dòng)變量(局部變量)指針;

越界檢查:數(shù)組越界返回自動(dòng)變量(局部變量)指針;

類檢查:構(gòu)造函數(shù)初始化;

內(nèi)存泄露檢查;

空指針檢查;

廢棄函數(shù)檢查;

下載得到:

b6e290f0-6742-11ee-939d-92fbcf53809c.png

各文件夾的內(nèi)容:

release文件夾:存放編譯后的二進(jìn)制文件,包含有Linux、Mac、Windows平臺(tái)。

samples文件夾:存放一些代碼示例,分別有C++、C#、Lua語(yǔ)言。

trunk文件夾:存放TscanCode源代碼。

1、Linux下使用TscanCode

對(duì)應(yīng)的Linux二進(jìn)制文件存放在如下路徑:

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

b6ec4c30-6742-11ee-939d-92fbcf53809c.png

使用前需要加上執(zhí)行權(quán)限:

chmod +x tscancode

例子:使用tscancode檢測(cè)samples文件夾下關(guān)于cpp的一些例子。

b6fd0566-6742-11ee-939d-92fbcf53809c.png

在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é)果:

b707e36e-6742-11ee-939d-92fbcf53809c.pngb716f782-6742-11ee-939d-92fbcf53809c.png

例子:使用tscancode檢測(cè)C語(yǔ)言例子。

在TscanCode-master/release/linux/TscanCodeV2.14.2395.linux路徑下新建一個(gè)文件:

test.c:

#include

voidtest(void)
{
charbuf[5]={0};

for(size_ti=0;i

掃描:

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

結(jié)果:

b71ae7e8-6742-11ee-939d-92fbcf53809c.png

2、Windows下使用TscanCode

最新版本的release下已經(jīng)去掉windows下的可執(zhí)行文件??墒褂肰2.14.24版本的TscanCodeV2.14.24.windows.exe。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5045

    文章

    18816

    瀏覽量

    298445
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3125

    瀏覽量

    42067
  • C++
    C++
    +關(guān)注

    關(guān)注

    21

    文章

    2085

    瀏覽量

    73301
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4670

    瀏覽量

    67761

原文標(biāo)題:一款不錯(cuò)嵌入式靜態(tài)代碼掃描工具

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    一款適合嵌入式工程師使用的在線工具

    一款適合嵌入式工程師使用的在線工具,工具有如下功能,如下圖所示: 1. 報(bào)文校驗(yàn)功能,如下圖所示 2. UDP服務(wù)端測(cè)試工具:該UD
    發(fā)表于 04-09 22:20

    一款基于Murphypinyin的嵌入式鍵盤設(shè)計(jì)

    本文根據(jù)手持終端的特點(diǎn),設(shè)計(jì)出一款矩陣鍵盤,并在Linux平臺(tái)下開發(fā)出鍵盤的驅(qū)動(dòng)程序。采用Qt/Embedded構(gòu)建圖形界面,通過(guò)對(duì)Qt/Embedded自帶輸入法的分析,結(jié)合Murphpinyin中文輸入法軟件包,構(gòu)建了一款可輸入數(shù)字、中/英文的
    發(fā)表于 04-28 06:50

    怎么設(shè)計(jì)一款ARM嵌入式汽車節(jié)能控制系統(tǒng)?

    ARM嵌入式汽車節(jié)能控制系統(tǒng)的工作原理是什么?怎么設(shè)計(jì)一款ARM嵌入式汽車節(jié)能控制系統(tǒng)?
    發(fā)表于 05-17 06:40

    分享一款不錯(cuò)的基于nRF24E1的嵌入式2.4GHz無(wú)線接入系統(tǒng)

    分享一款不錯(cuò)的基于nRF24E1的嵌入式2.4GHz無(wú)線接入系統(tǒng)
    發(fā)表于 05-27 06:06

    分享一款不錯(cuò)的基于嵌入式Web Server的無(wú)線數(shù)據(jù)采集系統(tǒng)

    分享一款不錯(cuò)的基于嵌入式Web Server的無(wú)線數(shù)據(jù)采集系統(tǒng)
    發(fā)表于 05-28 06:58

    如何從零開始開發(fā)一款嵌入式產(chǎn)品

    源:如何從零開始開發(fā)一款嵌入式產(chǎn)品原文地址:【轉(zhuǎn)】如何從零開始開發(fā)一款嵌入式產(chǎn)品作者:rainpad(20年的嵌入式經(jīng)驗(yàn)分享學(xué)習(xí),來(lái)自STM
    發(fā)表于 08-09 08:09

    介紹一下一款簡(jiǎn)單易用的嵌入式AI方案

    公司玩了大半年的嵌入式AI平臺(tái),現(xiàn)在產(chǎn)品進(jìn)入量產(chǎn)模式,也接觸了很多嵌入式方案,有了些心得體會(huì),本人不才,在這里介紹一下一款簡(jiǎn)單易用的嵌入式
    發(fā)表于 10-27 06:02

    怎樣挑選一款MCU平臺(tái)進(jìn)行嵌入式系統(tǒng)開發(fā)

    如今,嵌入式系統(tǒng)開發(fā)往往基于平臺(tái)模式。MCU平臺(tái)包括MCU及其相關(guān)器件(外延器件、配套器件等),集成開發(fā)環(huán)境(開發(fā)板、開發(fā)工具、中間件等),以及操作系統(tǒng)等。半導(dǎo)體廠商在推出一款MCU新產(chǎn)品時(shí),
    發(fā)表于 11-03 08:42

    推薦一款比較好的嵌入式開發(fā)板

    學(xué)習(xí)嵌入式,必不可少的工具就是塊開發(fā)板。對(duì)新手而言,學(xué)嵌入式用哪個(gè)開發(fā)板好,下面為大家推薦一款比較好的
    發(fā)表于 11-08 06:38

    如何快速上手一款新的嵌入式CPU芯片

    如何快速上手一款新的嵌入式CPU芯片(記錄CC2540開發(fā)經(jīng)歷)最新要開發(fā)個(gè)藍(lán)牙的氛圍燈,網(wǎng)上找了好久,都沒找到合適的芯片。要么是TI或者nordic的純BLE,不帶播放音樂。要么是帶音頻又帶數(shù)據(jù)
    發(fā)表于 12-23 07:45

    怎樣去設(shè)計(jì)一款RK3399Pro嵌入式主機(jī)呢

    怎樣去設(shè)計(jì)一款RK3399Pro嵌入式主機(jī)呢?RK3399Pro嵌入式主機(jī)有哪些性能呢?
    發(fā)表于 02-10 07:00

    嵌入式系統(tǒng)開發(fā)中的靜態(tài)分析

      由于嵌入式系統(tǒng)行業(yè)的快速增長(zhǎng),嵌入式設(shè)備的代碼質(zhì)量成為主要關(guān)注點(diǎn)之??紤]到嵌入式系統(tǒng)開發(fā)的特殊性(調(diào)試難度大、出錯(cuò)成本高等),開發(fā)人員
    的頭像 發(fā)表于 11-21 14:51 ?1119次閱讀

    靜態(tài)分析工具

    Analyzer`:Clang Static Analyzer是一款靜態(tài)代碼掃描工具,專門用于針對(duì)C,C++和Objective-C的程序進(jìn)
    的頭像 發(fā)表于 03-02 17:53 ?2350次閱讀
    <b class='flag-5'>靜態(tài)</b>分析<b class='flag-5'>工具</b>

    一款專業(yè)且全面的嵌入式開發(fā)調(diào)試工具

    不知道大家平時(shí)做嵌入式開發(fā)時(shí)用調(diào)試工具進(jìn)行調(diào)試,今天給大家分享一款專業(yè)且全面的嵌入式調(diào)試工具集:Micro-Lab。
    的頭像 發(fā)表于 04-15 14:10 ?1041次閱讀

    推薦一款專業(yè)且全面的嵌入式開發(fā)調(diào)試工具

    今天給大家分享一款專業(yè)且全面的嵌入式調(diào)試工具集:Micro-Lab在工作中,以什么樣的方式向領(lǐng)導(dǎo)匯報(bào)工作最直接高效呢?當(dāng)然是圖形界面!圖形界面更好表達(dá)個(gè)程序設(shè)計(jì)的邏輯思維,
    的頭像 發(fā)表于 04-20 10:00 ?807次閱讀
    推薦<b class='flag-5'>一款</b>專業(yè)且全面的<b class='flag-5'>嵌入式</b>開發(fā)調(diào)試<b class='flag-5'>工具</b>