2016-10-06 56 views
0

當想要在IDE中調試Java和Javascript時,似乎必須使用load(filename)Nashorn extension,請參閱Debugging Nashorn JavaScript with IntellijNashorn Javascript使用CompiledScript進行調試?

不幸的是,這禁止使用CompiledScript,作爲上述返回一個ScriptObjectMirror對象,至少沒有compile(filename)犀牛擴展記錄。

這裏丟失的CompiledScript功能之一是例如CompiledScript.eval(ScriptContext context)。我找不到使用ScriptObjectMirror實現相同的方法。另外,load(filename)將立即執行腳本,這可能不是想要的。

+0

也https://github.com/aperto/sourceurl-resourcefilter見一個Maven資源過濾器,它會自動加上'// @ sourceURL ='註釋JS源文件。這將導致文件名在Netbeans調試器中顯示在Nashorn JS stackframes中,即使沒有使用'load()',例如。與'CompiledScript'。 – jfrantzius

回答

1

可以調試任何犀牛/ JavaScript的使用這個集成開發環境 - >

https://blogs.oracle.com/sundararajan/entry/remote_debugging_of_nashorn_scripts

  • 在腳本中引入 「調試」 語句
  • 用你的IDE中jdk.nashorn插入斷點。 internal.runtime.ScriptRuntime.DEBUGGER方法
  • 在您的IDE中啓動「調試」

另請參見IntelliJ:https://stackoverflow.com/a/38513981/3189360

隨着最近的NetBeans構建,不需要第二部分。 NetBeans將自動分解爲任何「調試器」語句。

https://twitter.com/sundararajan_a/status/773375676103602178

+0

Thx,但設置一箇中斷點並不是我的問題,因爲我已經可以將它放入正在拋出的Java異常中。 我正在尋找的是與.js源代碼行相對應的堆棧幀,選擇這些堆棧幀時會顯示.js源代碼。否則,我不知道我在看什麼變量:) – jfrantzius

+0

那麼,NetBeans顯示源(即使當從該字符串中「eval」)時,該斷點命中。堆棧跟蹤中的堆棧幀必須使用虛假名稱 - 因爲沒有用戶關聯的名稱。那裏可以做的不多。但是,Nashorn實現@sourceURL/#sourceURL指令。 (https://bugs.openjdk.java.net/browse/JDK-8032068)。將一個可讀名稱與已評估的源相關聯很有用。 –

+0

NetBeans是我將嘗試的下一件事,因爲[IDEA在調試Maven依賴項時存在一個錯誤](https://youtrack.jetbrains.com/issue/IDEA-162333)。您是否有機會知道NetBeans是否也會在CompiledScript調用中顯示源代碼,即不使用'load()'? – jfrantzius