Python Debugpy은(는) 무엇을 하나요?
Python 코드에 대화형 디버깅이 필요할 때 사용합니다: 숨겨진 지역 변수, 혼란스러운 상태 변이, 실패하는 테스트, 서브프로세스, 장기 실행 서비스, 원격/헤드리스 연결.
잘못된 프레임에 도달할 수 있는 가장 작은 디버거를 선택하세요.
선택
breakpoint(): 로컬 코드, 소스 편집 가능, 가장 빠른 경로.python3 -m pdb: 소스 편집 불필요, 처음부터 실행.python3 -m pdb -c continue: 처리되지 않은 예외에서 중지.debugpy: 원격/헤드리스 프로세스, DAP 클라이언트, 이미 실행 중인 PID, 또는 서비스 시작 경합.
명령어
python3 -m pdb path/to/script.py arg1
python3 -m pdb -c continue path/to/script.py
python3 -c "import debugpy" || python3 -m pip install debugpy
python3 -m debugpy --listen 127.0.0.1:5678 --wait-for-client path/to/script.py
python3 -m debugpy --listen 127.0.0.1:5678 --wait-for-client -m package.module
python3 -m debugpy --listen 127.0.0.1:5678 --pid <pid>
소스 편집 연결의 경우:
import debugpy
debugpy.listen(("127.0.0.1", 5678))
debugpy.wait_for_client()
debugpy.breakpoint()
사후 검사의 경우:
import pdb, sys
try:
run()
except Exception:
pdb.post_mortem(sys.exc_info()[2])
raise
pdb
- 흐름:
n,s,r,c,q. - 스택/소스:
w,u,d,a,l,ll. - 값:
p expr,pp expr,display expr. - 중단점:
b file.py:42,b func,b file.py:42, condition,cl <num>. - 변형/평가:
!statement; 전체 REPL:interact.
규칙
- 가장 작은 명령/테스트로 먼저 재현하세요.
- pdb의 경우 병렬 테스트 워커를 비활성화하세요. 대화형 stdin은 일반적으로 워커 풀 내에서 중단됩니다.
debugpy를 활성 환경에 유지하고, 프로젝트가 이미 원하지 않는 한 프로젝트 종속성으로 추가하지 마세요.- 디버그 서버를
127.0.0.1에 바인딩하고, 격리되거나 터널링되지 않은 경우0.0.0.0을 노출하지 마세요. - 병렬 세션에는 고유한 포트를 사용하세요.
debugpy --pid는 실행 중인 프로세스에 주입합니다. 연결하기 전에 대상 PID를 확인하세요.- Linux에서 PID 연결이 실패하면 대상 변경 전에 ptrace/컨테이너 권한을 확인하세요.
- 커밋 전 정리:
rg -n 'breakpoint\(|pdb\.set_trace|debugpy\.' --type py. - 디버거 없이 일반 프로젝트 테스트/게이트를 다시 실행하세요.
PYTHONBREAKPOINT=0은breakpoint()를 비활성화합니다.- 디버거 분리 후 프로세스가 멈춘 경우, 여전히 중단점에서 일시 중지되지 않았는지 확인하세요.