选择静态代码分析工具

Dav*_*vid 60 c unix testing

我正在开发一个项目,我在UNIX环境中用C编码.我一直在使用lint工具来检查我的源代码.Lint已经存在了很长时间(自1979年以来),任何人都可以建议我可以使用更新的代码分析工具吗?优选地是免费的工具.

sve*_*vec 34

不要忽视编译器本身.

阅读编译器的文档,找到它可以提供的所有警告和错误,然后启用尽可能多的意义.

还要确保告诉编译器处理错误等警告,这样您就不得不立即修复它们.(gcc上的"-Werror")

另外:gcc上的"-Wall" 不会启用所有警告,不要被愚弄.

还要:查看valgrind(免费!) - 它"自动检测[s]许多内存管理和线程错误,并详细介绍你的程序."

Valgrind不是静态检查器,但它是一个很棒的工具! http://valgrind.org

  • 为什么这是接受的答案?如果我想检查资源安全性,如锁定/解锁怎么办?编译器无法做任何事情.valgrind是动态代码分析...... (19认同)

Mar*_*son 16

对于C代码,绝对应该使用Flexelint.我用了将近15年,并发誓.其中一个非常棒的功能是可以通过代码中的注释("/*lint -e123*/")有选择地关闭和打开警告.当你想要一些与众不同的东西时,这就成了一个强大的文档工具."我正在关闭警告X,因此,有一个很好的理由我正在做X."

对于任何有趣的C/C++问题,请查看他们网站上的一些示例,看看是否可以在不查看提示的情况下找出错误.

  • Flexelint非常昂贵. (10认同)
  • @nwp,我不会说它很贵.单座成本为1000美元(unix)或400美元(windows),它可能会为一个客户问题付出代价. (2认同)

Mat*_*kel 13

我听说过有关clang静态分析仪的好消息,IIRC使用LLVM作为它的后端.如果在您的平台上实现,那可能是一个不错的选择.

据我所知,它不仅仅是语法分析.例如,"自动错误查找".


Nic*_*ean 6

你可以使用cppcheck.它是一种易于使用的静态代码分析工具.
例如:
cppcheck --enable=all .
将检查当前文件夹下的所有C/C++文件.


Kri*_*ost 5

我们一直在使用Coverity Prevent查看C++源代码.

它不是一个免费的工具(虽然我相信它们提供免费扫描开源项目),但它是你会发现的最好的静态分析工具之一.我听说它在C上比在C++上更令人印象深刻,但它帮助我们避免了到目前为止的很多错误.


小智 5

我最近编制了一份我可以使用的所有静态分析工具列表,我仍然在评估它们.注意,这些主要是安全分析工具.

  • 它在这个术语的两个含义中都是免费的. (5认同)