| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 자바
- 프로그래밍기초
- 코딩테스트준비
- 예외처리
- 정렬
- 메모리관리
- 객체지향
- 개발자팁
- 코딩공부
- 알고리즘공부
- JVM
- 자바공부
- 클린코드
- 코딩테스트
- Java
- 개발공부
- 코딩인터뷰
- 자바기초
- 프로그래머스
- HashMap
- 알고리즘
- 백준
- 멀티스레드
- 자료구조
- 개발자취업
- 자바프로그래밍
- 코딩테스트팁
- 파이썬
- 가비지컬렉션
- 자바개발
- Today
- Total
코드 한 줄의 기록
Java 스택 트레이스와 브레이크포인트 완벽 해설 본문
소프트웨어 개발 과정에서 예외(Exception)와 버그(Bug)는 피할 수 없는 과제입니다. 특히 Java 개발자는 스택 트레이스(Stack Trace)를 통해 예외 발생 위치와 원인을 파악하고, IDE 디버거(Debugger)의 브레이크포인트(Breakpoint) 기능을 활용해 코드를 단계별로 실행하며 문제를 해석해야 합니다. 이번에는 Java 스택 트레이스 읽기부터 IDE(이클립스, IntelliJ)에서의 브레이크포인트 활용법까지, 함께 공부하며 실전 프로젝트에 바로 적용할 수 있는 방법을 살펴 봅시다.
스택 트레이스란 무엇인가?
자바 애플리케이션이 실행 도중 예외를 만나면 JVM은 현재 실행 중인 메서드 호출 정보를 역순으로 출력합니다.
java.lang.NullPointerException
at com.example.MyClass.myMethod(MyClass.java:42)
at com.example.Main.main(Main.java:10)
위 예시는 NullPointerException이 MyClass.java 42번째 줄에서 발생했고, 이를 호출한 Main.main이 10번째 줄에 위치함을 뜻합니다.
- 예외 타입: java.lang.NullPointerException
- 발생 위치: MyClass.myMethod(MyClass.java:42)
- 호출 경로: Main.main(Main.java:10)
스택 트레이스는 최상위 예외부터 시작해서 호출 계층을 보여주므로, 원인(branch)과 결과(leaf)를 구분해 읽을 수 있어야 합니다.
주요 스택 트레이스 구성 요소
- 예외 클래스 이름: 예외 타입으로, IOException, IndexOutOfBoundsException 등 다양합니다.
- 예외 메시지: 예외 발생 이유(예: “Index 5 out of bounds for length 3”).
- 스택 프레임(Stack Frame): 호출된 메서드와 파일, 줄 번호 정보.
예외 메시지 해석
java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 3
- Index 5: 잘못된 인덱스 값
- for length 3: 배열 크기 3
메시지를 통해 코드 로직 혹은 입력값 검증 부재를 확인할 수 있습니다.
스택 프레임 읽는 법
각 줄은 패키지.클래스.메서드(파일명:줄번호) 형식입니다.
프로젝트 구조를 떠올리며 com.example.MyClass 클래스 파일을 열고 42행을 확인합니다.
외부 라이브러리에서 발생한 예외라면, 라이브러리 버전과 호환성도 점검해야 합니다.
IDE 디버거 브레이크포인트 활용법
브레이크포인트란?
코드를 실행하다가 특정 지점에서 실행을 일시 중단하고, 변수 상태나 호출 스택을 직접 살펴볼 수 있는 디버깅 도구입니다.
이클립스(Eclipse)에서 브레이크포인트 설정
- 파일 편집기 좌측 여백 클릭: 빨간 점(●) 등장
- 디버그 모드 실행: Debug As > Java Application
- 변수 창(Variables): 로컬 변수를 확인
- 호출 스택(Call Stack): 현재 스택 프레임 위치와 호출 경로
IntelliJ IDEA에서 브레이크포인트 설정
- 편집기 우측 바 클릭: 파란 점(🔵) 표시
- 디버그 모드 실행: Run > Debug
- Evaluate Expression: 실행 중인 표현식 결과를 즉시 확인
- Watches 추가: 관심 변수 모니터링
예제: 실제 디버깅 시나리오
public class Calculator {
public int divide(int a, int b) {
return a / b;
}
public static void main(String[] args) {
Calculator calc = new Calculator();
System.out.println(calc.divide(10, 0));
}
}
- 스택 트레이스 확인
Exception in thread "main" java.lang.ArithmeticException: / by zero at Calculator.divide(Calculator.java:3) at Calculator.main(Calculator.java:7) - 원인 분석: b가 0일 때 divide() 호출
- 브레이크포인트 설정: divide 메서드 첫 줄에 브레이크포인트
- 디버그 실행: 메서드 진입 시점에서 b 값을 확인
- 해결 방법:
if (b == 0) { throw new IllegalArgumentException("0으로 나눌 수 없습니다."); }
고급 디버깅 팁
- 조건부 브레이크포인트: 특정 조건 만족 시에만 중단
- 라인 외 브레이크: 예외 발생 시 자동 중단(“Exception Breakpoint”)
- 원격 디버깅(Remote Debugging): 원격 서버에 연결해 디버깅
- 로그 포인트(Logpoint): 코드 수정 없이 로그 출력
조건부 브레이크포인트 예시
IntelliJ에서 브레이크포인트 우클릭 → Condition 입력: b == 0
이제 b가 0일 때만 디버그가 중단됩니다.
예외 처리 베스트 프랙티스
- 명확한 예외 메시지 작성: 사용자와 개발자 모두 이해하기 쉽게
- 커스텀 예외 사용: 도메인별 예외 클래스로 구분
- 적절한 예외 변환: 하위 모듈 예외를 상위 모듈에 맞게 변환
- 리소스 정리: try-with-resources로 자동 해제
Java 개발에서 예외 원인을 정확히 파악하고, IDE 디버거의 브레이크포인트를 적극 활용하는 습관은 버그 수정 속도와 코드 안정성을 크게 향상시킵니다.
스택 트레이스를 꼼꼼히 읽어 예외 타입과 발생 위치를 파악한 뒤, 브레이크포인트로 코드 흐름과 변수 상태를 체크해 보세요.
꾸준한 디버깅 연습이 개발자의 가장 강력한 무기가 됩니다.
Java 사용자 정의 예외와 예외 전환·포장 전략 완벽 가이드: 실전 예제와 베스트 프랙티스
Java 애플리케이션을 개발하다 보면 표준 예외만으로는 상황을 충분히 설명하기 어려울 때가 많습니다. 특히 도메인 로직에서 발생하는 특정 오류를 명확히 드러내고, 상위 계층으로 안전하게
byteandbit.tistory.com
'JAVA' 카테고리의 다른 글
| Java 컬렉션 프레임워크 이해하기: List/Set/Map 완벽 가이드 (0) | 2025.10.24 |
|---|---|
| Java 로깅 완벽 가이드: SLF4J와 로그 레벨 이해 (0) | 2025.10.19 |
| Java 사용자 정의 예외와 예외 전환·포장 전략 완벽 가이드: 실전 예제와 베스트 프랙티스 (0) | 2025.10.16 |
| Java try-catch-finally와 try-with-resources로 자원 누수 완벽 방지하기 (0) | 2025.10.15 |
| Java 예외 처리 마스터하기: 체크/언체크 예외부터 throw/throws까지 완전 정복 (0) | 2025.10.14 |