GNU gdb
처럼 파이썬엔 pdb
Python Debugger 모듈을 제공한다.gdb
와 명령어가 상당이 비슷해서 gdb
를 사용하던 사람들은 쓸만하다.$ python -m pdb <python.py>
gdb
처럼 한줄 한줄 명령어로 실행한다.python3 -m pdb myscript.py -o val
디버거 명령들
h(elp)
는 h
로 사용할 수 있음[ ]
l(ist)
실행 후, enter
를 눌리면, 그 다음의 11
줄이 출력됨!
를 붙여서 사용할 수 있음;;
로 구분할 수 있음command | description |
---|---|
h(elp) [command] | command 가 주어진 경우: 해당 명령의 도움말을 출력 |
w(here) | |
d(own) [count] | |
u(p) [count] | |
b [([filename:]lineno | function) [, condition]] | lineno 인자가 주어진 경우: 현재 파일의 해당 줄 번호에 브레이크를 설정
|
tbreak [([filename:]lineno | function) [, condition]] | |
cl(ear) [filename:lineno | bpnumber ...] | filename:lineno 인자가 주어진 경우, 해당 줄에 있는 모든 중단점을 제거 |
disable [bpnumber ...] |
|
enable [bpnumber ...] | |
ignore bpnumber [count] | |
condition bpnumber [condition] |
|
commands [bpnumber] | bpnumber 인자가 주어지지 않으면, commands 는 마지막 중단점 묶음을 참조하게 된다.continue , step , next , return , jump , quit 및 해당 명령의 약어들)을 지정하는 것은 (end 명령을 붙인 것처럼) 해당 명령 목록을 끝내는 것.
|
s(tep) | |
n(ext) | |
unt(il) [lineno] | 두 경우 모두 현재 프레임이 반환될 때 멈춥니다. |
r(eturn) | 현재 함수가 반환될 때까지 계속 실행 |
c(ont(inue)) | 중단점을 마주칠 때까지 계속 실행 |
j(ump) lineno | 다음으로 실행될 줄을 설정 중요한 점은 이 명령은 언제나 실행할 수 있진 않습니다 -- for 루프 내부로 들어가거나 finally 절을 건너뛰는 것은 불가능합니다. |
l(ist) [first[, last]] |
-> 로 표시. 예외를 디버깅할 때, 예외가 최초로 발생하거나 전파된 줄이 현재 줄과 다른 경우에는 >> 로 표시 |
ll | longlist | 현재 함수나 프레임의 소스 코드 전체를 나열 참고할만한 줄은 list처럼 표시 |
a(rgs) | 현재 함수의 인자 목록을 출력 |
p expression | 현재 컨텍스트에서 expression을 실행하고 값을 출력 |
print() | 파이썬의 print() 함수를 실행 |
pp expression | p 명령과 비슷하지만, 표현식의 값을 pprint 모듈을 활용하여 보기 좋은 형태로 출력 |
whatis expression | expression 의 형(type )을 출력 |
source expression | 주어진 객체의 소스 코드를 가져와서 보여줌 |
display [expression] | |
undisplay [expression] | 현재 프레임에서 표현식을 더는 표시하지 않는다. 표현식이 주어지지 않은 경우, 현재 프레임에서 표시되는 모든 표현식을 제거합니다. |
interact | 현재 스코프에서 찾을 수 있는 모든 지역 또는 전역 이름을 담고 있는 전역 이름 공간을 가진 (code 모듈을 활용하는) 대화형 인터프리터를 시작합니다. |
alias [name [command]] | |
unalias name | 지정된 에일리어스를 제거합니다. |
! statement | 현재 스택 프레임의 컨텍스트에서 단일 statement를 실행 문장의 첫 단어가 디버거 명령이 아닌 경우, 느낌표는 제외해도 된다. 전역 변수를 설정하려면 실행하려는 명령과 동일한 줄 맨 앞에 global문장을 붙이면 된다. |
run [args ...] restart [args ...] |
|
q(uit) | 디버거를 종료 |
debug code | code 인자(현재 환경에서 실행될 임의의 표현식이나 문장)를 단계별로 수행하는 재귀적 디버거에 진입 |
retval | 함수의 마지막 반환에 대한 반환 값을 프린트 |
h
: help(Pdb) h
n
: 행 수행(like-f10
)s
: 행 진입(like-f11
)l
: list -> 실행 전w
: 스택 프레임 출력w
: 가장 최근 프레임을 맨 아래로 하는 스택 트레이스 출력.u
: 스택 하나 업d
: 스택 하나 다운r
: 현 함수 리턴 직전까지 실행p [VAR]
: VAR 표시(Pdb) p [VAR]
display [VAR]
(Pdb) display [VAR]
display
display
set한 변수의 현재 값을 출력한다.! VAR=value
: 변수에 값 재설정(Pdb) ! VAR=value
b
: 현재 bp show(Pdb) b
b [라인 번호]
: '라인 번호'에 bp(Pdb) b [line_number]
[line_number]
에 Break Point
걸 라인 번호를 찍으면 해당 라인에 bp가 걸린다.cl
: clear,c
: 다음 bp까지 실행(Pdb) c