GDB 지원¶
페이지 이동¶
GDB를 사용한 CPython 디버깅 정보는 C 확장 모듈에도 관련되므로 이제 기본 Python 문서에 있습니다. 먼저 읽어 보십시오: Debugging C API extensions and CPython Internals with GDB
CPython 팁¶
이 문서에는 CPython 내부를 디버깅할 때 특히 유용한 몇 가지 추가 팁이 포함되어 있습니다.
레이블에 중단점 설정하기¶
대개 함수 시작 부분에 중단점을 설정하지만, 기본 인터프리터 루프 함수인 _PyEval_EvalFrameDefault는 Python 3.12 기준으로 4,000줄이 훨씬 넘으므로 런타임 가상 머신을 디버깅할 때는 이 접근 방식이 그다지 유용하지 않습니다. 다행히 중단점을 설정하는 여러 방법 중에서 계산된 goto를 위해 생성된 것과 같은 C 레이블에 중단점을 설정할 수 있습니다. 계산된 goto 지원을 사용하여 컴파일된 인터프리터를 디버깅하는 경우(일반적으로 그렇고 GCC를 사용할 때는 확실히 그렇습니다), 각 명령어 앞에는 TARGET_<instruction> 형식의 레이블이 붙습니다. 예를 들면 TARGET_LOAD_CONST입니다. 그러면 다음과 같은 명령으로 중단점을 설정할 수 있습니다.:
(gdb) break ceval.c:_PyEval_EvalFrameDefault:TARGET_LOAD_CONST
명령을 추가하고 파일에 저장한 다음, 개별 명령어의 시작 줄 번호가 시간이 지나면서 변경될 것을 걱정하지 않고 향후 세션에서 다시 불러오십시오.
중단점 저장 및 불러오기¶
Python 런타임의 특정 부분을 오랫동안 다루다 보면 일상적으로 사용할 중단점 집합과 중단점에 도달했을 때 실행할 명령을 정의하는 것이 유용할 수 있습니다. 편의를 위해 save breakpoints 명령을 사용하여 중단점을 파일에 저장하고 향후 세션에서 불러오십시오.:
(gdb) save breakpoints python.brk
원하는 대로 파일을 편집한 다음 이후 세션에서 불러올 수 있습니다.:
(gdb) source python.brk