2016-02-05 43 views
1

其實我的要求是突出顯示其特定js函數有錯誤的塊。如何使用JS Interpreter突出顯示Blockly錯誤?

我們正在開發塊使用Blockly。假設我正在Blocky中應用一個邏輯(函數),那麼這個塊將解析爲js。

然後我需要一步一步執行js,而執行時間。如果在我的邏輯(函數)中發生任何錯誤,我必須突出顯示塊中的錯誤。

是否可以得到錯誤的行號?

請看這link

+0

這可能有用:http://stackoverflow.com/questions/1340872/how-to-get-javascript-caller-function-line-number-how-to-get-javascript-caller – stackErr

回答

0

我爲我的學士論文做了類似的事情。 (我會分享論文,但既然是德文,我不認爲這會有很大的幫助)。在那裏,我從塊生成PHP,啓動它,然後希望使用戶能夠逐塊通過生成的代碼。以下不是特定於JavaScript的,因此您可能需要更改一些小部件。比方說所生成的代碼類似於此:

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

我給跟蹤簡單的解決方案,其是座執行的實際塊是讓我的PHP codeGenerator生成略有不同的代碼,用於調試生成代碼時:

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

訣竅是,codeGenerator知道它正在生成的代碼塊的ID。因此,讓Generator將這些知識放在它生成的代碼中。

因此,當某些codeGeneratedBy..Block()函數引發異常時,您現在將知道它對應哪個塊,因爲您之前保存了最後一個塊ID。您可能必須將代碼GeneratedBy..Block()封裝在捕獲異常的函數中,在沒有異常時繼續正常繼續,但在有異常時突出顯示實際塊。

無論如何都有一些注意事項:如果您不關心更改生成的代碼以進行調試,那麼這很好。這意味着代碼不會顯示給用戶,或者您不關心代碼是「教育」的。當您使用多線程代碼或回調代碼時,也可能會出現問題。執行回調時,可能已經使用另一個ID調用了setActualBlockId(),該ID與生成回調代碼的塊不相對應。

相關問題