Valgrind是一个运行时诊断工具,它可以监视一个指定程序的活动并通知你在你的代码中可能存在的各种各样的内存管理问题。它类似于老式的ElectricFence工具(该工具将标准的内存分配函数替换为自己的函数以提高诊断能力),但被认为更容易使用并且在多个方面都提供了更丰富的功能——而且现在大多数主流Linux发行版都提供了该工具,所以在你的系统中使用它不需要花费太多时间,你只需安装它的软件包即可。
一个典型的Valgrind运行可能如下所示:
输出显示有80个字节的内存在程序结束时丢失了。通过指定leak-check选项,我们可以找到这个泄漏的内存来自哪里:
你应该养成习惯在可能的情况下使用诸如Valgrind这样的工具来对发现和修复内存泄漏以及其他编程错误的过程进行自动化。因为这里只对Valgrind进行了肤浅的介绍,所以你需要查看它的在线文档以更全面的了解其功能。事实上,越来越多的开放源码项目都依赖于Valgrind作为其回归测试(任何一个具有相当规模的软件项目的一个重要组成部分)的一部分。
自动化代码分析
有越来越多的第三方工具可以用于执行自动化代码分析,寻找软件中各种典型类型的缺陷。这类代码覆盖工具一般提供静态、动态或混合形式的代码分析。这意味着工具可能只是检查源代码以确定潜在的缺陷,或它可能试图钩入其他一些进程,以获取确定软件中缺陷可能存在位置所必需的数据。
基于斯坦福大学的checker的商业代码分析工具Coverity经常被用在Linux系统中。它钩入编译过程并提取大量有用的信息,这些信息可用于发现很多潜在的问题。事实上,Coverity为越来越多的开放源码项目提供免费代码分析。它甚至还发现了Linux内核中相当多的以前未被发现的错误。这些问题被发现后立即得到了解决。
静态代码分析的一个比较有趣的用途是查找源代码中是否有非法使用GPL代码的情况。Blackduck软件就提供了这样一个工具,它可以帮助你扫描你的大型软件项目,以查找借用自开放源码项目的源代码,并确定处理方法。这对兼容性测试以及其他的你的法律团队可能会提醒你进行的活动将非常有用。
评论