반응형

자바에서 사용되는 Stack Trace를 알아보자
하나의 프로그램을 수행하는 동안 스레드는 다양한 메서드를 돌아다니게 된다.
메서드가 호출되고 종료되면, 메서드를 호출하는 곳으로 다시 돌아가게 된다.
이렇게 호출된 곳으로 다시 돌아가기 위해서는 Stack에 메서드가 호출된 포인트를 기록해야,
그 기록을 따라서 다시 돌아갈 수 있게 된다.
프로그램 실행 중 기록되는 특정 포인트들을 쌓아놓고 활용하는 것이 Stack Trace가 되겠다.
디버깅을 수행할 경우에 유용하게 활용될 수 있다.

프로그램이 수행될 경우, 여러 클래스를 돌아다니면서 작업을 하게 될 수 있다.
이 때, 버그가 발생하면 수많은 메서드 호출을 디버깅과정는 과정을 거쳐야 한다.
버그가 발생되는 곳으로 예상 되는 곳에서 Stack Trace를 하면 어디에서 예상 지역을 호출하는지 알 수 있다.

JAVA Stack Trace 방법
Thread를 이용하여 현재 Thread를 얻어오고, 얻어온 Thread로부터 Stack Trace를 가져온다.
Thread th = Thread.currentThread();
StackTraceElement 배열을 이용하면 받을 수 있게 된다.
StackTraceElement[] lists = th.getStackTrace();
StackTraceElement의 메서드를 이용하여 원하는 내용을 출력하면 된다.
예제에서는 getClassName()과 getMethodName()을 이용한다.

예제를 보자.
public class StackTraceElementTest {
    public void test1(){
        test2();
    }
 
    public void test2(){
        test3();
    }

    public void test3(){
        test4();
    }
 
    public void test4(){
        Thread th = Thread.currentThread();
        StackTraceElement[] lists = th.getStackTrace();
        for(StackTraceElement list : lists){
            System.out.println(list);
            System.out.println(list.getClassName() + " : " + list.getMethodName());
        }
    }
 
    public static void main(String[] args){
        StackTraceElementTest test = new StackTraceElementTest();
        test.test1();
    }
}


위의 예제는 main - test1 - test2- test3- test4를 차례로 호출하고 있다.
test4에서 Stack Trace를 수행하면 다음과 같은 결과가 출력된다.

java.lang.Thread : getStackTrace
JavaStudy.StackTraceElementTest : test4
JavaStudy.StackTraceElementTest : test3
JavaStudy.StackTraceElementTest : test2
JavaStudy.StackTraceElementTest : test1
JavaStudy.StackTraceElementTest : main


getStackTrace를 사용한 지점부터 역순으로 출력을 하게 되므로, main - test1 - test2- test3- test4의 순서로 호출됨을 알 수 있다.


출처 : http://okjkillo.tistory.com/entry/JAVA-Stack-Trace

반응형

'Java기초' 카테고리의 다른 글

Browser별 file name깨짐현상  (0) 2014.08.13
replace replaceAll 차이  (0) 2014.08.01
JVM 메모리  (0) 2014.04.30
정규식 특수문자  (0) 2013.07.15
추상클래스 인터페이스 차이2  (0) 2013.07.11

+ Recent posts