论文部分内容阅读
随着实际应用对并发软件需求的不断增加,并发程序的分析、理解、调试、测试和维护已经引起人们的广泛关注。并发程序由多个异步推进的并行成分组成,由于进程调度顺序以及通信机制本身的特性,使得程序在相同输入的不同执行中呈现不同的结果。这种并发程序执行的不确定性直接导致了程序错误的不可再现性,即后续的执行无法再现前次执行的错误。于是,以反复执行程序、重复再现故障为核心的传统循环调试方法变得不再可用。再现程序的执行行为是并发程序调试的重要问题。因此,我们将传统的循环调试方法加以扩充,引入追踪和重演的机制重放程序的某次执行,消除错误的不可再现性。我们分析了进程间消息传递的依赖关系,并阐述了消除并发程序执行不确定性的优化的追踪算法。同时,对于大型的并发程序,在调试过程中,如果每次重演都从程序的最开始执行,势必会造成资源的大量浪费,并且不能够满足程序员对调试响应速度的要求。针对这一问题,我们采用渐增式追踪/重演方法,引入容错系统中的检查点技术,在并发程序的追踪执行过程中周期性地插入独立式检查点,记录下各个进程的执行状态,并将进程分割成若干相互独立的检查点间隔。从而在重演的阶段,程序员可以任意地从自己感兴趣的检查点开始,反复重现程序的某段执行,直到发现错误的问题所在。在理论研究的基础上,我们研究和开发了并发程序分析和调试的辅助工具,包括并发程序的追踪/重演模块和进程执行轨迹的可视化引擎,适用于C语言编写的进程间以消息传递为主要通信机制的并发程序。并发程序的追踪/重演工具能够追踪程序的原始执行,并通过设立检查点记录各进程的执行状态,在重演的阶段可以有选择地重现程序的某执行片断;可视化引擎将并发进程的执行轨迹、检查点位置以及进程间的通信关系以简洁的图形方式显示给用户。