print 디버깅 vs 진짜 디버깅
print 문이 가장 단순한 버그 잡지만 문제 복잡해지면 눈멀게. pdb 가 Python 빌트인 디버거 — 코드 어떤 지점에 인터랙티브 REPL 로 떨어뜨림. 변수 검사, 줄별 단계, 현재 scope 의 식 평가. 기술 보상 거대, 많은 개발자가 안 배워서 매일 비용 지불.
breakpoint() — 현대 진입
Python 3.7+ 에 breakpoint() 빌트인. 코드 어디든 떨어뜨리면 거기서 실행 멈추고 pdb 로. env var PYTHONBREAKPOINT=ipdb.set_trace 가 설치돼있으면 더 풍부한 ipdb 디버거로 swap. PYTHONBREAKPOINT=0 가 breakpoint 완전 비활성화 (CI 에 유용).
실제 사용할 pdb 명령
n 다음 줄. s 함수 호출 안 step. c 계속 (다음 breakpoint 또는 끝까지). p expr 식 출력. l 현재 줄 주변 소스 list. w 호출 stack 표시. u/d stack 위/아래. q 종료. 첫 셋이 사용의 80%.
post-mortem — 예외 디버깅
코드 crash 했을 때 crash 지점에서 디버그 가능. python -m pdb script.py 가 pdb 아래 스크립트 실행. 인터랙티브 세션 안에서 예외 후 import pdb; pdb.pm() 이 일어난 frame 으로 떨어뜨림. 변수 여전히 scope 안 — 함수가 실제 본 거 검사 가능.
Pythonic Way: 버그가 즉시 명확하지 않으면
breakpoint() 떨어뜨리고 실제 값 봐. 제거해야 할 print 문 추가보다 빠름. IDE 디버거 (VS Code, PyCharm) 가 pdb 를 UI 로 감쌈, 기저 기술 같음.