💻 프로그래밍

Breakpoint

중단점

디버거가 실행을 멈추는 지점. 변수 상태 확인, 단계별 실행에 사용.

📖 상세 설명

Breakpoint(중단점)는 디버깅 과정에서 프로그램 실행을 특정 지점에서 일시 중단시키는 마커입니다. 개발자는 중단점이 설정된 코드 라인에 도달하면 프로그램이 멈추고, 그 시점의 변수 값, 콜 스택, 메모리 상태 등을 상세히 검사할 수 있습니다.

조건부 브레이크포인트(Conditional Breakpoint)는 특정 조건이 참일 때만 실행을 중단하는 고급 기능입니다. 예를 들어 "i > 100일 때만 중단"처럼 설정하면 수백 번의 반복 중 문제가 발생하는 특정 시점만 정확히 잡아낼 수 있어 디버깅 효율이 크게 향상됩니다.

현대 IDE와 디버거는 다양한 종류의 브레이크포인트를 지원합니다. 라인 브레이크포인트(특정 줄에서 중단), 함수 브레이크포인트(함수 진입 시 중단), 예외 브레이크포인트(예외 발생 시 중단), 데이터 브레이크포인트(변수 값 변경 시 중단) 등이 있습니다. 이러한 다양한 중단점을 적절히 활용하면 복잡한 버그도 효과적으로 추적할 수 있습니다.

브레이크포인트는 print 문을 사용한 디버깅보다 훨씬 강력합니다. 코드 수정 없이 실행 흐름을 관찰하고, 중단 시점에서 표현식을 평가하며, 스텝 오버/스텝 인/스텝 아웃으로 코드를 한 줄씩 추적할 수 있기 때문입니다. 프로덕션 환경에서는 브레이크포인트 대신 로깅을 사용하지만, 개발 중에는 가장 효율적인 디버깅 도구입니다.

💻 코드 예제

# Python pdb (Python Debugger) 사용 예제

import pdb

def calculate_average(numbers):
    """평균 계산 함수 - 디버깅 데모"""
    total = 0
    count = 0

    for num in numbers:
        # pdb.set_trace()를 사용한 수동 브레이크포인트
        # 이 지점에서 실행이 멈추고 디버거 프롬프트가 나타남
        pdb.set_trace()  # 여기서 중단됨

        total += num
        count += 1
        print(f"현재 합계: {total}, 개수: {count}")

    return total / count if count > 0 else 0

# 조건부 브레이크포인트 시뮬레이션
def debug_loop_with_condition(data):
    for i, item in enumerate(data):
        # 조건부 중단: i가 5일 때만 디버거 진입
        if i == 5:
            pdb.set_trace()  # 조건부 브레이크포인트

        process(item)

# breakpoint() - Python 3.7+ 내장 함수 (권장)
def modern_debugging():
    x = 10
    y = 20

    breakpoint()  # Python 3.7+ 표준 브레이크포인트
    # 디버거에서 사용 가능한 명령어:
    # n (next): 다음 줄로 이동
    # s (step): 함수 안으로 진입
    # c (continue): 다음 브레이크포인트까지 실행
    # p 변수명: 변수 값 출력
    # l (list): 현재 코드 주변 표시
    # q (quit): 디버거 종료

    result = x + y
    return result

# 실행 예시
if __name__ == "__main__":
    numbers = [1, 2, 3, 4, 5]
    avg = calculate_average(numbers)
    print(f"평균: {avg}")

🗣️ 실무에서 이렇게 말하세요

💬 회의에서
"이 버그 재현이 어려워서 조건부 브레이크포인트를 걸어봤어요. user_id가 특정 값일 때만 중단되게 설정했더니 문제 원인을 바로 찾을 수 있었습니다."
💬 면접에서
"디버깅할 때 주로 IDE의 브레이크포인트를 활용합니다. 라인 브레이크포인트로 실행을 멈추고, Watch 창에서 변수 상태를 확인하며, 스텝 오버와 스텝 인으로 코드 흐름을 추적합니다. 반복문에서는 조건부 브레이크포인트로 특정 조건만 캐치합니다."
💬 코드 리뷰에서
"여기 pdb.set_trace() 코드가 남아있네요. 디버깅용 브레이크포인트는 커밋 전에 꼭 제거해주세요. pre-commit hook에 pdb 검사를 추가하면 실수로 푸시되는 걸 방지할 수 있어요."

⚠️ 흔한 실수 & 주의사항

디버깅 코드 커밋하지 않기

pdb.set_trace(), debugger, breakpoint() 같은 디버깅 코드는 반드시 커밋 전에 제거하세요. 프로덕션에서 실행되면 서비스가 중단되거나 보안 문제가 발생할 수 있습니다.

너무 많은 브레이크포인트 설정

브레이크포인트를 과도하게 설정하면 디버깅이 오히려 비효율적입니다. 문제가 의심되는 핵심 지점 2-3곳에만 설정하고, 조건부 브레이크포인트를 활용하세요.

IDE 디버거 단축키 익히기

F5(실행), F9(브레이크포인트 토글), F10(스텝 오버), F11(스텝 인) 등 디버거 단축키를 익히면 디버깅 속도가 크게 향상됩니다. 각 IDE마다 단축키가 다르니 사용하는 도구의 키맵을 숙지하세요.

🔗 관련 용어

📚 더 배우기