实际上我的要求是突出显示在其特定 js 函数中有错误的块。
我们正在使用Blockly
. 假设我在 Blocky 中应用一个逻辑(函数),那么该块将解析为 js。
然后我需要逐步执行js,而执行时间。如果我的逻辑(函数)中发生任何错误,我必须在块中突出显示该错误。
是否可以获得错误的行号?
请看这个链接。
实际上我的要求是突出显示在其特定 js 函数中有错误的块。
我们正在使用Blockly
. 假设我在 Blocky 中应用一个逻辑(函数),那么该块将解析为 js。
然后我需要逐步执行js,而执行时间。如果我的逻辑(函数)中发生任何错误,我必须在块中突出显示该错误。
是否可以获得错误的行号?
请看这个链接。
我为我的学士论文做了类似的事情。(我会分享这篇论文,但由于它是德语,我认为它不会有太大帮助)。在那里,我从 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。