可以將他和他的cause Throwable和他的cause的cause...( 遞歸 ) 的堆棧信息都打印出來。
而例如我們要將壹個Throwable對象的堆棧信息不僅僅是輸出到控制臺,還要保存到本地日誌或者發送到服務器呢?那麽就要將Throwable的堆棧信息提取出來。
令人開心的是, android.util.Log 類提供了這麽壹個工具方法:
通過該方法,可以直接把 Throwable 對象的堆棧信息都拿出來了。
他有4個構造方法。每個構造方法都會調用 fillInStackTrace() 來記錄當前的堆棧信息。
只有兩個參數可選:String類型的message,和他的cause Throwable。
那麽現在來看壹下這兩個變量對Throwable有什麽用,以及對我們來說有什麽意義。
先說結論: detailMessage 和 cause 變量在調用 printStackTrace() 的時候都會被打印出來。
看下 printStackTrace()
看下 toString 是如何包含 message 進來的:
看下打印cause:
可以發現, printEnclosedStackTrace() 方法中又調用了 getCause() 和 printEnclosedStackTrace() ,那麽其實就是壹個遞歸,直到遞歸到最根源的那個cause。
那麽當我們要構造壹個 Throwable 對象的時候,如果上下文中有壹個關聯的 Throwable ,那麽把他作為cause參數來構造新的 Throwable 對象,這樣能更好地記錄問題真正的原因。