Algorithmic Debugging is a theory of debugging that uses queries on the compositional semantics of a program in order to localize bugs. It uses the following principle: if a computation of a program's component gives an incorrect result, while all the subcomputations it invokes compute correct results, then the code of this component is erroneous.
rnAlgorithmic Debugging is applied, in this work, to reactive systems, in particular to programs written in Flat Concurrent Prolog (FCP). Debugging reactive systems is known to be more difficult than the debugging of functional systems. A functional system is fully described by the relation between its initial input and final output; this context-freedom is used in debugging. A reactive system continuously responds to external inputs, thus its debugging cannot make use of context-free input/output relations.
rnGiven a compositional semantic model for a concurrent programming language, we demonstrate how one can directly apply the ideas of Algorithmic Debugging to obtain a theory of program debugging for the considered language. The conflict between the context-freedom of input/ output relations and the reactive nature of concurrent systems is resolved by using semantic objects which record the reactive nature of the system's components. In functional algorithmic debugging the queries relate to input/output relations; in concurrent algorithmic debugging the queries refer to semantic objects called
A diagnosis algorithm for incorrect FCP programs is proposed. The algorithm gets an erroneous computation and using queries isolates an erroneous clause or an incomplete procedure. An FCP implementation of the diagnosis algorithm demonstrates the usefulness as well as the difficulties of Algorithmic Debugging of FCP programs.
算法调试是一种调试理论,它使用对程序组成语义的查询来定位错误。它使用以下原则:如果程序组件的计算给出错误的结果,而它调用的所有子计算都计算出正确的结果,则该组件的代码是错误的。 P> rn
应用了算法调试,在这项工作中,对于反应性系统,尤其是对于以Flat Concurrent Prolog(FCP)编写的程序。已知调试反应系统比调试功能系统更加困难。功能系统通过其初始输入和最终输出之间的关系得到充分描述。此上下文无关性用于调试。反应性系统不断响应外部输入,因此其调试不能利用无上下文的输入/输出关系。 P> rn
给出了并发编程语言的组合语义模型,我们演示了如何直接应用通过算法调试的思想来获得所考虑语言的程序调试理论。输入/输出关系的上下文自由与并发系统的反应性之间的冲突通过使用语义对象解决,该语义对象记录了系统组件的反应性。在功能算法调试中,查询与输入/输出关系有关;在并发算法调试中,查询涉及称为 提出了一种针对错误的FCP程序的诊断算法。该算法获得了错误的计算,并且使用查询隔离了错误的子句或不完整的过程。 FCP诊断算法的实现证明了FCP程序的算法调试的实用性和难点。 P>
Department of Computer Science, The Weizmann Institute of Science, Rehovot 76100, Israel;
机译:声明性语言的调试技术:性能分析,程序切片和算法调试
机译:SPDebugger:用于并发代码的细粒度确定性调试器
机译:通过线程历史记录改善并发线程的实时调试
机译:嵌入式Linux系统中同时调试多个进程的远程调试器的设计与实现
机译:调试科学:调试计算管道的算法和系统
机译:BigDebug:用于Spark中交互式大数据处理的调试原语
机译:一种用于多范式并发调试的并发不可知协议 工具