如何高效地进行多线程程序的失效诊断,至今仍是一个开放的问题。针对这个问题,本项目研究用户级半自动的失效诊断方法(1)针对纯软件支持的确定性重放高开销的问题,研究自适应的用户级确定性失效重放方法。该方法以确定性重放的用途和适用性两方面为驱动来有效地控制开销。针对服务于失效复现的目的,研究基于投机策略的确定性失效重放方法;同时针对程序特征,研究确定性重放策略的静态优选方法,提供对自适应方法的支持。(2)针对交互式调试低效率的问题,研究多线程程序失效的错误根源自动推导方法。该方法使用"假设-确认"的间接推导方式,首先利用线程敏感的切片技术,研究潜在错误根源的识别方法;然后基于执行记录,研究真实错误根源的确认方法。同时,建立并发错误传播模式并研究其在错误自动推导过程中的有效性。通过本项目的研究,为多线程程序的失效诊断提供关键的方法和技术,提高多线程程序开发的产能和可靠性。
multithreaded program;failure diagnosis;fault localization;deterministic replay;flow analysis
多核技术的普及,多线程程序成为一种广泛使用的编程模式。由于多线程程序执行的不确定性,多线程程序的错误诊断成为一个技术难题。本项目围绕多线程程序的失效重放和错位根源定位,从并发程序分析、半自动错误定位以及低开销确定性重放等方面开展研究,取得了五个方面的研究成果(1)针对交互式调试效率难以提高的问题,基于最小调试边界的概念,提出一种有效地自动错误定位方法;(2)针对多线程程序分析基础设施不足难以满足调试和定位需求的问题,提出高效精确的可能并发分析和基于补偿的流敏感上下文敏感的指针分析方法;(3)针对路径敏感分析技术的可扩展性不足的问题,提出了一种场景敏感、目标制导的高效分析方法,支持错误定位精度的提高,辅助失效根源定位;(4)为有效降低确定性重放的开销,提出了记录日志的规范检查方法及位置优化,并提出了基于测试的多线程程序同步识别方法;(5)提出了一种利用商用处理器中局部时钟进行线程间共享资源访问定序的方法,有效降低了确定性重放的开销。本项目的研究成果为多线程程序的失效诊断提供基础支撑技术和核心关键技术,提高多线程程序开发的产能和可靠性。在本项目的资助下,共发表论文17篇,其中包括领域国际著名会议CGO、PACT、ICSE等;完成5项专利的申请,其中1项已获授权;基于Open64搭建了程序错误自动定位工具原型,并培养学生9名,包括5名博士研究生。