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

===============>>#1 票数:33 已采纳

不要忽视编译器本身。

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

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

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

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

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

===============>>#2 票数:15

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

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

===============>>#3 票数:13

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

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

===============>>#4 票数:5

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

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

===============>>#5 票数:5

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

===============>>#6 票数:5

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

===============>>#7 票数:1

您可能会发现Uno工具很有用。 这是为数不多的免费非玩具选择之一。 它与lint,Flexelint等的不同之处在于关注少量的“语义”错误(空指针derefs,越界数组索引和未初始化变量的使用)。 它还允许用户定义的检查,例如锁定解锁规则。

我正在努力公开发布一个继承工具 Orion 内容不提供任何内容

===============>>#8 票数:1

类似于Lint的工具通常会遇到“误报”问题:它们报告的问题比实际存在的问题多得多。 如果真正有用的警告的比例太低,则用户学会忽略该工具。 更现代的工具花费了一些精力来关注最有可能/最有趣的警告。

===============>>#9 票数:1

您可以尝试CppDepend ,一个非常完整的静态分析器,可以通过VS插件,IDE或命令行在Windows和Linux上使用,它对于开源贡献者是免费的

===============>>#10 票数:1

PC-lint / Flexelint是非常强大且有用的静态分析工具,并且具有高度可配置性,但遗憾的是它不是免费的。

当第一次使用这样的工具时,它们会产生大量的警告,这使得很难区分主要和次要的警告。 因此,最好尽可能在项目早期开始在代码上使用该工具,然后尽可能频繁地在代码上运行它,这样您就可以在出现新警告时处理它们。

通过这样的持续使用,您很快就会学会如何编写代码,以确认工具应用的规则。

因此,我更喜欢像Lint这样运行相对较快的工具,因此鼓励持续使用,而不是使用较少繁琐的工具,如果有的话,最不常用。

===============>>#11 票数:0

根据Mac OS X手册页,gcc有一个“-Weffc ++”选项:

警告Scott Meyers的Effective C ++书籍违反以下风格指南:

[剪断]

我知道你问过C,但这是我所知道的最接近的......

===============>>#12 票数:0

Sparse是一种计算机软件工具,已在Linux上提供,旨在查找Linux内核中可能存在的编码错误。

Linux验证中心有两个活跃项目旨在提高可加载内核模块的质量。

  1. Linux驱动程序验证(LDV) - 用于Linux设备驱动程序的静态源代码验证的综合工具集。
  2. KEDR框架 - 用于动态分析和验证内核模块的可扩展框架。
  3. 另一个正在进行的项目是Linux文件系统验证,旨在开发用于验证Linux文件系统实现的专用工具集。

===============>>#13 票数:0

lint不断更新...所以为什么你想要一个更新的。

BTW flexelint 棉绒

===============>>#14 票数:0

天儿真好,

我完全同意在设置-Wall之后阅读和消化编译器告诉你的建议。

一个很好的静态分析工具是由David Wheeler编写的FlawFinder 它在寻找各种安全漏洞方面做得很好,

但是,它并不能取代有知识的人阅读您的代码。 正如大卫在他的网页上所说:“傻瓜用工具仍然是个傻瓜!”

干杯,

===============>>#15 票数:0

我发现通常最好使用多个静态分析工具来查找错误。 每个工具的设计都不同,他们可以找到彼此截然不同的东西。

有一些谈判的一些很好的讨论在这里 这是美国国土安全部举行的静态分析会议。

  ask by David translate from so

未解决问题?本站智能推荐:

1回复

GLib / GObject拦截错误/用于测试,报告或调试的结构代码

情况: 我正在工作场所升级一些代码。 该代码用于基于GMime的进程。 我们目前使用GMime 2.2,最近我将代码升级为使用GMime 2.4。 程序运行正常,不会崩溃,但是我得到了 GLib-GObject-CRITICAL **: g_object_unref: asser
3回复

如何使用Shell脚本(工具和技术)进行性能测试?

我有一个系统,出于性能测试的目的,必须对其施加负载。 可以通过HTTP通过LoadRunner创建一些负载。 但是,为了为系统生成实际的负载,我还需要使用命令行工具模拟用户,该工具使用非HTTP协议*与服务器通信。 * 编辑 :实际上它是HTTP,但是供应商已经通知我们,记录/脚本
2回复

特定于进程的/ etc / hosts [关闭]

我正在开发与其他服务对话的服务。 为了测试这些交互,我有一个伪造的http服务器。 我正在使用node.js并通过http请求进行测试。 测试是在流程外部运行的,因此我不能(也不想)模拟请求/响应。 到目前为止,我有一个环境变量,允许我在服务本身内切换主机。 但是,我不能将虚假请求
3回复

如何测试X Window Manager [关闭]

我试图为X Window System编写自己的(简单但很少有重要功能)窗口管理器。 但在写完基础(非常小)后,我遇到了测试问题。 我试过在虚拟机上测试,但这种方式很不舒服。 那么,如何在不登出当前会话的情况下测试窗口管理器?
5回复

用于旧版C / C ++的代码分析工具

在unix上寻找一些遗留的c / c ++代码的代码分析工具,专门用于识别依赖关系 具体功能 特定的(包括?)文件 文件/套接字I / O调用等 来自根等的函数依赖树
4回复

用于确定ac / c ++代码中的内存泄漏的工具[关闭]

在unix环境中,是否有任何工具可以轻松分析代码,并提到代码的某些部分可能存在内存泄漏。 HP-UX / AIX / Solaris上
5回复

检测内存泄漏的工具[关闭]

如purify和valgrind等内存泄漏检测工具如何工作? 我如何设计和实现自己的工具?
1回复

C语言的前向切片工具[关闭]

我正在寻找C语言的前向切片工具。 当我在谷歌搜索时,我没有找到任何结果。 我本来想访问Wisconsin Program-Slicing Tool Version 1.1,但是这个工具没有发布。 任何其他工具都可以提供前向切片C程序的功能吗?
1回复

使用CUNIT进行测试-演练分析/代码覆盖率

我想用CUnit测试一些代码。 有谁知道是否可以进行人行横道分析? 我想要一些东西,也就是说,您已经测试了80%的功能。 必须确保测试达到100%的覆盖率。
6回复

是否有适用于C / C ++的开源BDD工具? [关闭]

我喜欢Ruby RSpec BDD开发风格。 使用C / C ++有没有什么好的工具呢?