那曲檬骨新材料有限公司

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(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 ? 次閱讀

測(cè)試代碼

先寫個(gè)簡單的代碼

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

還是有點(diǎn)用的,但我們RT-Thread項(xiàng)目中代碼那么多,一個(gè)一個(gè)輸入太麻煩了。

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

剛才分析結(jié)果第1行就有提示,沒有找到compilation database,其實(shí)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 就可以自動(dòng)分析所有的源代碼了。

輸出html

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

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






審核編輯:劉清

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

    關(guān)注

    134

    文章

    9165

    瀏覽量

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

    關(guān)注

    31

    文章

    1305

    瀏覽量

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

    關(guān)注

    0

    文章

    78

    瀏覽量

    3424

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    RT-Thread學(xué)習(xí)筆記】如何使用scons 命令中buildlib的生成靜態(tài)庫?
    的頭像 發(fā)表于 07-27 09:13 ?6190次閱讀
    【<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è)計(jì)

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

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

    RT-ThreadSCons標(biāo)準(zhǔn)接口的基礎(chǔ),提供了一組用于組織源碼工程的擴(kuò)展接口。開發(fā)者使用時(shí),可以借助
    發(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文件差異巨大、運(yùn)行效果不同,
    發(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)核即可包含基本功能,同時(shí)也可定制裁剪。rt-smart用戶態(tài)應(yīng)用環(huán)境采用musl libc提供POSIX接口調(diào)用及C運(yùn)行環(huán)境,延續(xù) RT-Thread 原有的生態(tài),使用sco
    的頭像 發(fā)表于 11-29 10:31 ?2864次閱讀

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

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

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

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

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

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

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

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

    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,其實(shí)scons就可以生成
    發(fā)表于 07-22 14:18 ?714次閱讀

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

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

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

    由于 RT-Thread 穩(wěn)定高效的內(nèi)核,豐富的文檔教程,積極活躍的社區(qū)氛圍,以及設(shè)備驅(qū)動(dòng)框架、Kconfig、Scons、日志系統(tǒng)、海量的軟件包
    的頭像 發(fā)表于 09-20 15:16 ?809次閱讀
    吉祥娱乐城| 百家乐分析网| 通州市| 皇冠百家乐在线游戏| 百家乐官网网上投注代理商| 淘金百家乐的玩法技巧和规则| 百家乐官网园鼎丰娱乐城| 大发888国际娱乐网| 百家乐洗码软件| 网上百家乐官网博彩正网| 网页百家乐游戏下载| 游艇会百家乐官网的玩法技巧和规则 | 大发888游戏平台 送1666元礼金领取lrm | 大发888国际游戏平台| 真钱百家乐公司哪个好| 太阳城百家乐官网试玩优惠| 大发888游戏平台3403| 百家乐破解版下载| 优博百家乐官网现金网平台| 威尼斯人娱乐网反| 百家乐策略与心得| 百家乐官网桌子轮盘| 鸿胜博娱乐| 百家乐和局投注法| 澳门百家乐官网图形| 台南市| 黄金城百家乐免费下载| 2024九紫离火| 百家乐官网澳门路规则算法| 爱博娱乐| 威尼斯人娱乐城现金开户| 百家乐稳一点的押法| 百家乐官网娱乐网址| 胶南市| 大发888有银钱的吗| 百家乐开庄几率| 百盛百家乐官网的玩法技巧和规则| 喀喇沁旗| 雁荡棋牌游戏| 百家乐游戏什么时间容易出对| 澳门百家乐博彩网|