SHErrLoc是一种新的、通用的方法,用于定位以下程序员错误通过静态程序分析检测,如ML类型推断、信息流分析和数据流分析。
SHErrLoc工具分析约束中的约束系统对于一大类静态程序来说,具有足够表达能力的语言分析,包括由格拉斯哥哈斯克尔编译器(GHC)(具有类型类、GADT和类型家族)。分析了可满足和不可满足约束确定最可能的错误原因。基于贝叶斯理由,评估不同错误解释的可能性通过两种一般的启发:
- 在其他条件都相同的情况下,程序员犯错误较少的一个解释是更有可能。
- 错误的表达式不太可能出现在可满足的约束中。
例如轻松OCaml++工具生成OCaml程序中约束语言格式的约束。SHErrLoc公司工具然后分析这些与应用程序无关的约束,以找到可能的程序员错误,如概览图所示。请尝试我们的OCaml演示.
诊断Haskell类型需要较少的编译器修改错误,因为现有的编译器(如GHC)已经生成类型检查约束。然后是一个轻量级约束转换器将这些约束提供给通用SHErrLoc工具,以便更好地定位程序员错误。请尝试我们的的演示哈斯克尔.
OCaml中非常不同的程序分析和类型推断的评估Haskell以及Jif中的信息流分析提出这种通用方法可以显著识别错误位置比现有工具更准确。
下载
SHErrLoc工具获取描述程序分析的约束文件,并诊断最可能是静态程序分析检测到错误的原因。如PLDI’15论文所述,SHErrLoc的最新版本可用在SHErrLoc GitHub存储库.
我们的POPL’14论文中使用的版本打包在这里:
相关出版物
-
SHErrLoc:一种静态整体错误定位器
程序设计语言与系统学报(ACM TOPLAS),第39卷,第4期,第18条,2017年8月。Danfeng Zhang、Andrew C.Myers、Dimitrios Vytiniotis和Simon Peyton‑Jones。
-
用类诊断类型错误
第36届ACM SIGPLAN编程会议记录语言设计与实现(PLDI’15),第12-21页,2015年6月。
Danfeng Zhang、Andrew C.Myers、Dimitrios Vytiniotis和Simon Peyton‑Jones。
-
静态误差的一般诊断[幻灯片]
第41届ACM SIGPLAN-SIGACT原则研讨会会议记录编程语言(POPL'14),第569-581页,2014年1月。
Danfeng Zhang和Andrew C.Myers。
项目成员
支持
SHErrLoc的开发得到了该办公室的两项拨款的支持海军研究部,N00014-09-1-0652和N00014-13-1-0089,由MURI拨款FA9550-12-1-0400,由国家科学基金会资助(CCF-09644909),以及由空军研究所管理的拨款实验室。