Top

2019年5月2日 星期四

程式設計|JAVA|將 code stack 轉成 String 來 Trace

  一般程式發生問題會拋出 Exception 來,這時候就可以從 Exception 中把程式運行過程的 code stack 叫出來看,這是最常見的程式設計師除錯 (debug) 會用的東西。

  然而今天要是沒有報錯,但又想把跑到這段程式或函式 (Function) 的 code stack 叫出來看,進而解到底是怎麼會跑到這裡或是誰呼叫了這函式的話要怎麼做?

  想要取得 code stack 就必須先有 Exception ,然而沒報錯也可以自己拋錯。不過這邊沒有要拋就是了😆

new Exception();

  先建立一個新的 Exception 物件,建立後就可以用它來執行 printStackTrace() ,這樣就可以在 console 看到跑到這段程式碼的 code stack 了。但這邊有個問題,要是我想要寫 log 去記錄怎麼辦?

  那就要先把它存放到 String 裡面去,但是 printStackTrace() 是沒有回傳值的,這時候就要用 StringWriter 和 PrintWriter 放進去把資訊帶出來。

StringWriter codeStack = new StringWriter();
new Exception().printStackTrace(new PrintWriter(codeStack));
String codeStack = codeStack.toString();

  但是每次要紀錄都要這3行,有點囉嗦耶!

  沒關係,你可以引入 org.apache.commons 的 Library ,這樣就可以一行解決它了。

String codeStack = ExceptionUtils.getStackTrace(new Exception());

  好啦,這樣你就可以在任意地方安插這行來取得程式碼堆疊,進而分析出你所遇到的問題癥結點在哪囉!😎

沒有留言:

張貼留言