【内存泄漏】- 2. 使用cppcheck+Jenkins检测c、c++内存泄漏
一、?什么是程序静态分析?? ? ? ? 程序静态分析是指在不运行代码的方式下,通过词法分析、语法分析、控制流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。 二、?程序静态分析是怎样检测内存泄漏的?静态分析工具相比编译器,对代码进行了更加严格的检查,像数组越界访问、内存泄漏、使用不当的类型转换等问题,都可以通过静态分析工具检查出来,我们甚至可以在分析工具的分析标准里定义代码的编写规范,在检测到不符合编写规范的代码时抛出告警,这些功能都是编译器没有的。 静态分析通常是寻找内存分配位置以及相应的释放点的配对,即:验证是否所有的路径都会存在正确的内存释放,一旦某条路径中未含有内存释放操作,静态分析工具就会记录并输出疑似内存泄漏的信息。 三、为什么使用cppcheck检测工具?cppcheck是一个命令行工具,它试图检测c/c++编译器没有看到的bug。它可以检查非标准的代码,包括各种编译器扩展,内联汇编代码等等。它的内部预处理器可以处理包括宏和一些预处理器命令。虽然Cppcheck是高度可配置的,但是你只需要在这个命令后加上源码的路径就可以使用它。 Cppcheck静态分析工具相对于其他工具,它可以在linux下快速安装,并且它的特点是,确保不会误报。结合我们xavier平台中c源码实际情况,使用cppcheck工具可以对每个c源码文件进行检测,避免在开发过程中因为代码编写考虑不周全导致内存泄漏的问题。 下图说明了静态程序分析在进行项目编码过程中所处的位置: 四、如何使用cppcheck检查c内存泄露Linux下安装cppcehck: sudo apt-get install cppcheck 以下例子演示当最后一个指针引用丢失的时候,其指向的空间尚未释放的情况: #include #include int main(int argc,char const *argv[]) { /* code */ double a; int * p; int b; int c[2]; b = 1; a = b; //使用不当的类型转换 p = (int *)malloc(10); //申请的内存未释放 c[2] = 1; //数组访问越界 printf("%dn",b); return 0; } cppcheck --enable=all --inconclusive --std=posix test_c_memory_leakage.c 五、如何使用cppcheck检测工具将结果图像化的显示尽管cppcheck是个命令行工具,在Jenkins中已经有cppcheck的插件,所以它可以配合jenkins使用。Jenkins可以对cppcheck检测后的结果进行处理,并且可以将结果图形化的显示,效果图如下图所示。 附链接:http://blog.csdn.net/jiang1986829/article/details/51328830 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |