淺析java異常棧
我們給大家通過實(shí)例代碼分析了java異常棧的函數(shù)用法并在下面給大家整理了Java獲取異常堆棧信息的兩種方法,以下是全部內(nèi)容:
(stack trace)異常棧軌跡是指:
當(dāng)throw Throwable 時(shí),Throwable對象拋出過程(穿梭)所經(jīng)歷的多個(gè)方法調(diào)用層(方法調(diào)用棧)。越接近 throw 語句的方法先進(jìn)入異常棧。
(Throwable Causal Chain)異常原因鏈:
在Throwable類中的cause屬性,表示被當(dāng)前異常包裝的原始異常。(可以稱為異常原因)
在打印異常棧軌跡時(shí),會(huì)遞歸打印 原始異常的異常棧。
現(xiàn)在來分析一下 Throwable.printStackTrace() 方法。
在Throwable.printStackTrace(PrintStreamOrWriter s) 內(nèi)部,我們可以看到:
在打印異常棧時(shí),是先打印 當(dāng)前異常對象this的異常棧。
然后再打印 異常原因鏈。(遞歸打印 原始異常的異常棧)
synchronized (s.lock()) { // Print our stack trace // 1. 先打印 當(dāng)前異常對象this的 異常棧。 s.println(this); StackTraceElement[] trace = getOurStackTrace(); for (StackTraceElement traceElement : trace) s.println("\tat " + traceElement); // Print suppressed exceptions, if any for (Throwable se : getSuppressed()) se.printEnclosedStackTrace(s, trace, SUPPRESSED_CAPTION, "\t", dejaVu); // Print cause, if any // 2. 打印 異常原因鏈 Throwable ourCause = getCause(); if (ourCause != null) ourCause.printEnclosedStackTrace(s, trace, CAUSE_CAPTION, "", dejaVu); }
Java獲取異常堆棧信息
方法一:
public static String getStackTrace(Throwable t) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); try { t.printStackTrace(pw); return sw.toString(); } finally { pw.close(); } }
方法二:
org.apache.commons.lang3.exception.ExceptionUtils.getStackTrace(e);
相關(guān)文章
SpringBoot參數(shù)校驗(yàn)的方法總結(jié)
今天帶大家學(xué)習(xí)SpringBoot參數(shù)校驗(yàn)的方法,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05面試官:java ThreadLocal真的會(huì)造成內(nèi)存泄露嗎
ThreadLocal,java面試過程中的“釘子戶”,在網(wǎng)上也充斥著各種有關(guān)ThreadLocal內(nèi)存泄露的問題,本文換個(gè)角度,先思考ThreadLocal體系中的ThreadLocalMap為什么要設(shè)計(jì)成弱引用2021-08-08springboot實(shí)現(xiàn)配置兩個(gè)parent的方法
這篇文章主要介紹了springboot實(shí)現(xiàn)配置兩個(gè)parent的方法,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Intellij IDEA 最全超實(shí)用快捷鍵整理(長期更新)
這篇文章主要介紹了Intellij IDEA 最全實(shí)用快捷鍵整理(長期更新),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02ActiveMQ消息隊(duì)列技術(shù)融合Spring過程解析
這篇文章主要介紹了ActiveMQ消息隊(duì)列技術(shù)融合Spring過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11