一种组合式基于调用栈的程序切片方法
2011-08-24戚晓芳周晓宇徐晓晶张迎周
东南大学学报(自然科学版) 2011年6期
戚晓芳 周晓宇 徐晓晶 张迎周
(1东南大学计算机科学与工程学院,南京 210096)
(2南京邮电大学计算机学院,南京 210003)
程序切片最初是由Weiser提出的一种程序调试技术,它通过计算发生故障(程序执行出错)语句的切片来分解原有程序,确定影响该语句执行的语句集,并在该较小的语句集中查找和定位程序错误,以达到缩小程序错误排查范围、方便程序调试的目的[1-6].对程序的某次执行而言,影响发生故障语句的语句实际上只与当前调用上文相关,在遍历程序依赖图时,如果只考虑当前调用上文,那么可去除静态切片中因考虑所有调用上文而引入的冗余语句,提高分析精度.由于调用上文信息可从当前调用栈中提取,因此本文将这种切片称作基于调用栈的程序切片,该切片一般较小,平均约为静态切片的30%,且因无需记录、分析程序执行信息,其精度和效率达到较好的折中,可进行较为有效的程序调试[7-8].
基于调用栈的程序切片计算一般通过遍历程序系统依赖图(SDG)获取[7-9],对大程序来说,SDG庞大复杂,分析需耗费大量的时间和空间.例如,采用Codesurfer2.1切片工具进行实验,大于6万行的程序平均分析时间超过1 h,一些复杂度高的程序则需更长时间,如分析4万行左右的Crypto5.2.1 程序时间超过 5 h[10].为提高大程序调试的响应速度,本文对传统的基于SDG的切片方法进行改进,提出按需分析的策略,即通过仅分析程序中部分与切片标准相关的子程序,而不是所有子程序来提高……
登录APP查看全文