高阶属性文法分析:性能剖析与终止性检测
1. 属性文法剖析概述
属性文法剖析在程序执行分析中具有重要作用。传统的剖析工作大多集中在程序的执行剖析上,例如经典的 gprof 工具,它收集与函数调用对应的事件,程序的调用图对应着剖析记录之间的派生关系。
我们的方法更具通用性。gprof 等工具仅使用函数维度,而我们展示了特定领域和派生维度在提供不同执行视图方面的实用性。gprof 侧重于执行时间和函数调用计数,效率问题至关重要;而我们基于灵活维度的方法,使得值本身往往比时间更重要。
2. 剖析系统的抽象
我们的方法提高了剖析的抽象级别,相较于指令和函数级剖析器,增加了剖析系统的通用性,并显著减少了收集的数据量。
以下是与其他相关工作的对比:
| 相关工作 | 特点 | 与我们方法的区别 |
| ---- | ---- | ---- |
| Sansom 和 Peyton Jones 的工作 | 允许开发者添加“成本中心”以特定方式聚合数据,将源代码级剖析数据提升到更高层次 | 他们的成本中心与源代码片段关联,而我们将其分为开始和结束事件,对程序执行抽象部分的识别更灵活 |
| Nguyen 等人的工作 | 描述了一种用于自动化剖析数据收集、处理和反馈的特定领域语言,可从剖析探索过程细节中进行一定抽象 | 该语言在较低级别操作,用于分析程序和系统内核性能,与我们不同 |
| Rajagoplan 等人的工作 | 考虑基于事件的程序剖析,寻找事件中的模式以从执行中进行一定抽象 | 他们的事件是系统功能固有的,且未考虑通用抽象机制 |
| DTrace 等系统 | 可用于收集大量程序执行