[파이썬] pdb에서의 함수 및 메서드 호출 추적

파이썬 디버깅 도구인 pdb는 코드의 실행 중에 오류를 찾고 디버깅하는 데 도움을 줍니다. pdb는 프로그램을 실행하면서 각 줄마다 중단점을 설정하거나, 스텝 단계별로 코드를 실행하고 변수와 함수의 값을 확인할 수 있습니다. 그 중에서도 특히 함수와 메서드 호출 추적은 디버깅 작업에서 매우 유용한 기능입니다.

함수 호출 추적

pdb를 사용하여 파이썬 스크립트를 디버깅하는 경우, 코드의 어느 부분이 실행 중에 특정 함수를 호출했는지 추적할 수 있습니다. pdb.set_trace() 함수를 이용하여 중단점을 설정한 후, s 명령을 통해 함수 호출을 추적할 수 있습니다.

아래 예시를 통해 함수 호출 추적을 살펴보겠습니다:

import pdb

def calculate_sum(a, b):
    result = a + b
    return result

def calculate_product(a, b):
    result = a * b
    return result

def main():
    x = 5
    y = 10
    pdb.set_trace()
    sum_result = calculate_sum(x, y)
    product_result = calculate_product(x, y)
    print(f"Sum result: {sum_result}")
    print(f"Product result: {product_result}")

if __name__ == "__main__":
    main()

위 예시 코드에서 pdb.set_trace()를 호출한 뒤 스크립트를 실행하면, pdb 프롬프트가 표시되며 코드의 실행이 중지됩니다. 이 상태에서 s를 입력하여 함수 호출을 추적합니다.

-> sum_result = calculate_sum(x, y)
(Pdb) s
--Call--
> /path-to-script/main.py(4)calculate_sum()
-> def calculate_sum(a, b):
(Pdb) s
> /path-to-script/main.py(5)calculate_sum()
-> result = a + b
(Pdb) s
--Return--
> /path-to-script/main.py(5)calculate_sum()->15
-> return result

디버깅 중에 함수의 내부로 이동하고 각 줄을 실행할 때, 현재 실행중인 함수의 호출 추적이 자동으로 표시됩니다. --Call----Return-- 표시를 통해 함수가 호출되는 위치와 종료되는 위치를 알 수 있습니다.

메서드 호출 추적

클래스의 메서드 또한 pdb를 사용하여 디버깅할 수 있습니다. pdb.set_trace()를 호출한 후 스크립트를 실행하면, 메서드 호출 추적을 수행할 수 있습니다. 아래 예시를 통해 메서드 호출 추적을 확인해보겠습니다:

import pdb

class Calculator:
    def __init__(self):
        self.result = 0
    
    def add(self, a, b):
        self.result = a + b
        return self.result
    
    def multiply(self, a, b):
        self.result = a * b
        return self.result

def main():
    calculator = Calculator()
    x = 5
    y = 10
    pdb.set_trace()
    sum_result = calculator.add(x, y)
    product_result = calculator.multiply(x, y)
    print(f"Sum result: {sum_result}")
    print(f"Product result: {product_result}")

if __name__ == "__main__":
    main()

위 예시 코드에서도 pdb.set_trace()를 호출한 뒤 스크립트를 실행하면, pdb 프롬프트가 표시되고 코드의 실행이 중단됩니다. s 명령을 사용하여 메서드 호출을 추적할 수 있습니다.

-> sum_result = calculator.add(x, y)
(Pdb) s
--Call--
> /path-to-script/main.py(7)add()
-> def add(self, a, b):
(Pdb) s
> /path-to-script/main.py(8)add()
-> self.result = a + b
(Pdb) s
--Return--
> /path-to-script/main.py(8)add()->15
-> return self.result

메서드 호출 추적 역시 --Call----Return--을 통해 메서드 호출 위치 및 종료 위치를 추적할 수 있습니다.

결론

pdb를 사용하여 파이썬 코드를 디버깅할 때, 함수와 메서드 호출 추적은 오류 해결 및 코드 분석에 매우 유용한 기능입니다. pdb.set_trace()를 사용하여 중단점을 설정하고 s 명령을 통해 함수와 메서드 호출을 추적하여 코드의 실행 흐름을 이해할 수 있습니다. 디버깅 기능을 적절히 활용하여 효율적인 디버깅 과정을 거쳐 더 품질 좋은 파이썬 애플리케이션을 개발할 수 있습니다.