Python breakpoint()

파이썬 breakpoint()은 파이썬 3.7에서 도입된 새로운 내장 함수입니다. 파이썬 코드 디버깅은 실제 코드와 디버깅 모듈 코드 간의 강한 결합 때문에 항상 고통스러운 과정이었습니다. 예를 들어, 만약 pdb 디버거를 사용하고 있다면, 프로그램 코드에서 pdb.set_trace()를 호출해야 합니다. 다른 디버거를 사용하려면, 예를 들어 web-pdb라고 가정해 봅시다, PDB와 관련된 모든 코드를 제거하고 web_pdb.set_trace() 메서드를 추가해야 합니다. 이로 인해 파이썬 디버거를 사용하는 데 많은 부담이 생기며, 파이썬 코드의 디버깅과 유지 관리가 어려워집니다. 그래서 파이썬 3.7에서는 느슨하게 결합된 디버깅 코드를 작성할 수 있도록 breakpoint() 메서드가 도입되었습니다.

파이썬 breakpoint()

파이썬 breakpoint() 함수는 sys.breakpointhook() 함수를 호출합니다. 기본적으로 sys.breakpointhook()은 pdb.set_trace() 함수를 호출합니다. 그러므로 최소한 breakpoint()를 사용하는 것은 디버거를 사용하는 데 편의성을 제공합니다. 왜냐하면 우리는 명시적으로 pdb 모듈을 가져올 필요가 없기 때문입니다. breakpoint() 함수 사용 예제를 살펴보겠습니다. 다음 코드가 포함된 python 스크립트 python_breakpoint_examples.py가 있습니다.

x = 10
y = 'Hi'
z = 'Hello'
print(y)

breakpoint()

print(z)

이 스크립트를 실행하면 PDB 디버거 콘솔이 열립니다.

$python3.7 python_breakpoint_examples.py
Hi
> /Users/pankaj/Documents/PycharmProjects/BasicPython/basic_examples/python_breakpoint_examples.py(8)()
-> print(z)
(Pdb) c
Hello
$

Python breakpoint() – 디버깅 중지

Python sys.breakpointhook() 함수는 환경 변수 PYTHONBREAKPOINT를 사용하여 디버거를 구성합니다. 설정되지 않은 경우 기본 PDB 디버거가 사용됩니다. “0”으로 설정되면 함수가 즉시 반환되고 코드 디버깅이 수행되지 않습니다. 디버깅 없이 코드를 실행하려는 경우 매우 유용합니다.

$PYTHONBREAKPOINT=0 python3.7 python_breakpoint_examples.py
Hi
Hello
$

Python breakpoint() – 디버거 모듈 변경

PYTHONBREAKPOINT 환경 변수를 사용하여 breakpoint() 함수에서 호출될 디버거 메서드를 제공할 수 있습니다. 이는 어떠한 코드 변경도 필요하지 않고 디버거 모듈을 쉽게 변경할 수 있기 때문에 매우 유용합니다. 예를 들어, “web-pdb” 디버거를 사용하고 싶다고 가정해봅시다. PYTHONBREAKPOINT=web_pdb.set_trace를 사용하여 프로그램에 쉽게 훅(hook)할 수 있습니다. 먼저, web-pdb가 설치되어 있는지 확인해야 합니다. pip3.7 install web-pdb 명령을 사용하여 설치할 수 있습니다.

web-pdb 문서에 따르면, Python 3.7에 추가된 새로운 breakpoint() 함수와 호환됩니다.

$PYTHONBREAKPOINT=web_pdb.set_trace python3.7 python_breakpoint_examples.py
Hi
2018-08-10 12:49:54,339: root - web_console:110 - CRITICAL - Web-PDB: starting web-server on pankaj:5555...

콘솔 로그에서 제공된 웹 서버 URL을 열면 아래 이미지처럼 디버거 창을 볼 수 있습니다. 이 UI를 사용하여 PDB 명령을 실행할 수 있습니다. “c” 명령을 보내서 프로그램을 계속하고 완료할 수 있습니다.

요약

Python의 breakpoint() 함수는 파이썬 디버깅 기능에 매우 유용한 추가 기능입니다. 이를 사용하여 디버깅하는 것이 권장되며, 쉽게 다른 타사 디버거를 연결할 수도 있습니다. 또한 디버거를 비활성화하고 프로그램을 정상적으로 실행하는 간편한 옵션도 제공합니다.

더 많은 Python 예제는 GitHub 저장소에서 확인할 수 있습니다.

참고: 공식 문서

Source:
https://www.digitalocean.com/community/tutorials/python-breakpoint