Python의 pdb
모듈로 인터랙티브 디버깅하기
Overview
Python의 pdb
모듈은 코드에서 문제를 진단하고 해결하기 위한 강력한 도구입니다. 이 모듈을 활용하면 코드의 실행을 제어하고, 변수의 상태를 검사하며, 문제를 실시간으로 추적할 수 있습니다. 다음은 pdb
의 주요 기능과 사용 방법을 구체적으로 설명합니다.
1. pdb
모듈 기본 사용법
pdb
는 Python의 표준 라이브러리에 포함된 디버거입니다. 기본적인 사용 방법은 다음과 같습니다:
- 디버거 시작하기
코드를 디버깅할 위치에 다음과 같이pdb
를 임포트하고,set_trace()
를 호출합니다:
import pdb
def example_function():
a = 10
b = 20
pdb.set_trace() # 디버거가 여기에 멈추게 됩니다
c = a + b
print(c)
example_function()
코드 실행 시 pdb
는 set_trace()
가 호출된 위치에서 멈추고, 사용자 입력을 기다립니다.
- 디버깅 명령어
pdb
는 여러 명령어를 제공하여 코드 실행을 제어합니다. 주요 명령어는 다음과 같습니다:
n
(next): 현재 줄의 다음 줄로 이동합니다.c
(continue): 다음 중단점까지 실행을 계속합니다.s
(step): 현재 줄을 실행하고, 호출된 함수의 첫 줄로 이동합니다.l
(list): 현재 실행 중인 코드의 주변 코드를 출력합니다.p
(print): 변수의 값을 출력합니다.
예를 들어, 디버거에서 p a
를 입력하면 변수 a
의 값이 출력됩니다.
2. 디버깅 과정에서 자주 발생하는 오류와 해결 방법
- 문법 오류
코드에 문법 오류가 있으면pdb
가 정상적으로 작동하지 않을 수 있습니다. 예를 들어, 다음과 같은 오류가 발생할 수 있습니다:
File "script.py", line 4
pdb.set_trace(
^
SyntaxError: unexpected EOF while parsing
해결 방법은 문법 오류를 수정하는 것입니다. pdb.set_trace()
와 같은 메서드는 반드시 괄호가 올바르게 닫혀야 합니다.
- 잘못된 명령어
pdb
에서 지원하지 않는 명령어를 입력하면 다음과 같은 오류가 발생합니다:
(Pdb) xyz
*** Unknown syntax: xyz
해결 방법은 올바른 명령어를 사용하는 것입니다. pdb
에서 사용할 수 있는 명령어는 help
명령어를 통해 확인할 수 있습니다.
3. 중단점 설정 및 조건부 중단점
중단점을 사용하면 코드 실행이 특정 지점에서 멈추게 할 수 있습니다. 다음은 중단점을 설정하는 방법입니다:
기본 중단점
중단점을 설정하려면, 코드에pdb.set_trace()
를 삽입합니다. 그러나 더 정교한 제어가 필요하다면breakpoint()
를 사용할 수 있습니다.조건부 중단점
특정 조건이 만족될 때만 중단하도록 설정할 수 있습니다. 예를 들어, 특정 변수의 값이 특정 조건을 만족할 때만 중단하도록 설정할 수 있습니다:
import pdb
def example_function(x):
for i in range(10):
if i == 5:
pdb.set_trace() # 중단점 설정
print(i)
example_function(0)
pdb
에서 중단점을 설정한 후 condition
명령어를 사용하여 조건을 추가할 수 있습니다:
(Pdb) condition 1 i == 5
여기서 1
은 중단점의 번호입니다. i
가 5
일 때만 중단됩니다.
4. 디버깅 세션 종료 및 계속하기
디버깅 세션을 종료하려면 q
명령어를 사용하여 디버거를 종료할 수 있습니다. 디버깅 세션 중 코드 실행을 계속하려면 c
명령어를 사용합니다.
참고문서
'Study Information Technology' 카테고리의 다른 글
Python의 hashlib 해싱 및 암호화 함수의 완벽한 안내 (1) | 2024.08.18 |
---|---|
Python의 collections 모듈 deque와 Counter로 데이터 관리 개선하기 (1) | 2024.08.18 |
Python의 threading 모듈로 병렬 작업 처리하기 (0) | 2024.08.18 |
Python의 functools 모듈과 lrucache를 활용한 고차 함수 최적화 (0) | 2024.08.18 |
Python의 asyncio를 활용한 비동기 IO 작업 이해하기 (0) | 2024.08.18 |