[论文解读] Systematic Debugging of Attribute Grammars
本文提出两种AG-aware调试技术——算法调试与基于切片的调试,用于属性语法,通过基于查询的交互式精炼,使开发者能够系统性地定位错误的属性规则。该方法集成于可视化调试器Aki中,与传统方法相比显著减少了调试时间,实验表明在编译器模块中,错误定位速度提升了5至10倍。
Although attribute grammars are commonly used for compiler construction, little investigation has been conducted on debugging attribute grammars. The paper proposes two types of systematic debugging methods, an algorithmic debugging and slice-based debugging, both tailored for attribute grammars. By means of query-based interaction with the developer, our debugging methods effectively narrow the potential bug space in the attribute grammar description and eventually identify the incorrect attribution rule. We have incorporated this technology in our visual debugging tool called Aki.
研究动机与目标
- 为编译器构建中属性语法缺乏系统化调试支持的问题提供解决方案。
- 通过抽象属性求值器的底层实现细节,减轻开发者的认知负担。
- 提供一个高层级、交互式的调试环境,高效隔离出错误的属性规则。
- 评估混合调试技术在真实编译器开发工作流中的有效性。
提出的方法
- 通过将属性求值建模为递归的Synth函数调用,将算法调试适配至属性语法。
- 使用基于查询的交互方式验证或否定属性计算的正确性,从而缩小错误规则的范围。
- 应用基于切片的调试技术,从错误值反向追踪属性依赖,以识别错误规则。
- 将属性切片划分为子切片,并向开发者查询其正确性,以迭代方式缩小搜索空间。
- 在Squeak Smalltalk中实现系统,作为带有源代码可视化和颜色高亮属性操作的可视化调试器(Aki)。
- 将两种调试技术集成到统一环境中,支持完整与部分程序执行。
实验结果
研究问题
- RQ1如何有效将算法调试适配至属性语法范式,其中求值本质上是递归且依赖属性的?
- RQ2基于切片的调试能否应用于属性语法,以定位不完整或非终止执行中的错误?
- RQ3算法与基于切片的调试相结合,如何提升开发者定位错误属性规则的效率?
- RQ4与手动或传统调试方法相比,Aki调试器在多大程度上减少了调试时间?
主要发现
- Aki的算法调试组件将平均定位错误时间减少至3分钟,而无任何调试支持时为15分钟。
- 基于切片的调试组件平均需要13次查询来定位错误,而算法调试为9次,表明交互成本略高,但适用范围更广。
- 三位经验丰富的编译器开发者参与的用户测试表明,两种系统化调试方法在时间与精力消耗方面显著优于手动调试。
- 可视化调试器Aki通过源代码高亮与子树可视化,有效支持对复杂属性依赖关系的理解。
- 该系统成功定位了一个在二进制数求值语法中因错误属性传播而故意引入的错误规则。
- 混合方法支持对执行中途失败的程序进行调试,而传统算法调试无法构建完整的计算树。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。