开源静态代码分析:Cppcheck with Eclipse

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 54w+ 字,讲解图 2476+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 1900+ 小伙伴加入学习 ,欢迎点击围观

我有一个挑战要问你:你能在以下来源中发现问题吗?

 TMOUT1_CounterHandle TMOUT1_GetCounter(TMOUT1_CounterType nofTicks) { TMOUT1_CounterHandle handle; CS1_CriticalVariable(); handle = 0; if (nofTicks==0) { nofTicks = 1; /* wait at least for one tick, otherwise will timeout immediately */ } CS1_EnterCritical(); while (!TMOUT1_FreeCounters[handle] && handle<TMOUT1_NOF_COUNTERS) { handle++; } if (handle<TMOUT1_NOF_COUNTERS) { TMOUT1_FreeCounters[handle]=FALSE; TMOUT1_Counters[handle] = nofTicks; } CS1_ExitCritical(); if (handle==TMOUT1_NOF_COUNTERS) { return TMOUT1_OUT_OF_HANDLE; } return handle; }

不?好吧,我也没有第一次发现这个问题。然而,这个博客的一位读者做到了:他使用了一个名为“cppcheck”的很酷的工具:该工具报告了以下内容:

数组索引句柄在限制检查之前使用

多么酷啊?我糟糕的编程风格不太酷:-(。至少修复很容易:-)。

Cppcheck 可以发现许多编码错误、可移植性问题等等。 Cppcheck 为我在 Freescale USB Stack 中发现了这个真正的问题:


Cpptest 发现的示例问题

所以这是一个糟糕而令人讨厌的错误:该函数返回 堆栈上变量的地址!!! 从该函数返回时,堆栈上的那个变量消失了,可能会导致系统崩溃。感谢您举报此问题,Cppcheck!

显然,编写该代码的开发人员并未使用 cppcheck,但我认为他们确实应该使用。我已经开始在我的代码库中使用 Cppcheck,我很惊讶它能够找到多少可能的问题!

所以这里是你如何安装和使用它......

Cppcheck 安装

Cppcheck 可以从 http://cppcheck.sourceforge.net/ 下载:


Cppcheck 网站

下载的 SourceForge 站点位于:https: //sourceforge.net/projects/cppcheck/ 。运行安装程序,它将安装 Cppcheck。

安装 Eclipse 插件

Eclipse 中的“Cppcheclipse”插件使 Cppcheck 的使用变得非常简单。此插件的网站位于:https: //code.google.com/a/eclipselabs.org/p/cppcheclipse 。按照说明进行操作
https://code.google.com/a/eclipselabs.org/p/cppcheclipse/wiki/Installation
或直接使用以下 Eclipse 更新站点 帮助 > 安装新软件 http://cppcheclipse.eclipselabs.org.codespot.com/svn/update/

在 Eclipse 工作区设置(窗口 > 首选项)中,指向 Cppcheck 二进制文件:


Cppcheck 的二进制路径

该面板还具有所有项目的全局设置,或者我可以设置项目特定选项。


cppcheck消息的配置

将 Cppcheck 与 Cppcheclipse 一起使用

在项目上运行 Cppcheck 很简单:只需使用上下文菜单而不是项目:


运行 CppCheck

这将检查项目中的源并在问题视图中报告问题。

尖端

如果出现配置过多的问题:

 ;;information;toomanyconfigs;Too many #ifdef configurations - cppcheck only checks 12 configurations. Use --force to check all configurations. For more details, use --enable=information.


Cppcheck 太多配置

为了避免这个问题,我可以限制配置的数量,并且我在项目属性中定义了 __GNUC__ :


受限配置

我建议阅读 cppcheck 手册,例如可以在 http://cppcheck.sourceforge.net/manual.html 找到。它有很多高级选项,以及如何直接在源代码中抑制警告/消息的方法等。

概括

令人惊奇的是,开源工具的酷炫宝藏有待探索! Cpptest 是一个功能强大的免费静态分析工具,可以轻松地与 Eclipse 一起使用,包括 Freescale 的 Kinetis Design Studio。它可能无法捕捉到每一个编程错误,开发人员手中应该有一堆工具。但是,早早杀死的每一个 bug 都少了一个 :-)。我也在使用 PC-lint(参见“ Eclipse 和 PC-lint:Linticator ”),但是除了 PC-lint 之外还有一个免费的开源工具更好。