淘宝商城(天猫)高级技术专家.3年研发+3年性能测试调优/系统测试+4年团队管理与测试架构、研发系统实践. 新舞台新气象, 深化测试基础架构及研发架构,希望能在某个技术领域成为真正的技术大牛。欢迎荐才http://bbs.51testing.com/viewthread.php?tid=120496&extra=&page=1 .邮件: jianzhao.liangjz@alibaba-inc.com,MSN:liangjianzhao@163.com.微博:http://t.sina.com.cn/1674816524

静态代码分析工具Cppcheck实践

上一篇 / 下一篇  2009-11-10 21:26:01 / 个人分类:linux管理与调整

       

  Cppcheck是一款开源c++静态代码分析工具,在检测源码时可根据规则就能挖掘出疑似缺陷, 帮开源项目发现的bug:

http://sourceforge.net/apps/mediawiki/cppcheck/index.php?title=Found_bugs

功能比较强大,使用很简单

 

下载安装cppcheck:

http://sourceforge.net/projects/cppcheck/files/

 

root安装

make & make install

试验环境

 

32linux , gcc版本为4.2.0, 运行cppcheck遇到错误.

[liangjz@b2b_plat_1367 ~]$ cppcheck hummock

cppcheck: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by cppcheck

 

转移到如下环境: 

[root@b2b_plat_1363 ~]# uname -a

Linux b2b_plat_13632.6.9-42.ELsmp #1 SMP Wed Jul 12 23:27:17 EDT 2006 i686 i686 i386 GNU/Linux

[root@b2b_plat_1363 ~]# gcc --version

gcc (GCC) 3.4.6 20060404 (Red Hat3.4.6-3)

 

可正常运行.

 

工程实践

 cppcheck扫描3个工程发现的潜在问题,并抽部份简单解析,确认有几个bug 

一 

 388 CDirectoryScan::~CDirectoryScan ()

   389 {

   390    if(m_findHandle != INVALID_HANDLE_VALUE) {

   391        FindClose(m_findHandle);

   392        m_findHandle = NULL;

   393    }  

   394        

   395    if (m_pSearch != NULL) {

   396        delete(m_pSearch);

 

     }

   }

 

   402 void CDirectoryScan::generateSearchPath(void)

   403 {  

   404    m_pSearch = new char[strlen(m_szSearchPath) + 1 + 2];

 

   402 void CDirectoryScan::generateSearchPath(void)

   403 {  

   404    m_pSearch = new char[strlen(m_szSearchPath) + 1 + 2];

 

  generateSearchPath 函数m_pSearch 是new数组, 析构函数为delete(m_pSearch),

       可判断为缺陷.

 

二 

 39 bool CMasterHA::amIMaster()

    40 {

    41    char cmd[255];

    42    sprintf(cmd, "/sbin/ifconfig | grep %s", m_serviceIP);

    43    FILE *fp = popen(cmd, "r");

    44    if (fp != NULL)

    45    {

    46        int len = fread(cmd, 1, 255, fp);

    47        fclose(fp);

    48        if (len == 0)

    49            return false;

    50        if (strstr(cmd, m_serviceIP) != NULL)

    51            return true;

    52    }

    53    return false;

    54 }

 

 可看到fppopen打开,但是关闭并不是采用pclose.

 


TAG: Linux linux

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar