Code::Blocks 使用技巧.3-CppCheck插件

来源:互联网 发布:上海公交实时查询软件 编辑:程序博客网 时间:2024/05/22 05:16

是人就会犯错误,是程序员就经常有BUG。

如果是C++程序员,唉,BUG就更多了。

 

有些BUG是高层次的(譬如算法有误)……但也有些BUG,只不过是一时胡涂,或者忙中出错。

自从公司新来一位漂亮的女程序员(身材高挑,皮肤白皙),并且正好坐在我边上……我每100行代码的低级BUG量,急剧上升。

我决定用上Code::Blocks最近新带的插件工具:CppCheck。这是一款静态检查C++程序代码的工具。和C::B一样是一款开源的软件。

在SourceForge的主页是: sourceforge.net/apps/mediawiki/cppcheck/index.php。

Cppcheck is an analysis tool for C/C++ code. Unlike C/C++ compilers and many other analysis tools, we don't detect syntax errors. Cppcheck only detects the types of bugs that the compilers normally fail to detect. The goal is no false positives.

CppCheck其实是一个独立的工具,完全脱离任何IDE可以运行,早先我就是独立使用它,但自打C::B把它给集成了,感觉使用起来更是方便了不少。

新版的插件菜单中,可以找到CppCheck插件

       新版的插件菜单中,可以找到CppCheck插件,不过事前你可能需要单独下载,安装好CppCheck。下载地址:

   sourceforge.net/projects/cppcheck/

 

      为了演示,直接上手。搞一些低级错误,让CppCheck检查一下:     

Code:
  1. #include <iostream>  
  2. #include <fstream>  
  3.   
  4. using namespace std;  
  5.   
  6. int main()  
  7. {  
  8.     #define MAX_INT_ITEM_COUNT 100  
  9.       
  10.     int* p = new int[MAX_INT_ITEM_COUNT]; //分配了内存  
  11.       
  12.     for (int i=0; i<MAX_INT_ITEM_COUNT; ++i)  
  13.     {  
  14.         p[i] = MAX_INT_ITEM_COUNT-i;  
  15.     }  
  16.           
  17.     return 0;    //没释放 p 就byebye了  
  18. }  

        运行插件,Code::Blocks 消息栏将显示检查结果:

CppCheck运行示例效果

   说的是: 在main.cpp 的第17行,存在“内存泄漏的可能,相关对象是:p。”

   呵呵,继续改一下代码:

Code:
  1. //... 前面代码略  
  2.     int* p = new int[MAX_INT_ITEM_COUNT]; //分配了内存  
  3.       
  4.     for (int i=0; i<MAX_INT_ITEM_COUNT; ++i)  
  5.     {  
  6.         p[i] = MAX_INT_ITEM_COUNT-i;  
  7.     }  
  8.           
  9.     delete p; //正确写法应是:delete[] p;  
  10.           
  11.     return 0;     
  12. //...  

不需编译,再从C::B菜单里运行一下CppCheck插件……这回是:

main.cpp|17|mismatchAllocDealloc : error : Mismatching allocation and deallocation: p|

意思是:在main.cpp文件里,第17行(上代码片段中的09行),有个“不匹配的内存分配与释放”的错误,对象仍然是:p。(new[] 出来的东西,要用delete[]释放,你非要说用delete也可以,那是因为你在用一个超级有问题的编译器....)

 

注意事项:

A) 显然,它不能检查一切。

B)但有意思的,它经常能查出你自己都想不到问题。(偶尔让你一身冷汗,连续120分钟不敢再边写代码边斜眼看边上的美女)

C)当然啦,有的它检查出来了,但倒也不一定就是天条,毕竟C++程序是自由的,C++程序员个个都会搞些暗爽的代码写法。

结合 Code::Blocks的一些问题

很大的工程,或者工程有超大的文件(往往是工具生成的那种),它检查起来是超慢的,这时C::B会先是死等,慢慢的,就会变成等死。

 

 想了解有哪些人在用c::b,请参看 :

http://student.csdn.net/space.php?uid=112600&do=thread&id=10087

 -------------------------------------------------------------------------------

 如果您想与我交流,请点击如下链接成为我的好友:
http://student.csdn.net/invite.php?u=112600&c=f635b3cf130f350c