본문 바로가기
개발/Python

[파이썬, Python] pdb 활용법 총정리

by 꾀돌이 개발자 2024. 7. 17.
반응형

 

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()를 사용하여 브레이크포인트를 설정하고, 다양한 명령어를 통해 코드의 실행을 단계별로 추적할 수 있습니다.

- 이를 통해 오류를 찾고 수정하는 과정이 훨씬 쉬워집니다.

 

반응형