2015-09-11 32 views
3

我有在Chrome中工作得很好,但崩潰對犀牛的腳本:你如何獲得Nashorn的JavaScript堆棧跟蹤?

(Error: Namespace "com.cognitect.transit.util" already declared. in at line number 19664 at column number 6

該錯誤是不是非常有用,因爲該行包含:

throw Error('Namespace "' + name + '" already declared.'); 

我需要得到一個完整的我發現NashornException.getScriptStackString但Nashorn產生的錯誤是javax.script.ScriptException,當我撥打NashornException.getScriptStackString時,它給了我一個空字符串。

如何從Nashorn獲取JavaScript堆棧跟蹤?

我不想從JavaScript做到這一點,我希望以與瀏覽器相同的方式來做到這一點,不管你運行的是什麼JS代碼。我的許多JS代碼都是第三方的,它是生成的,我無法修改我必須打印異常的數千個函數以防萬一。

+0

JavaScript錯誤產生的堆棧跟蹤在創建時。你可以簡單地用'try/catch'子句包圍你的代碼,然後讀取堆棧,不管你在哪裏捕獲它。 –

+0

@BenjaminGruenbaum你指的是JavaScript中的try/catch嗎? – Pablo

回答

5

NashornException可作爲ScriptException的原因:

import jdk.nashorn.api.scripting.NashornException; 

... 

catch (ScriptException e) { 
    if (e.getCause() instance of NashornException) 
     String jsStackTrace = NashornException.getScriptStackString(e.getCause()); 
} 
+0

getCause!當然!謝謝@wero。 – Pablo