Python 디버깅 (PDB)

1. Python 디버깅

Python은 디버깅을 위해 pdb 라는 Python Debugger 모듈을 제공하고 있다. 이 디버거는 Step over/Step into, 중단점(breakpoint) 설정, 콜스택 검사, 소스 리스팅, 변수 치환 등 다양한 기능을 가지고 있다.

Python 디버깅에서 사용되는 방법 중 하나로 아래와 같이 "python -m pdb 파이선파일.py" 를 사용하는 방법이 있다. "-m pdb" 를 사용하게 되면, 디버거 하에서 파이선 파일을 실행하게 된다. 예를 들어, 아래 예를 보면 test1.py라는 파이썬 모듈의 첫번째 라인에서 프로그램을 중단하고 디버거 프롬프트인 (Pdb) 를 표시함을 볼 수 있다. (밑에서 설명하지만 아래는 Pdb 프롬프트에서 list를 사용하여 test1.py의 소스코드를 출력하였다)

Python 디버깅에서 흔히 사용되는 두번째 디버깅 방법은 pdb 모듈을 import 한 후, pdb.set_trace()를 중단하고 싶은 곳에 넣는 방식이다. 이렇게 하면 파이썬 프로그램 실행시 pdb.set_trace() 문장이 있는 곳에서 실행을 중지하고 디버거 세션을 시작하게 한다. 아래 그림을 보면 pdb.set_trace() 다음 문장에서 (Pdb) 프롬프트가 표시되어 있음을 볼 수 있다.

# test2.py 소스
import pdb

def sum(x, y):
    z = x + y
    return z

a = 10
pdb.set_trace()  # 이곳에서 프로그램 중단
b = 20
c = sum(a, b)
print(c)

2. PDB 사용법

PDB를 사용하여 디버깅 모드로 진입하게 되면, (Pdb) 프롬프트가 나오게 되는데 여기서 여러 PDB 명령을 사용할 수 있다. 즉, 다음 문장을 실행하거나(next), 변수 값을 프린트하거나(print), 소스코드를 리스팅하거나(list), 함수 안으로 들어가거나(step into) 하는 일들을 PDB 명령을 사용하여 실행할 수 있다.

다음은 자주 사용되는 PDB 명령들을 요약한 것이다. 명령어를 단어 전체를 사용해도 되지만, 보통 약어로 앞의 한 글자만 사용할 수 있다. 즉, next 대신 n 을 사용할 수 있다.

PDB 명령어 실행내용
help도움말
next다음 문장으로 이동
print변수값 화면에 표시
list소스코드 리스트 출력. 현재 위치 화살표로 표시됨
where콜스택 출력
continue계속 실행. 다음 중단점에 멈추거나 중단점 없으면 끝까지 실행
stepStep Into 하여 함수 내부로 들어감
return현재 함수의 리턴 직전까지 실행
!변수명 = 값변수에 값 재설정

아래 그림은 여러 PDB 명령들을 사용하여 (위에서 예시한) test2.py 코드를 디버깅한 예이다.

3. IDE 디버깅

PyCharm, PTVS, Spyder와 같은 IDE는 UI에서 쉽게 디버깅을 할 수 있는 기능을 제공하고 있다. 일반적으로 코드 상에 중단점(Breakpoint)를 걸고 디버깅 실행 버튼을 눌러 디버깅을 시작하고, Step Over, Step Into 등의 버튼을 사용하여 한 라인씩 디버깅해 나갈 수 있다. 아래는 Spyder에서 디버깅하는 예이다.

본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.