星期四, 八月 23, 2007

valgrind vs ...

我之前就对valgrind(linux下的一款自动查错工具)印象颇佳,今天又验证了一把:
#include <stdlib.h>
int main()
{
        char * a = (char *)malloc(100);
        a [101] = 0;
        free(a);
}
这个程序,在windows下用boundschecker检查,要在free的时候,才检测到内存越界,而且如果把a[101]改成更大的值,比如a[105](跳过guard字节),boundschecker居然检测不出来,这有点对不起这款工具的名称了。

而在Linux下,valgrind可以准确检测出越界,并且就是在越界发生的地方报告错误,方便定位。但valgrind也有很大的遗憾,它不能检测出数组的越界,而这正是boundschecker的强项。造成这种差异的原因在于,两种工具的检测原理不同,boundschecker使用代码插装,而valgrind使用虚拟机。

所以各种开发工具差别还是很大的,完成同样一件事,因为方法不同,得到的结果也不同,有时配合起来反而效果不错。

0 Comments:

发表评论

<< Home