在 Linux / Windows平台中调试 C/C++ 内存泄漏方法(2)

代码静态扫描和分析的工具比较多,比如 splint, PC-LINT, BEAM 等。因为 BEAM 支持的平台比较多,这以 BEAM 为例,做个简单介绍,其它有类似的处理过程。

BEAM 可以检测四类问题: 没有初始化的变量;废弃的空指针;内存泄漏;冗余计算。而且支持的平台比较多。

BEAM 支持以下平台:

Linux x86 (glibc 2.2.4) Linux s390/s390x (glibc 2.3.3 or higher) Linux (PowerPC, USS) (glibc 2.3.2 or higher) AIX (4.3.2+) Window2000 以上


清单2. 用作 Beam 分析的代码

#include <stdio.h>   #include <string.h>   #include <stdlib.h>    int *p;    void   foo(int a)    {      int b, c;      b = 0;      if(!p)         c = 1;      if(c > a)        c += p[1];    }    int LeakTest(char * Para)    {            char * Logmsg = new char[128];            if((Para==NULL)||(Logmsg == NULL))                    return -1;                    sprintf(Logmsg,"LeakTest routine exit: '%s'.\n", Para);                    return 0;    }    int   main(int argc,char **argv )    {            char szInit [] = "testcase1";            LeakTest(szInit);            return 0;    }  

下面以 X86 Linux 为例,代码如清单 2,具体的环境如下:

OS: Red Hat Enterprise Linux AS release 4 (Nahant Update 2)

GCC: gcc version 3.4.4

BEAM: 3.4.2; https://w3.eda.ibm.com/beam/

可以把 BEAM 看作一个 C/C++ 编译器,按下面的命令进行编译 (前面两个命令是设置编译器环境变量):

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwffzg.html