1

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

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

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

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

请看这个链接

4

1 回答 1

0

我为我的学士论文做了类似的事情。(我会分享这篇论文,但由于它是德语,我认为它不会有太大帮助)。在那里,我从 Blocks 生成 PHP,启动它,然后希望用户能够逐块逐步执行生成的代码。以下内容并非特定于 Javascript,因此您可能需要更改一些零碎的内容。假设生成的代码类似于:

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

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

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

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

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

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

于 2016-11-26T13:56:15.843 回答