论文摘要:与平台无关的C程序内存错误检测工具的设计与实现
动态分配和释放内存的功能是 C编程的最强大功能之一, 由于具有这个灵活高效的优点,C语言从诞生到现在,在操作系统、服务器系统等各类软件系统的开发中,作为一种主流程序设计语言一直被广泛使用。但最大的长处也可能成为最大的弱点,正是因为灵活的内存管理机制,使C程序很容易产生内存方面的程序错误,而运行时内存错误是最严重也是最难查找和修正的代码错误之一。随着人们对软件质量的重视,检测并去除软件中的内存错误已经成为不可缺少的软件测试过程之一。国内外软件专家研究出各类检测内存错误的技术,比如:源代码插装法、目标码插装法和添加保护字节法等。软件市场中也涌现出许多C/C++程序内存错误检测工具,其中应用广泛的主要有:Insure++、IBM Rational PurifyPlus、Valgrind等。这些工具都具有强大的功能,在软件测试领域有各自的优点。但是大多数工具都是用C++语言实现的,可移植性很差,在unix或者linux平台运行的大部分工具都没有可视化的运行界面,而且部分工具的检测效率很低,特别是采用添加保护字节法的Valgrind,运行时要占用大量的内存空间,导致程序的运行效率大大降低。本论文介绍了一种与平台无关的C程序内存错误检测工具的设计与实现。与目前存在的工具比较,本工具有以下优点:一是可以跨平台运行,二是检测效率高,三是友好的用户界面。为了达到预期的目标,必须解决以下问题:一是选择合适的内存错误检测方法,二是使工具做到平台无关,三是提高工具的运行效率,四是提供友好的运行界面。针对以上要解决的问题,本工具采用了如下方案进行解决:一是采用了可靠性很高的源代码插装法,二是使用与平台无关的java语言编写程序解决跨平台问题,三是采用AVL树作为存储和检索工具提高工具运行效率,四是编写可视化的运行界面方便用户使用。本工具目前在一个实际的测试项目中接受了检验。被测试的程序是一个大型的数据处理解释系统的一个数据转换子系统,将近5万行C代码,用此工具测试之后,发现了687个内存错误,并且插装之后的代码运行效率没有明显降低,同时没有影响源代码的正确运行。