指针在C程序中应用广泛,指针引用错误多发且危害严重。目前代表性的检测工具由于使用方便性、检测精度不足以及难以处理大规模程序等原因,并不能满足实用需求。本文提出一种新型的错误检测方法,该方法基于域敏感、流敏感和上下文敏感的传播引擎,通过定义错误属性格、在源程序中对错误属性格值进行计算和传播来完成错误检测。在开放源码编译器Open64中实现了其原型系统Propagator。以空指针引用错误检测为实例研究,使用Apache、OpenSSH、gzip等应用领域广泛的典型应用为实验用例,与Saturn、Splint和Clang-SA进行对比,Propagator的平均检测时间仅为12秒,误报率平均仅为13%,远低于对比工具,没有发现漏报已知错误。上述结果表明,Propagator既提高了检测精度又保证了可伸缩性,具有很好的实用前景。
1