티스토리 뷰
Java에서 Exception 과 Error 는 Throwable 이 상속되어있다.
일반적으로 예외처리를 하고 디버깅을 위해 e.printStackTrace() 를 넣어놓는데 System 로그로 알아서 찍힌다.
이것을 문자열로 받아서 다르게 처리 할 수는 없을까.?
Java에서 아래의 구문으로 Throwable 에 들어있는 Stack Trace 를 가져올 수 있다.
이는 e.printStackTrace() 할 때의 문자열가 거의 동일하다.
StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); throwable.printStackTrace(pw); String textStackTrace = sw.toString(); |
히지만 거의 동일 할 뿐 정확히 같지는 않다.
e.printStackTrace() 와 위 코드를 실행해보면 딱 하나 마지막 실행코드의 line이 다르다.
마지막 실행코드에 위실행 코드는 코드가 요청된 마지막 line이 찍히지만
e.printStackTrace() 는 코드가 요청된 마지막 오류Throwable line 이 찍히게 된다.
뭔말이냐면..
(Check)에서 e.printStackTrace()를 하면 tc.run() 의 line 이 찍히지만
위코드를 적용하면 위코드가 실행된 (Check)의 line 이 찍힌다.
try { TestCode tc = null; tc.run(); } catch (Exception e) { (Check) } |
한마디로 디버깅용도로 활용하기가 적절하지 않다.
안드로이드에서는 아래와 같이 StackTrace 를 String 으로 반환 받을 수 있는 기능을 제공한다.
Log.getStackTraceString(throwable) |
이렇게 하면되면 e.printStackTrace() 와 완전히 동일한 문자열 추출이 가능하다.
이런기능을 활용하여 어플의 Log를 추출하여 오류리포트를 제공받아 다양한 사용자환경에서의 디버깅을 할 수 있겠다.
[작성자] devbible.tistory.com
'Development' 카테고리의 다른 글
[Android] 마운트 드라이브 조회 (외부 SD카드경로 찾기) (0) | 2013.10.28 |
---|---|
[Android] RejectedExecutionException 처리 (0) | 2013.10.25 |
[Android] DPI 별 이미지 배율 (0) | 2013.10.08 |
[Android] 안드로이드 다중사용자 설정 (0) | 2013.10.08 |
[Android] EditText 의 Touch한 글자에 Selection 주기 (1) | 2013.08.30 |
- Total
- Today
- Yesterday