티스토리 뷰
목차
파이썬 pdb 사용, 디버깅 방법과 실행, 종료 (리눅스 공통)
디버깅 모드로 코드를 수행하기 위해 다음의 함수를 사용할 수 있습니다.
pdb.run(statement[, globals[, locals]])
- 디버깅 모드로 해당 구문을 수행
- 호출 직후 코드를 실행하지 않은 채로 디버그 프롬프트가 나타남
pdb.runeval(expression[, globals[, locals]])
- 기본적으로 pdb.run() 함수와 같지만 runeval() 함수가
- 반환할 때 해당 구문의 결과를 반환하지만, 차이점 존재
pdb.runcall(function[, argument, ...])
- 디버깅 모드로 해당 함수를 호출
- 함수로 진입한 직후 디버그 프롬프트가 나타남
파이썬 코드 예. IDLE이나 Command의 python.exe를 수행하고 아래와 같이 입력합니다.
1 2 3 4 5 6 | >>> import pdb >>> import pdbtest >>> pdb.run("pdbtest.ExternalPrint()") > <string>(1)<module>() (Pdb) | cs |
(Pdb)라는 프롬프트가 뜬다면 디버깅 모드로 들어온 것입니다.
디버깅 모드에서는 지정된 명령어로 코드를 수행하고, 변수의 값을 확인하는 일을 할 수 있습니다.
지정된 파이썬 pdb 명령어는 아래와 같습니다.
q (quit)
디버거를 종료
l (list) [시작 값[, 끝값]]
현재 파일의 소스코드 라인을 보여줌. 특별한 인자가 주어지지 않으면 현재 실행 중인 코드를 바탕으로 11줄 정도를 보여줌
b (break) [[파일 이름:]라인|함수[, 조건]]
인자로 전달된 '라인'/'함수'에 브레이크 포인트를 설정. '조건'이 입력된 경우에는 해당 조건을 만족하는 경우에만 코드 실행이 멈춤. 아무런 인자 없이 'b' 명령어가 입력된 경우, 모든 브레이크 포인트 리스트와 상태, 히트된 횟수가 출력됨
cl (clear) [브레이크_포인트_숫자, ...]
브레이크 포인트 삭제
enable [브레이크_포인트_숫자, ...]
인자로 전달된 브레이크 포인트를 활성화
disable [브레이크_포인트_숫자, ...]
인자로 전달된 브레이크 포인트를 비활성화
condition 브레이크_포인트_숫자 [조건]
해당 브레이크 포인트가 조건이 참인 경우에만 활성화. 만약 조건이 없는 경우, 해당 브레이크 포인트에 존재하던 조건이 삭제됨
p (print) '표현식'
표현 식의 값을 출력
s (step)
현재 행을 수행하고 다음 행에서 멈춤. 만약 현재 행이 함수 호출인 경우, 함수 내부로 들어가서 수행.
n (next)
현재 행을 수행하고 다음 행에서 멈춤. setp과 다른 것은 현재 행이 함수 호출인 경우, 함수 내부로 들어가지 않고 함수를 한 번에 완료하고 다음 행으로 이동
r (return)
현재 함수가 반환될 때까지 연속적으로 코드를 수행
c (continue)
다음 브레이크 포인트를 만날 때까지 연속적으로 코드를 수행
w (where)
현재 스택 프레임을 출력. 가장 최근의 스택 프레임이 하위에 위치함
a (args)
현재 함수의 전달된 인자를 출력
u (up)
상위 스택 프레임으로 이동
d (down)
하위 스택 프레임으로 이동
h (help)
명령어 도움말을 확인
[파이썬 디버깅 pdb]
위의 명령어는 축약어(r, q 형태)로 사용하거나, 전체 이름을(return, quit 형태) 모두 입력할 수 있습니다.
r을 입력해 ExternalPrint() 종료될 때까지 수행해 보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | (Pdb) r Count: 0, Message: Apple Count: 1, Message: Apple Count: 2, Message: Apple Count: 3, Message: Apple Count: 4, Message: Apple Count: 0, Message: Banana Count: 1, Message: Banana Count: 2, Message: Banana Count: 3, Message: Banana Count: 0, Message: Orange Count: 1, Message: Orange Count: 2, Message: Orange --Return-- > <string>(1)<module>()->None (Pdb) q | cs |
이번 예제에서는 브레이크 포인트를 설정하지 않았기 때문에 화면에 메시지를 출력하고 정상적으로 종료됩니다.
함수에 반환 값이 없었기 때문에 None이 반환되는 것을 확인할 수 있습니다.
q를 눌러 디버거를 종료합니다.
파이썬 pdb 사용, 디버깅 방법과 실행, 종료 (리눅스 공통)