[关键词]
[摘要]
在多核和并发技术得到广泛应用的今天,如何有效地调试并发程序,成为一个重要且亟待解决的研究课题.并发程序的不确定性及其行为的复杂性,使得传统的调试技术难以得到有效的应用;而软件维护场景中错误发现与错误调试过程的分离使得错误重现难以实现,面向缺陷报告的调试需求使得自动的错误定位技术难以应用,加剧了调试的困难.针对软件维护阶段由缺陷报告导向的程序调试场景,提出了可视化的并发程序调试方法.该方法能够根据缺陷报告中的信息对程序进行切片,缩小需要分析的代码范围;通过静态分析构造出程序行为的全局视图,帮助程序员发现隐含的程序执行路径;根据事件结构的语义简化程序行为视图,使得行为模型规模可控;根据图形中的分支,引导用户关注路径中的关键操作,从而更快地发现程序中的缺陷.与动态调试方法相比,该方法能够避免错误重现的代价.借助缺陷报告中的信息以及事件结构模型的特点,该方法能够尽量减少状态爆炸的发生.已开发出的交互式并发程序调试工具原型JESVis Debugger,初步实现了所提出的方法.
[Key word]
[Abstract]
The multi-core and concurrency technology are widely used today. How to debug concurrent programs effectively becomes an important topic. Due to nondeterministic and complex behavior of the concurrent program, traditional debugging techniques are inappropriate to apply. In bug-reports-oriented debugging scenarios, the separation of error detection and error debugging processes makes the failures more difficult to reproduce, which exacerbates the difficulty of debugging. For bug-report-oriented debugging scenarios, this paper proposes a method to visualize program behaviors to assist programmers to debug manually. The method reasons concurrent program behavior through static analysis, giving a global view to programmers to help them observe the behavior of the program and guiding their attention on suspicious operation. This approach can avoid the cost of reproducing concurrent failures. With the information in the bug report as well as the feature of the event structure model, it eliminates the state explosion problem that may arise during static analysis of concurrent programs. A prototype of interactive debugging tool for Java called JESVis Debugger, is developed as an initial realization of the proposed method.
[中图分类号]
[基金项目]
国家高技术研究发展计划(863)(2012AA011204);国家自然科学基金(61173005,61003029)