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

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

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

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

 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 之外还有一个免费的开源工具更好。