測試代碼
先寫個簡單的代碼
main.c
1#include2#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的,而開發機多是x86,clang默認參數也分析不了。
剛才分析結果第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
生成的結果是文本,查看起來還是比較費力的,目前有個簡單的轉換為html格式,
雖然也比較簡陋,但比文本還是方便多了。
審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
ARM
+關注
關注
135文章
9552瀏覽量
391835 -
RT-Thread
+關注
關注
32文章
1613瀏覽量
44821 -
gcc編譯器
+關注
關注
0文章
78瀏覽量
3987
原文標題:在RT-Thread的scons基礎上,使用clang-tidy做靜態分析
文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
熱點推薦
基于RT-Thread的RoboMaster電控框架設計
由于 RT-Thread 穩定高效的內核,豐富的文檔教程,積極活躍的社區氛圍,以及設備驅動框架、Kconfig、Scons、日志系統、海量的軟件包……很難不選擇 RT-Thread 進行項目開發。
發表于 09-06 15:21
?1574次閱讀
ENV的scons能生成RT-Thread studio工程嗎?
scons能生成RT-Thread studio工程嗎?教程中使用scons —target==MDK5來生成MDK工程,怎么生成RT-Thread Stdudio工程呢?
發表于 10-13 07:42
RT-Thread系統中的Scons構建工具資料推薦
,RT-Thread也在SCons標準接口的基礎上,提供了一組用于組織源碼工程的擴展接口。開發者在使用時,可以借助
發表于 05-07 15:35
RT-Thread SCons編譯不穩定問題debug總結
摘要在使用RT-Thread的過程中,發現RT-Thread SCons存在編譯不穩定的問題。在源文件相同的情況下連續編譯,相鄰兩次生成的map文件和bin文件差異巨大、運行效果不同,
發表于 09-19 16:44
在RT-Thread上怎樣去使用clang-tidy做靜態分析呢
);}}printf("hello world!\\n");return 0;}使用clang-tidy分析一下
發表于 09-20 15:33
RT-Thread Smart已正式上線
rt-smart內核即可包含基本功能,同時也可定制裁剪。rt-smart用戶態應用環境采用musl libc提供POSIX接口調用及C運行環境,延續 RT-Thread 原有的生態,使用sco
RT-Thread 4.1.0的CMake構建教程
CMake 支持 在 RT-Thread 4.1.0 正式發布版中,添加了對 CMake 的支持。開發者可以使用 SCons 工具來生成 CMakeLists.txt 文件。 為何要支持 CMake
在RT-Thread的scons基礎上使用clang-tidy做靜態分析
剛才分析結果第1行就有提示,沒有找到compilation database,其實scons就可以生成
發表于 07-22 14:18
?1315次閱讀
基于 RT-Thread 的 RoboMaster 電控框架(一)
由于 RT-Thread 穩定高效的內核,豐富的文檔教程,積極活躍的社區氛圍,以及設備驅動框架、Kconfig、Scons、日志系統、海量的軟件包……很難不選擇 RT-Thread 進行項目開發
基于RT-Thread的RoboMaster電控框架(二)
由于 RT-Thread 穩定高效的內核,豐富的文檔教程,積極活躍的社區氛圍,以及設備驅動框架、Kconfig、Scons、日志系統、海量的軟件包
在RT-Thread的scons上使用clang-tidy做靜態分析
評論