如何使用JS Interpreter突出显示Blockly错误?

时间:2016-02-05 12:41:45

标签: javascript blockly

实际上我的要求是突出显示其特定js函数中存在错误的块。

我们正在使用Blockly开发块。假设我在Blocky中应用了一个逻辑(函数),那么这些块将解析为js。

然后我需要一步一步地执行js,同时执行时间。如果我的逻辑(函数)中出现任何错误,我必须在块中突出显示该错误。

是否可以获取错误的行号?

请查看此link

1 个答案:

答案 0 :(得分:0)

我为我的学士论文做了类似的事情。 (我会分享论文,但因为它是德语,我不认为它会有很大的帮助)。我从Blocks生成PHP,启动它然后想让用户逐块逐步执行生成的代码。以下内容并非针对Javascript,因此您可能需要更改一些零碎。让我们说生成的代码看起来类似于:

codeGeneratedByFirstBlock();
codeGeneratedBySecondBlock();
codeGeneratedByThirdBlock();

我跟踪哪个Block是实际执行块的简单解决方案是让我的PHP codeGenerator在生成调试代码时生成稍微不同的代码:

setActualBlock(<idOfFirstBlock>);
codeGeneratedByFirstBlock();
setActualBlock(<idOfSecondBlock>)
codeGeneratedBySecondBlock();
setActualBlock(<idOfThirdBlock>)
codeGeneratedByThirdBlock();

诀窍是,codeGenerator知道它为其生成代码的块的id。因此,让Generator将这些知识放在它正在生成的代码中。

因此,当某些codeGeneratedBy..Block()函数抛出异常时,您现在将知道它对应于哪个块,因为您之前保存了持续块id。您可能必须在函数中包装codeGeneratedBy..Block(),捕获异常,在没有异常时正常继续,但在有异常时突出显示实际的块。

无论如何都有一些警告:如果您不关心更改生成的代码以进行调试,那么这很好。这意味着代码不会显示给用户,或者您不关心代码是“教育”的。如果您有多线程代码或回调代码,也可能会出现问题。执行回调时,您可能已经使用另一个与生成回调代码的块不对应的id调用了setActualBlockId()。