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

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



댓글(0)

Designed by JB FACTORY