bdb — 디버거 프레임워크
bdb — 디버거 프레임워크
(소스: Lib/bdb.py)
bdb 모듈은 중단점(breakpoint) 설정이나 디버거를 통한 실행 관리 같은 기본적인 디버거 기능을 다뤄요.
본문
예외
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_*() 훅 메서드들을 제공하는데, 파생 클래스가 이 훅들을 오버라이드해 사용자 상호작용을 구현해요.)