测试代码
先写个简单的代码
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文章
9626浏览量
394882 -
RT-Thread
+关注
关注
32文章
1667浏览量
45590 -
gcc编译器
+关注
关注
0文章
78浏览量
4052
原文标题:在RT-Thread的scons基础上,使用clang-tidy做静态分析
文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
基于RT-Thread的RoboMaster电控框架设计
由于 RT-Thread 稳定高效的内核,丰富的文档教程,积极活跃的社区氛围,以及设备驱动框架、Kconfig、Scons、日志系统、海量的软件包……很难不选择 RT-Thread 进行项目开发。
发表于 09-06 15:21
•1709次阅读
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
•1395次阅读
基于 RT-Thread 的 RoboMaster 电控框架(一)
由于 RT-Thread 稳定高效的内核,丰富的文档教程,积极活跃的社区氛围,以及设备驱动框架、Kconfig、Scons、日志系统、海量的软件包……很难不选择 RT-Thread 进行项目开发
基于RT-Thread的RoboMaster电控框架(二)
由于 RT-Thread 稳定高效的内核,丰富的文档教程,积极活跃的社区氛围,以及设备驱动框架、Kconfig、Scons、日志系统、海量的软件包
在RT-Thread的scons上使用clang-tidy做静态分析
评论