(Pdb) n # func_a() 전체 실행 (안으로 들어가지 않음)
(Pdb) s # func_a() 안으로 들어감
(Pdb) r # 현재 함수 끝까지 실행 후 반환
5. 중단점 관리
1
2
3
4
5
6
7
8
(Pdb) b 10 # 10번 줄에 중단점
(Pdb) b func_name # 함수 시작에 중단점
(Pdb) b file.py:20 # 특정 파일의 줄
(Pdb) b # 모든 중단점 보기
(Pdb) cl 1 # 중단점 1 삭제
(Pdb) cl # 모든 중단점 삭제
(Pdb) disable 1 # 중단점 1 비활성화
(Pdb) enable 1 # 중단점 1 활성화
6. 조건부 중단점
1
2
3
4
5
6
7
8
9
(Pdb)b10,x>5# x > 5일 때만 멈춤(Pdb)bfunc,len(items)>100# 또는 코드에서defprocess(items):fori,iteminenumerate(items):ifi==50:# 50번째에서만breakpoint()handle(item)
7. 사후 분석 디버깅 (Post-mortem)
1
2
3
4
5
6
7
8
9
10
11
importpdbdefbuggy():x=1y=0returnx/y# ZeroDivisionErrortry:buggy()except:pdb.post_mortem()# 예외 발생 시점으로
1
2
3
# 또는 명령행에서
# python -m pdb script.py
# 예외 발생 시 자동으로 pdb 진입
8. 표현식 실행
1
2
3
4
(Pdb) !import json # 모듈 import
(Pdb) !result = x + y # 코드 실행
(Pdb) p json.dumps(data) # 함수 호출
(Pdb) interact # 대화형 Python 쉘
# pip install remote-pdbfromremote_pdbimportset_traceset_trace(host='0.0.0.0',port=4444)# 다른 터미널에서:# telnet 127.0.0.1 4444
유용한 팁
.pdbrc 설정 파일
1
2
3
4
# ~/.pdbrc
alias pi p dir(%1)
alias pl p locals()
alias pg p globals()
pdb++ (향상된 pdb)
1
pip install pdbpp
1
2
3
# 자동으로 pdb 대체# 구문 강조, sticky mode 등 제공breakpoint()
자주 쓰는 패턴
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 루프에서 특정 조건일 때만 멈추기
for i in range(1000):
if i == 500:
breakpoint()
process(i)
# 함수 시작점에서 항상 멈추기
def complex_function(data):
breakpoint()
# ...
# 예외 직전 상태 확인
try:
risky_operation()
except Exception:
import pdb; pdb.set_trace()
raise
자주 하는 실수
1. 명령어와 변수명 충돌
1
2
3
(Pdb) p n # 'n'이라는 변수? 아니면 next 명령?
(Pdb) p(n) # 변수 n 출력
(Pdb) !n # 변수 n 출력