Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java Thread.dumpStack() 메서드란? 디버깅을 위한 스택 트레이스 출력 방법

Java에서 dumpStack() 메서드는 Thread 클래스가 제공하는 정적(static) 메서드로, 현재 실행 중인 스레드의 스택 트레이스(stack trace)를 System.err로 출력하는 데 사용됩니다.

이 메서드의 주된 목적은 디버깅(debugging)입니다. 프로그램이 어떤 호출 경로를 거쳐 현재 지점에 도달했는지 확인하고 싶을 때 유용하게 활용할 수 있습니다. 내부적으로는 Throwable 클래스printStackTrace() 메서드를 호출하여 동작하며, 별도의 예외를 발생시키지 않으므로 프로그램 흐름에 영향을 주지 않고 안전하게 호출할 수 있습니다.

문법(Syntax)

public static void dumpStack()

예제 코드(Example)

아래 예제에서는 현재 스레드의 이름과 우선순위를 설정한 후, 활성 스레드 목록을 출력하고 마지막에 dumpStack()을 호출하여 스택 트레이스를 확인합니다.

public class ThreadDumpStackTest {
    public static void main(String args[]) {
        Thread t = Thread.currentThread();
        t.setName("ThreadDumpStackTest");
        t.setPriority(1);
        System.out.println("Current Thread: " + t);
        int count = Thread.activeCount();
        System.out.println("Active threads: " + count);
        Thread threads[] = new Thread[count];
        Thread.enumerate(threads);
        for (int i = 0; i < count; i++) {
            System.out.println(i + ": " + threads[i]);
        }
        Thread.dumpStack();
    }
}

실행 결과(Output)

Current Thread: Thread[ThreadDumpStackTest,1,main]
Active threads: 1
0: Thread[ThreadDumpStackTest,1,main]
java.lang.Exception: Stack trace
        at java.lang.Thread.dumpStack(Thread.java:1336)
        at ThreadDumpStackTest.main(ThreadDumpStackTest.java:14)

출력 결과 해석

실행 결과를 보면 java.lang.Exception: Stack trace라는 메시지와 함께 호출 스택이 출력됩니다. 이는 실제 예외가 발생한 것이 아니라, dumpStack() 메서드가 내부적으로 임시 예외 객체를 생성해 printStackTrace()를 호출했기 때문입니다.

  • at java.lang.Thread.dumpStack(...): dumpStack() 메서드가 호출된 위치를 나타냅니다.
  • at ThreadDumpStackTest.main(...): main() 메서드에서 dumpStack()을 호출한 지점(14번째 줄)을 나타냅니다.

이처럼 dumpStack()은 코드의 특정 시점에서 호출 흐름을 빠르게 파악하고 싶을 때 손쉽게 사용할 수 있는 디버깅 도구입니다.