0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在RT-Thread的scons上使用clang-tidy做静态分析

RTThread物联网操作系统 来源:RTThread物联网操作系统 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的,而开发机多是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
    ARM
    +关注

    关注

    134

    文章

    9034

    浏览量

    366597
  • RT-Thread
    +关注

    关注

    31

    文章

    1266

    浏览量

    39868
  • gcc编译器
    +关注

    关注

    0

    文章

    78

    浏览量

    3349

原文标题:在RT-Thread的scons基础上,使用clang-tidy做静态分析

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RT-Thread学习笔记】使用scons命令生成静态

    RT-Thread学习笔记】如何使用scons 命令中buildlib的生成静态库?
    的头像 发表于 07-27 09:13 5815次阅读
    【<b class='flag-5'>RT-Thread</b>学习笔记】使用<b class='flag-5'>scons</b>命令生成<b class='flag-5'>静态</b>库

    基于RT-Thread的RoboMaster电控框架设计

    由于 RT-Thread 稳定高效的内核,丰富的文档教程,积极活跃的社区氛围,以及设备驱动框架、Kconfig、Scons、日志系统、海量的软件包……很难不选择 RT-Thread 进行项目开发。
    发表于 09-06 15:21 642次阅读

    RT-Thread系统中的Scons构建工具资料推荐

    RT-ThreadSCons标准接口的基础,提供了一组用于组织源码工程的扩展接口。开发者使用时,可以借助
    发表于 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
    的头像 发表于 11-29 10:31 2772次阅读

    RT-Thread 4.1.0的CMake构建教程

    CMake 支持 RT-Thread 4.1.0 正式发布版中,添加了对 CMake 的支持。开发者可以使用 SCons 工具来生成 CMakeLists.txt 文件。 为何要支持 CMake
    的头像 发表于 05-25 11:06 3287次阅读

    RT-Thread全球技术大会:KconfigRT-Thread中的工作机制

    RT-Thread全球技术大会:KconfigRT-Thread中的工作机制               审核编辑:彭静
    的头像 发表于 05-27 14:49 1494次阅读
    <b class='flag-5'>RT-Thread</b>全球技术大会:Kconfig<b class='flag-5'>在</b><b class='flag-5'>RT-Thread</b>中的工作机制

    RT-Thread全球技术大会:关于SCons构建引擎的主要部分介绍

    RT-Thread全球技术大会:关于SCons构建引擎的主要部分介绍         审核编辑:彭静  
    的头像 发表于 05-27 14:55 963次阅读
    <b class='flag-5'>RT-Thread</b>全球技术大会:关于<b class='flag-5'>SCons</b>构建引擎的主要部分介绍

    RT-Thread全球技术大会:RT-Thread编写测试用例

    RT-Thread全球技术大会:RT-Thread编写测试用例           审核编辑:彭静
    的头像 发表于 05-27 16:28 1443次阅读
    <b class='flag-5'>RT-Thread</b>全球技术大会:<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 简介
    发表于 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 介绍与移植
    发表于 02-22 18:31 9次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> SMP 介绍与移植

    RT-Threadscons基础使用clang-tidy静态分析

    刚才分析结果第1行就有提示,没有找到compilation database,其实scons就可以生成
    发表于 07-22 14:18 604次阅读

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

    由于 RT-Thread 稳定高效的内核,丰富的文档教程,积极活跃的社区氛围,以及设备驱动框架、Kconfig、Scons、日志系统、海量的软件包……很难不选择 RT-Thread 进行项目开发
    的头像 发表于 09-19 19:55 723次阅读

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

    由于 RT-Thread 稳定高效的内核,丰富的文档教程,积极活跃的社区氛围,以及设备驱动框架、Kconfig、Scons、日志系统、海量的软件包
    的头像 发表于 09-20 15:16 699次阅读