2011-06-06 213 views
17

如何打印Groovy堆棧跟蹤? Java方法Thread.currentThread()。getStackTrace()產生一個巨大的堆棧跟蹤,包括很多Groovy內部。我看到一個從StreamingMarkupBuilder調用兩次的函數,它看起來應該只調用一次,我想知道爲什麼Groovy認爲它應該調用它兩次。如何打印Groovy堆棧跟蹤?

回答

13

谷歌搜索返回following information:

顯然,存在org.codehaus.groovy.runtime.StackTraceUtils的方法叫printSanitizedStackTrace。沒有該方法多文檔,雖然有一個叫sanitize這是從異常 實例此修改原始 實例,並返回其描述爲

刪除所有常規顯然內部 跟蹤條目方法,它不 克隆

所以我會嘗試org.codehaus.groovy.runtime.StackTraceUtils.printSanitizedStackTrace(Throwable t)(它是靜態的) ,看看是否適合你。

+11

最終解決方案:org.codehaus.groovy.runtime.StackTraceUtils.sanitize(new Exception())。printStackTrace()。出於某種原因,printSanitizedStackTrace()不起作用。 – dromodel 2012-11-12 17:27:10

+1

可能是printSanitizedStackTrace()不像您期望的那樣工作,因爲您期待System.out中的輸出,而printSanitizedStackTrace()將其發送到System.err。我嘗試添加一個由添加System.out構造的PrintWriter作爲第二個參數,在Throwable對象之後,但仍然沒有得到像我期待的那樣的輸出。 – jonnybot 2013-07-09 20:55:31

+0

這對我有用:'''org.codehaus.groovy.runtime.StackTraceUtils.sanitize(new Exception(e))。printStackTrace()'''''''''''''''''''''''''''''' – lrkwz 2016-08-22 14:42:46