我有一个挑战要问你:你能在以下来源中发现问题吗?
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 之外还有一个免费的开源工具更好。