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 | 다음 문장으로 이동 |
변수값 화면에 표시 | |
list | 소스코드 리스트 출력. 현재 위치 화살표로 표시됨 |
where | 콜스택 출력 |
continue | 계속 실행. 다음 중단점에 멈추거나 중단점 없으면 끝까지 실행 |
step | Step Into 하여 함수 내부로 들어감 |
return | 현재 함수의 리턴 직전까지 실행 |
!변수명 = 값 | 변수에 값 재설정 |
아래 그림은 여러 PDB 명령들을 사용하여 (위에서 예시한) test2.py 코드를 디버깅한 예이다.
3. IDE 디버깅
PyCharm, PTVS, Spyder와 같은 IDE는 UI에서 쉽게 디버깅을 할 수 있는 기능을 제공하고 있다. 일반적으로 코드 상에 중단점(Breakpoint)를 걸고 디버깅 실행 버튼을 눌러 디버깅을 시작하고, Step Over, Step Into 등의 버튼을 사용하여 한 라인씩 디버깅해 나갈 수 있다. 아래는 Spyder에서 디버깅하는 예이다.