bdb — 디버거 프레임워크

bdb — 디버거 프레임워크

(소스: Lib/bdb.py)

bdb 모듈은 중단점(breakpoint) 설정이나 디버거를 통한 실행 관리 같은 기본적인 디버거 기능을 다뤄요.

출처: Python documentation

본문

예외

  • exception bdb.BdbQuit: 디버거를 종료하기 위해 Bdb 클래스가 발생시키는 예외.

class bdb.Breakpoint(self, file, line, temporary=False, cond=None, funcname=None)

이 클래스는 임시 중단점, 무시 횟수, 비활성화·(재)활성화, 조건부를 구현해요. 중단점은 bpbynumber라는 리스트를 통해 번호로, bplist를 통해 (file, line) 쌍으로 인덱싱돼요. 전자는 Breakpoint 클래스의 단일 인스턴스를 가리키고, 후자는 줄당 중단점이 여러 개일 수 있어 그런 인스턴스들의 리스트를 가리켜요.

중단점을 만들 때 연관 파일 이름은 표준(canonical) 형식이어야 해요. funcname이 정의되면 그 함수의 첫 줄이 실행될 때 중단점 hit가 계산돼요. 조건부 중단점은 항상 hit를 계산해요.

Breakpoint 인스턴스의 메서드:

  • deleteMe(): file/line과 연관된 리스트에서 중단점 삭제. 그 위치의 마지막 중단점이면 file/line의 항목도 삭제.
  • enable(): 중단점을 활성화로 표시.
  • disable(): 중단점을 비활성화로 표시.
  • bpformat(): 중단점에 대한 모든 정보를 깔끔하게 포맷한 문자열 반환: 중단점 번호, 임시 상태(del/keep), file/line 위치, 중단 조건, 무시 횟수, hit 횟수. (3.2 추가)
  • bpprint(out=None): bpformat()의 출력을 out 파일에, None이면 표준 출력에 인쇄.

Breakpoint 인스턴스의 속성:

  • file: 중단점의 파일 이름.
  • line: file 안의 중단점 줄 번호.
  • temporary: (file, line)의 중단점이 임시면 True.
  • cond: (file, line) 중단점 평가 조건.
  • funcname: 함수에 진입할 때 중단점이 hit되는지 정의하는 함수 이름.
  • enabled: 중단점이 활성화면 True.
  • bpbynumber: 단일 중단점 인스턴스의 숫자 인덱스.
  • bplist: (file, line) 튜플로 인덱싱된 중단점 인스턴스 사전.
  • ignore: 중단점을 무시할 횟수.
  • hits: 중단점이 hit된 횟수.

class bdb.Bdb(skip=None, backend='settrace')

Bdb 클래스는 범용 파이썬 디버거 기본 클래스 역할을 해요. 이 클래스는 trace 기능의 세부사항을 처리하고, 파생 클래스가 사용자 상호작용을 구현해야 해요. 표준 디버거 클래스(pdb.Pdb)가 예시예요.

skip 인자가 주어지면 glob 스타일 모듈 이름 패턴의 iterable이어야 해요. 디버거는 이런 패턴 중 하나와 일치하는 모듈에서 유래한 프레임으로 들어가지 않아요. 프레임이 특정 모듈에서 유래했는지는 프레임 globals의 __name__으로 결정돼요.

backend 인자는 Bdb에 쓸 백엔드를 지정해요. 'settrace' 또는 'monitoring'일 수 있어요. 'settrace'는 가장 좋은 하위 호환성을 가진 sys.settrace()를 사용해요. 'monitoring' 백엔드는 파이썬 3.12에 도입된 새 sys.monitoring을 사용하는데, 사용되지 않는 이벤트를 비활성화할 수 있어 훨씬 효율적일 수 있어요. 두 백엔드의 정확한 인터페이스를 유지하려 하지만 차이가 있어요. 디버거 개발자는 더 나은 성능을 위해 'monitoring' 백엔드 사용을 권장받아요. (3.1에서 skip, 3.14에서 backend 추가)

다음 Bdb 메서드는 보통 오버라이드할 필요 없어요.

  • canonic(filename): filename의 표준 형식 반환. 실제 파일 이름의 표준 형식은 OS 의존적이고 대소문자 정규화된 절대 경로예요. <stdin>처럼 대화형 모드에서 생성된 꺾쇠괄호가 있는 파일 이름은 변경 없이 반환.
  • start_trace(self): 추적 시작. 'settrace' 백엔드에서 sys.settrace(self.trace_dispatch)와 동등. (3.14 추가)
  • stop_trace(self): 추적 중지. 'settrace' 백엔드에서 sys.settrace(None)과 동등. (3.14 추가)
  • reset(): 디버깅을 시작할 준비가 된 값으로 botframe, stopframe, returnframe, quitting 속성 설정.
  • trace_dispatch(frame, event, arg): 디버깅되는 프레임의 trace 함수로 설치되는 함수. 반환값이 새 trace 함수(대부분은 그 자체). 기본 구현은 실행될 이벤트(문자열로 전달)의 유형에 따라 프레임을 어떻게 디스패치할지 결정. event는 다음 중 하나:
    • "line": 새 코드 줄이 실행되려 함.
    • "call": 함수가 호출되려 하거나 다른 코드 블록에 진입.
    • "return": 함수나 다른 코드 블록이 반환하려 함.

(이후 메서드들 — set_step, set_next, set_return, set_until, set_trace, set_continue, set_quit, set_break, clear_break, clear_bpbynumber, clear_all_file_breaks, clear_all_breaks, get_bpbynumber, get_break, get_breaks, get_file_breaks, get_all_breaks, get_stack, get_return, dispatch_call, dispatch_return, dispatch_line, dispatch_exception, dispatch, user_* 훅들, run, runcall, runeval, set_trace 등 — Breakpoint 관리와 실행 제어, 그리고 user_line, user_return, user_exception, user_call 같은 user_*() 훅 메서드들을 제공하는데, 파생 클래스가 이 훅들을 오버라이드해 사용자 상호작용을 구현해요.)

더 알아보기 (Learn more)