论文部分内容阅读
程序切片技术是一种分析和理解程序的技术,其中面向过程程序切片技术已趋于成熟。但是面向对象程序切片技术,特别是面向对象程序动态切片技术起步较晚,目前仍处于初始阶段。传统的算法是通过建立程序的依赖图得到动态切片,但依赖图需要占用大量的空间,因此算法效率较低。Xiangyu Zhang等提出的LP(Limited Preprocess)动态切片算法既利用了程序中的依赖性信息,又不需要建立依赖图,具有节省内存空间,算法效率高的优点,但LP算法只能对面向过程程序进行切片。本文对面向对象动态程序切片技术进行了深入的研究,在利用LP算法优点点的基础上,结合C++语言特性对这个算法进行改进,提出了适合面向对象C++程序的动态切片算法。该算法扩展了函数的概念,把类的函数成员看作全局函数,解决了对函数成员进行切片的问题;扩展了函数调用的概念,把给对象发送消息看作函数调用,解决了C++程序中隐式调用函数的问题;采用了“object-variable”形式存储感兴趣的变量,解决了LP算法无法区分普通变量,对象的成员数据和对象变量的问题。改进后的算法可以有效地处理C++程序的多态,继承和封装等特性,和别的C++动态切片算法相比有较高的效率。在提出的算法基础上,设计并实现了一个C++程序动态切片原型系统(CPP_SLICER),该系统应用本文所研制的词法、语法分析器得到C++程序中的信息,应用程序插装技术得到程序的执行序列。经测试,该系统能够正确处理C++语言的特性。最后,为了使本系统能更好地应用到程序调试领域,应用COM(Component Object Model)技术把它以插件的形式集成到了VC6.0开发环境。