반응형
pdb 활용하기
- 파이썬 pdb (Python Debugger)는 파이썬 프로그램을 디버깅하는 데 사용되는 내장 모듈입니다.
- 이를 통해 코드를 단계별로 실행하고, 변수의 값을 확인하며, 오류를 추적할 수 있습니다.
- pdb는 매우 강력하고 유연한 디버깅 도구로, 프로그램의 실행을 중단하고 필요한 정보를 수집하는 데 유용합니다.
[pdb 사용 방법]
1. pdb 모듈 임포트
- 먼저, pdb 모듈을 임포트해야 합니다.
import pdb
2. 코드 중간에 브레이크포인트 설정
- 코드 중간에 pdb.set_trace()를 사용하여 브레이크포인트를 설정할 수 있습니다.
- 프로그램이 이 지점에 도달하면 실행이 중단되고 디버깅 모드로 전환됩니다.
import pdb
def my_function():
x = 10
y = 20
pdb.set_trace() # 여기서 프로그램 실행이 중단됩니다.
z = x + y
print(z)
my_function()
3. pdb 명령어
- 디버깅 모드에서 사용할 수 있는 주요 pdb 명령어는 다음과 같습니다.
- c (continue): 프로그램을 다음 브레이크포인트까지 계속 실행합니다. (만약 다음 브레이크포인트가 없다면 코드 끝까지 실행합니다.)
- s (step): 함수 호출을 포함하여 다음 한 줄을 실행하고 중단합니다.
- n (next): 다음 한 줄을 실행하지만, 함수 호출은 실행하지 않고 그 결과만 반환합니다.
- b (break): 새로운 브레이크포인트를 설정합니다. 예를 들어, b 12는 12번째 줄에 브레이크포인트를 설정합니다.
- l (list): 현재 코드의 문맥을 표시합니다. 예를 들어, 현재 위치를 중심으로 소스 코드를 보여줍니다.
- p (print): 변수의 값을 출력합니다. 예를 들어, p x는 변수 x의 값을 출력합니다.
- q (quit): 디버깅을 중지하고 프로그램 실행을 종료합니다.
4. 명령어 예시
- 다음은 디버깅 모드에서 pdb 명령어를 사용하는 예시입니다.
import pdb
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
number = 5
pdb.set_trace() # 여기서 디버깅 모드 시작
result = factorial(number)
print(result)
- 디버깅 모드에서 다음과 같은 명령어를 사용할 수 있습니다.
(pdb) l # 현재 코드 문맥 표시
(pdb) p number # 변수 number의 값 출력
(pdb) n # 다음 줄로 이동
(pdb) s # 함수 내부로 이동
(pdb) c # 다음 브레이크포인트까지 계속 실행
- (pdb) l: l 명령어는 현재 코드의 문맥을 보여줍니다.
- (pdb) p number: p 명령어는 변수의 값을 출력합니다. number의 값은 5입니다.
- (pdb) n: n 명령어는 다음 줄로 이동합니다. 즉, result = factorial(number)를 실행합니다. 이 줄에서 함수 factorial이 호출됩니다. 함수가 호출되면 다시 디버거는 함수의 첫 번째 줄(if n == 0:)에서 중단됩니다.
- (pdb) s: s 명령어는 함수 내부로 들어가 한 줄씩 실행합니다. n == 0 조건을 평가합니다. 현재 n의 값은 5이므로 이 조건은 False입니다.
- (pdb) s: s 명령어를 한 번 더 사용하면 factorial(n-1)을 평가하기 위해 재귀적으로 factorial 함수가 호출됩니다. 이 경우 n은 4입니다. (이 과정을 계속 반복하면 n이 0이 될 때까지 계속 재귀 호출됩니다.)
- (pdb) c: c 명령어는 다음 브레이크포인트까지 계속 실행합니다. 이 경우 pdb.set_trace()와 같은 추가 브레이크포인트가 없기 때문에 프로그램은 끝까지 실행됩니다. factorial 함수는 정상적으로 동작하며, factorial(5)의 결과 120을 출력합니다.
[s(step)과 n(next) 비교]
- s (step): 현재 줄을 실행하고, 함수 호출이 있을 경우 그 함수 내부로 들어가 첫 번째 줄에서 중단합니다. 함수 내부를 상세히 조사할 때 사용합니다.
- n (next): 현재 줄을 실행하고 다음 줄로 넘어가지만, 함수 호출이 있는 경우 그 함수의 실행을 완료한 후 다음 줄로 이동합니다. 함수의 내부 동작을 건너뛰고 빠르게 다음으로 넘어가고자 할 때 사용합니다.
[고급 사용 방법]
1. 조건부 브레이크포인트
- 조건이 충족될 때만 브레이크포인트를 중단하도록 설정할 수 있습니다.
import pdb
def my_function():
for i in range(10):
if i == 5:
pdb.set_trace() # i가 5일 때만 중단
print(i)
my_function()
2. 스크립트로 pdb 실행
- 스크립트를 명령줄에서 -m pdb 옵션과 함께 실행하여 디버깅 모드로 시작할 수 있습니다.
- 파이썬 스크립트를 pdb 모드에서 실행하면 코드의 시작부터 디버깅을 할 수 있습니다.
- 이는 디버깅을 위해 코드에 pdb.set_trace()를 추가할 필요 없이, 명령줄에서 바로 디버깅 모드로 들어가는 방법입니다.
python -m pdb my_script.py
[요약]
- pdb는 파이썬 프로그램을 디버깅하는 데 매우 유용한 도구입니다.
- set_trace()를 사용하여 브레이크포인트를 설정하고, 다양한 명령어를 통해 코드의 실행을 단계별로 추적할 수 있습니다.
- 이를 통해 오류를 찾고 수정하는 과정이 훨씬 쉬워집니다.
반응형
'개발 > Python' 카테고리의 다른 글
[Python] Comprehensive Guide to Using "if" (2) | 2024.07.24 |
---|---|
[Python] Comprehensive Guide to Using "for" Loops (0) | 2024.07.24 |
[파이썬, Python] assert 활용법 총정리 (0) | 2024.07.17 |
[파이썬, Python] 제너레이터 활용법 총정리 (0) | 2024.07.15 |
[파이썬, Python] 디버깅 예시 총정리 (3) | 2024.07.15 |