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()은 코드의 특정 시점에서 호출 흐름을 빠르게 파악하고 싶을 때 손쉽게 사용할 수 있는 디버깅 도구입니다.