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

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

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

在RT-Thread的scons上使用clang-tidy做靜態(tài)分析

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 2023-04-27 14:09 ? 次閱讀

測試代碼

先寫個簡單的代碼

main.c

 1#include
 2#include
 3#include
 4intmain(intargc,char*argv[])
 5{
 6char*tmp=(char*)malloc(argc);
 7if(tmp)
 8{
 9strncpy(tmp,argv[0],argc);
10printf("%s",tmp);
11if(argc>2)
12{
13free(tmp);
14}
15}
16printf("helloworld!
");
17return0;
18}

使用clang-tidy分析一下

 1#aptinstall-yclang-tidy
 2#clang-tidymain.c
 3Errorwhiletryingtoloadacompilationdatabase:
 4Couldnotauto-detectcompilationdatabaseforfile"main.c"
 5Nocompilationdatabasefoundin/work/analyzeroranyparentdirectory
 6fixed-compilation-database:Errorwhileopeningfixeddatabase:Nosuchfileordirectory
 7json-compilation-database:ErrorwhileopeningJSONdatabase:Nosuchfileordirectory
 8Runningwithoutflags.
 92warningsgenerated.
10/work/analyzer/main.c:12:3:warning:Calltofunction'strncpy'isinsecureasitdoesnotprovidesecuritychecksintroducedintheC11standard.Replacewithanalogousfunctionsthatsupportlengthargumentsorprovidesboundarycheckssuchas'strncpy_s'incaseofC11[clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]
11strncpy(tmp,argv[0],argc);
12^~~~~~~
13/work/analyzer/main.c:12:3:note:Calltofunction'strncpy'isinsecureasitdoesnotprovidesecuritychecksintroducedintheC11standard.Replacewithanalogousfunctionsthatsupportlengthargumentsorprovidesboundarycheckssuchas'strncpy_s'incaseofC11
14strncpy(tmp,argv[0],argc);
15^~~~~~~
16/work/analyzer/main.c:21:2:warning:Potentialleakofmemorypointedtoby'tmp'[clang-analyzer-unix.Malloc]
17printf("helloworld!
");
18^
19/work/analyzer/main.c:8:22:note:Memoryisallocated
20char*tmp=(char*)malloc(argc);
21^~~~~~~~~~~~
22/work/analyzer/main.c:10:5:note:Assuming'tmp'isnon-null
23if(tmp)
24^~~
25/work/analyzer/main.c2:note:Takingtruebranch
26if(tmp)
27^
28/work/analyzer/main.c6:note:Assuming'argc'is<=?2
29????????????????if(argc?>2)
30^~~~~~~~
31/work/analyzer/main.c:15:3:note:Takingfalsebranch
32if(argc>2)
33^
34/work/analyzer/main.c2:note:Potentialleakofmemorypointedtoby'tmp'
35printf("helloworld!
");
36^

compile_commands.json

還是有點用的,但我們RT-Thread項目中代碼那么多,一個一個輸入太麻煩了。

而且我們代碼多是arm和gcc的,而開發(fā)機多是x86,clang默認參數(shù)也分析不了。

剛才分析結(jié)果第1行就有提示,沒有找到compilation database,其實scons就可以生成

需要比較新的版本

1python3-mpipinstallscons
2python3-mSCons-v
3SConsbyStevenKnightetal.:
4SCons:v4.0.1.c289977f8b34786ab6c334311e232886da7e8df1,2020-07-1701:50:03,bybdbaddogonProDog2020
5SConspath:['/usr/lib/python3/dist-packages/SCons']
6Copyright(c)2001-2020TheSConsFoundation

然后更新下Scons腳本,讓生成compile_commands.json

1#gitdiffSConstruct
2+env.Tool('compilation_db')
3+env.CompilationDatabase()
4#makeabuilding
5DoBuilding(TARGET,objs)

run-clang-tidy

然后使用 run-clang-tidy 就可以自動分析所有的源代碼了。

輸出html

生成的結(jié)果是文本,查看起來還是比較費力的,目前有個簡單的轉(zhuǎn)換為html格式,

雖然也比較簡陋,但比文本還是方便多了。






審核編輯:劉清

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

    關(guān)注

    134

    文章

    9027

    瀏覽量

    366479
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1261

    瀏覽量

    39838
  • gcc編譯器
    +關(guān)注

    關(guān)注

    0

    文章

    78

    瀏覽量

    3346

原文標題:在RT-Thread的scons基礎(chǔ)上,使用clang-tidy做靜態(tài)分析

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    RT-Thread學(xué)習(xí)筆記】使用scons命令生成靜態(tài)

    RT-Thread學(xué)習(xí)筆記】如何使用scons 命令中buildlib的生成靜態(tài)庫?
    的頭像 發(fā)表于 07-27 09:13 ?5790次閱讀
    【<b class='flag-5'>RT-Thread</b>學(xué)習(xí)筆記】使用<b class='flag-5'>scons</b>命令生成<b class='flag-5'>靜態(tài)</b>庫

    基于RT-Thread的RoboMaster電控框架設(shè)計

    由于 RT-Thread 穩(wěn)定高效的內(nèi)核,豐富的文檔教程,積極活躍的社區(qū)氛圍,以及設(shè)備驅(qū)動框架、Kconfig、Scons、日志系統(tǒng)、海量的軟件包……很難不選擇 RT-Thread 進行項目開發(fā)。
    發(fā)表于 09-06 15:21 ?637次閱讀

    RT-Thread系統(tǒng)中的Scons構(gòu)建工具資料推薦

    ,RT-ThreadSCons標準接口的基礎(chǔ),提供了一組用于組織源碼工程的擴展接口。開發(fā)者使用時,可以借助
    發(fā)表于 05-07 15:35

    RT-Thread SCons編譯不穩(wěn)定問題debug總結(jié)

    摘要在使用RT-Thread的過程中,發(fā)現(xiàn)RT-Thread SCons存在編譯不穩(wěn)定的問題。源文件相同的情況下連續(xù)編譯,相鄰兩次生成的map文件和bin文件差異巨大、運行效果不同,
    發(fā)表于 09-19 16:44

    RT-Thread怎樣去使用clang-tidy靜態(tài)分析

    );}}printf("hello world!\\n");return 0;}使用clang-tidy分析一下
    發(fā)表于 09-20 15:33

    RT-Thread Smart已正式上線

    rt-smart內(nèi)核即可包含基本功能,同時也可定制裁剪。rt-smart用戶態(tài)應(yīng)用環(huán)境采用musl libc提供POSIX接口調(diào)用及C運行環(huán)境,延續(xù) RT-Thread 原有的生態(tài),使用sco
    的頭像 發(fā)表于 11-29 10:31 ?2767次閱讀

    RT-Thread 4.1.0的CMake構(gòu)建教程

    CMake 支持 RT-Thread 4.1.0 正式發(fā)布版中,添加了對 CMake 的支持。開發(fā)者可以使用 SCons 工具來生成 CMakeLists.txt 文件。 為何要支持 CMake
    的頭像 發(fā)表于 05-25 11:06 ?3281次閱讀

    RT-Thread全球技術(shù)大會:KconfigRT-Thread中的工作機制

    RT-Thread全球技術(shù)大會:KconfigRT-Thread中的工作機制 ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 14:49 ?1493次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會:Kconfig<b class='flag-5'>在</b><b class='flag-5'>RT-Thread</b>中的工作機制

    RT-Thread全球技術(shù)大會:關(guān)于SCons構(gòu)建引擎的主要部分介紹

    RT-Thread全球技術(shù)大會:關(guān)于SCons構(gòu)建引擎的主要部分介紹 ? ? ? ? 審核編輯:彭靜 ?
    的頭像 發(fā)表于 05-27 14:55 ?959次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會:關(guān)于<b class='flag-5'>SCons</b>構(gòu)建引擎的主要部分介紹

    RT-Thread全球技術(shù)大會:RT-Thread編寫測試用例

    RT-Thread全球技術(shù)大會:RT-Thread編寫測試用例 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 16:28 ?1438次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會:<b class='flag-5'>在</b><b class='flag-5'>RT-Thread</b><b class='flag-5'>上</b>編寫測試用例

    RT-Thread文檔_RT-Thread 簡介

    RT-Thread文檔_RT-Thread 簡介
    發(fā)表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡介

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發(fā)表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    RT-Threadscons基礎(chǔ)使用clang-tidy靜態(tài)分析

    剛才分析結(jié)果第1行就有提示,沒有找到compilation database,其實scons就可以生成
    發(fā)表于 07-22 14:18 ?603次閱讀

    基于 RT-Thread 的 RoboMaster 電控框架(一)

    由于 RT-Thread 穩(wěn)定高效的內(nèi)核,豐富的文檔教程,積極活躍的社區(qū)氛圍,以及設(shè)備驅(qū)動框架、Kconfig、Scons、日志系統(tǒng)、海量的軟件包……很難不選擇 RT-Thread 進行項目開發(fā)
    的頭像 發(fā)表于 09-19 19:55 ?717次閱讀

    基于RT-Thread的RoboMaster電控框架(二)

    由于 RT-Thread 穩(wěn)定高效的內(nèi)核,豐富的文檔教程,積極活躍的社區(qū)氛圍,以及設(shè)備驅(qū)動框架、Kconfig、Scons、日志系統(tǒng)、海量的軟件包
    的頭像 發(fā)表于 09-20 15:16 ?696次閱讀