[파이썬] pdb와 git 통합 사용법

개요

가끔씩 프로그램을 디버깅해야 할 때가 있습니다. 이때 pdb(Python Debugger)를 사용하면 프로그램의 실행 중에 중단점을 설정하고, 변수의 값을 검사하며, 스택 추적(traceback)을 확인할 수 있습니다. 이 글에서는 pdb를 사용하여 Python 코드를 디버깅하는 방법에 대해 알아보겠습니다. 또한, Git과 pdb를 결합하여 디버깅 정보를 저장하고 추적할 수 있는 방법에 대해서도 다룰 것입니다.

PDB 기본 사용법

1. 디버깅 시작하기

Python 스크립트를 디버깅 모드로 실행하려면 다음과 같이 해당 스크립트의 경로를 인자로 pdb 명령어와 함께 실행하면 됩니다.

python -m pdb my_script.py

2. 중단점 설정하기

디버깅 도중 특정 부분에서 프로그램을 중지하려면 중단점을 설정해야 합니다. pdb에서는 break 혹은 b 명령어를 사용하여 중단점을 설정할 수 있습니다. 예를 들어, 파일의 10번째 줄에 중단점을 설정하려면 다음과 같이 입력합니다.

b 10

3. 실행 및 디버깅

중단점을 설정한 후에는 c(continue) 명령어를 사용하여 프로그램을 실행하고 중단점에 도달할 때까지 진행할 수 있습니다. 중단점에서 프로그램이 멈추면 변수의 값을 확인하거나 스택 추적을 확인할 수 있습니다. 이때, n(next) 명령어를 사용하여 다음 줄로 이동하거나 s(step) 명령어를 사용하여 함수 내부로 진입할 수 있습니다.

4. 변수 값 확인하기

중단점에서 프로그램이 멈춘 상태에서 변수의 값을 확인하려면 해당 변수의 이름을 입력하면 됩니다. 예를 들어, x라는 변수의 값을 확인하려면 다음과 같이 입력합니다.

p x

5. 스택 추적 확인하기

중단점이나 프로그램이 중지된 상태에서 스택 추적을 확인하려면 where 명령어를 사용합니다. 이를 통해 프로그램이 도달한 위치와 호출 스택을 확인할 수 있습니다.

Git과 PDB 통합

Git과 pdb를 결합하면 디버깅 정보를 저장하고 추적할 수 있습니다. 디버깅 중에 발생하는 모든 중단점과 스택 추적 정보를 .gitignore에 등록하여 Git으로 관리되는 디렉토리에 저장할 수 있습니다. 이를 위해 다음과 같이 .pdbrc 파일을 생성합니다.

# .pdbrc 파일 내용
import pdb
import os

def pdb_save(frame, event, arg):
    if event == 'call':
        frame.f_trace_lines = False
    elif event == 'return':
        frame.f_lineno += 1

    if event in {'call', 'return'}:
        filename = frame.f_globals['__file__']
        if filename.endswith('.pyc'):
            filename = filename[:-1]

        basename = os.path.basename(filename)
        pdb_commands = [
            'source .gitignore',  # Git으로 관리되는 디렉토리에 저장하기 위해 .gitignore, .git 디렉토리 무시
            'up',
            'print()',
            f'!git add {filename}',
            f'!git commit -m "pdb: {basename}:{frame.f_lineno}"',
            'continue'
        ]
        
        pdb_commands = '\n'.join(pdb_commands)
        pdb_commands_bytes = pdb_commands.encode()
        return pdb_commands_bytes

pdb.set_trace = pdb_save

.pdbrc 파일을 생성한 후, 해당 파일을 코드가 있는 디렉토리로 복사합니다. 그리고 다음과 같이 pdb를 실행합니다.

python -m pdb my_script.py

이제 pdb를 사용하여 디버깅하면 중단점에 도달할 때마다 Git으로 변경 사항이 저장되고 커밋됩니다.

결론

이제 Python 코드를 디버깅하기 위해 pdb를 사용하는 기본적인 방법을 알아보았습니다. 또한, Git과 pdb를 통합하여 디버깅 정보를 저장하고 추적할 수 있는 방법에 대해서도 배웠습니다. 이러한 도구를 적절히 활용하면 코드 디버깅 과정을 보다 효과적으로 수행할 수 있을 것입니다.

다음 글에서는 pdb를 사용하여 좀 더 복잡한 디버깅 시나리오를 다루어볼 예정입니다. 기대해주세요!