본문 바로가기
C++ 200제/코딩 IT 정보

파이썬 pdb 사용, 디버깅 방법과 실행 종료 (리눅스 공통)

by vicddory 2017. 2. 14.

파이썬 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[파이썬 디버깅 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 사용, 디버깅 방법과 실행, 종료 (리눅스 공통)

댓글