RISC-V IDE MRS2使用笔记(九):静态代码分析

RISC-V IDE MRS2使用笔记(九):静态代码分析

今天和大家分享一个提升开发效率的功能:MRS2 V2.3.0版本新增的静态代码分析!它基于clang-tidy,能在不运行程序的情况下提前发现内存错误、并发风险和性能隐患,让代码质量变得更可靠。

使用方法:要在 MRS2 中使用静态代码分析,只需右键单击要分析的源文件或者工程,然后选择"分析代码(analyze code)"。 就可以在"输出"窗口中获得结果列表。如果没有错误或警告,它将在output窗口显示为"没有问题被发现"。

在配置界面中,MRS2 默认仅启用 "Clang Static Analyzer Checks" 系列选项。我们可通过在项目上右键点击并选择"设置分析选项(Config Analyze Options)"(如图 1 所示),对 clang-analyzer 的各项检查规则进行启用或禁用的设置。如果想要了解每个选项的详细解释可单击"Detailed Introduction"跳转至官网进行查看(https://clang.llvm.org/docs/analyzer/checkers.html)。

①clang-analyzer-core.:通用检查器,例如零除检查器、空指针解引用检查器、未初始化值使用检查器等。这些检查器必须始终开启,因为其他检查器依赖它们。
②clang-analyzer-cplusplus.
:C++ Checkers.

③clang-analyzer-deadcode.DeadStores:检查存储到变量中的值是否之后从未被读取过

④clang-analyzer-fuchsia.HandleChecker:句柄用于标识资源。与指针类似,句柄可能会发生泄漏、双重释放或释放后使用的情况。此检查旨在发现此类问题。(Fuchsia 是谷歌目前正在开发的一款基于开源能力的操作系统。该checker能够发现 Fuchsia API 各种误用情况的检查器。)

⑤clang-analyzer-nullability.:用于警告空指针传递和解引用错误。
⑥clang-analyzer-option.
:用于可移植性、性能、可选安全性和特定编码风格规则的检查器。

⑦clang-analyzer-osx.:macOS 检查器。
⑧clang-analyzer-security.
:与安全相关的检查器。

security.ArrayBound (C, C++):报告对位于所访问区域(数组、堆分配区域、字符串字面量等)起始位置之前或结束位置之后的内存的越界访问。

security.FloatLoopCounter ©:当使用浮点值作为循环计数器时发出警告。

⑨clang-analyzer-unix.: POSIX/Unix checkers.
⑩clang-analyzer-webkit.
: WebKit代码库中问题的检查器。(WebKit是一个开源的网页浏览器引擎,适用于macOS、iOS和Linux系统。)

如果想要启用除默认配置外的其他检查项,也可以在快捷设置中进行添加check选项。

更多可用检查项可以参见clang-tidy 官方文档:(https://clang.llvm.org/extra/clang-tidy/checks/list.html)

使用效果:如果直接编译这段代码,编译器可能不会给出任何警告。当把应用程序下载到目标设备上,代码会发生非法操作,在程序运行时将出现除以 0 的情况,这可能导致系统bug。

如果使用静态代码分析则会进行提示:

可以看到,静态代码分析器能够捕获这一潜在问题,并以警告的形式通知开发者:根据当前源代码,程序中很可能会发生除以 0 的错误。可以通过单机输出条目跳转到源码位置

相关推荐
一只小透明啊啊啊啊6 天前
Socket、AIDL、SOME/IP
c++·mcu
2501_915909066 天前
移动端开发工具链怎么组合比较好,iOS、Android、跨端三套配置方案
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
youcans_6 天前
【嵌入式软件AI编程】16. Claude Code 与 VS Code 的协同开发
stm32·mcu·嵌入式·ai编程·claude code
RISCV_Explorer6 天前
RISC-V内存属性配置深度专题——Svpbmt页表位、PMA优先级与设备访问策略
risc-v
SL-staff6 天前
MQTT Topic权限越界排查指南:JVS-IOT中系统Topic与自定义Topic的鉴权机制与实操验证
mqtt·嵌入式开发·权限控制·物联网开发·协议分析·鉴权机制·jvs-iot
2501_915918416 天前
iOS编程用什么软件好?主流工具Xcode、AppCode、CodeRunner与新兴快蝎对比
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
橘色的喵7 天前
MCU SD 卡上电加载流程:从寄存器访问到文件系统挂载
mcu·文件系统·加载·sd
星野云联AIoT技术洞察7 天前
核心板、底板、开发板有什么区别:Rockchip 项目如何选择采购方式
开发板·嵌入式开发·rockchip·核心板·芯片选型·底板
WWJA王文举7 天前
Bootloader、App 和升级分区之间是什么关系?
stm32·freertos·嵌入式开发·在线升级
RISCV_Explorer7 天前
RISC-V处理器性能优化:从指令集到微架构的协同设计
后端·risc-v