이 라이브러리와 도구를 사용하여 Python을 영웅처럼 디버그하십시오
게시 됨: 2022-06-26진정한 Python 디버깅 전문가가 되고 싶습니까? 곧 다룰 이 놀라운 Python 디버깅 도구와 라이브러리를 사용하여 Python 코드를 디버그하십시오!
Python은 많은 개발 목적으로 사용되는 범용 고급 객체 지향 프로그래밍 언어입니다. 또한 웹 응용 프로그램 개발에서 웹 스크래핑 및 기계 학습 및 데이터 과학과 같은 더 복잡한 응용 프로그램에 이르기까지 다양한 응용 프로그램을 위한 효과적인 개발 도구입니다.
개발 과정에서 프로그래밍의 버그라는 오류가 발생하기 쉽습니다. 개발자는 코드에서 기존 및 잠재적 버그를 감지하고 제거하기 위해 여러 단계를 수행합니다. 결과적으로 프로그램 코드가 손상되는 것을 방지할 수 있습니다. 이 프로세스를 디버깅이라고 합니다.
이 기사에서는 사용할 수 있는 여러 Python 디버거를 살펴봅니다. 우리는 또한 이러한 디버거가 서로 얼마나 다른지, 그리고 무엇이 그들의 구현을 효과적으로 만드는지 볼 것입니다.
cProfiler 디버깅 라이브러리
cProfiler는 널리 사용되는 라이브러리이자 장기 실행 코드의 프로파일링을 실행하는 C 확장입니다. 장기적으로 실행하는 데 시간이 오래 걸리는 프로그램 코드 섹션을 식별합니다. 코드의 다른 섹션을 실행하는 데 걸리는 정확한 시간을 식별하지만 코드의 버그를 완전히 식별하거나 수정하지는 않습니다.
따라서 다른 디버거를 사용해야 할 필요성이 발생합니다.
다행히도 ipdb, Django-debug-toolbar, pyelftools, viztracer 및 py-spy와 같은 권장 라이브러리를 Python 코드용 디버깅 도구로 사용할 수 있습니다.
ipdb 디버깅 도구
전체 IPython 지원 Python 디버거는 pdb의 기능을 포함하는 대화형 타사 디버거입니다. Ipbd는 대화식 쉘 IPython 지원과 함께 제공됩니다. 이러한 지원에는 다른 지원 기능 중에서 탭 완성, 색상 지원 및 매직 기능이 포함됩니다.
이 디버거를 사용하면 관련 기능을 내보내 IPython 디버거에 액세스할 수 있습니다. 또한 pdb 모듈에서와 같이 더 나은 내성을 위해 유사한 인터페이스를 제공합니다.
Ipdb로 디버깅
라이브러리는 아래 pip 명령을 사용하여 설치해야 합니다.
pip install ipdb
ipdb를 사용하는 예는 다음과 같습니다.
import ipdb alpha_list = ['a', 'b', 'c'] fruit_list = ['orange', 'mango', 'kiwi'] def nested_loop(): for fruit_list: print (fruit) ipdb.set_trace() for x in alpha_list: print(x) if __name__ == '__main__': nested_loop()
test.py가 내 파일 이름인 곳에서 아래 명령을 사용하여 python 파일을 실행합니다.
python -m ipdb test.py
ipdb import 및 ipdb.set_trace()
함수를 실행하면 프로그램의 시작을 허용하고 실행을 통해 디버거를 실행합니다.
ipdb.pm()
함수(post-mortem)는 %debug
매직 함수와 유사하게 작동합니다.
set_trace 인수
컨텍스트를 set_trace
에 인수로 전달하여 정의된 여러 줄의 코드를 표시합니다. 또한 set_trace
도 인수로 허용하는 cond
는 부울 값을 허용하고 cond
를 true
로 설정하면 ipdb 인터페이스를 시작합니다.
구성 파일 사용
홈 폴더와 프로젝트 폴더에서 각각 사용 가능한 idpdb 파일 또는 setup.cfg
파일로 컨텍스트 인수를 설정합니다. ipdb의 기능을 추가로 확인하실 수 있습니다.
Django 디버그 도구 모음
Django 디버그 도구 모음은 Python 프레임워크인 Django에서 널리 사용되는 디버깅 도구입니다.
이 구성 가능한 패널 세트는 현재 요청 또는 응답의 디버그 정보를 표시합니다. 도구 모음을 클릭하면 패널 내용에 대한 자세한 내용이 표시됩니다.
이 도구는 Django 개발 환경을 철저히 검사합니다.
여기에서 설치 프로세스와 구성 지침을 따르십시오.
Pyelftools 라이브러리
pyelftools 라이브러리는 순수하게 Python을 기반으로 합니다. ELF 파일 및 DWARF 디버깅 정보를 구문 분석하고 분석하며 Python만 실행하면 됩니다.
Pyelftools를 사용하는 것은 외부 라이브러리가 없기 때문에 쉽습니다. 또한 설치 없이 pyelftools를 사용하는 것은 환경 변수에서 PYTHONPATH
를 조정하기만 하면 되기 때문에 매우 쉽습니다.
다음을 사용하여 설치합니다.
pip install pyelftools
pyelftools를 구현하려면 간단히 가져와서 프로그램에서 호출하면 됩니다.
아이스크림 디버깅 도구
이것은 Python 개발자를 위한 또 다른 효율적인 디버깅 도구입니다.
icecream(또한 ic()
을 사용하면 아래와 같이 print()보다 많은 이점이 있습니다.
- 문자 그대로 입력하는 것이 상대적으로 빠릅니다.
- 데이터 구조를 꽤 잘 인쇄합니다.
-
ic()
을 사용하여 표현식 또는 변수 이름 및 해당 값을 인쇄하십시오. - 출력 구문을 강조 표시합니다.
- 선택적으로 여기에는 파일 이름, 줄 번호 및 상위 함수를 포함한 프로그램 컨텍스트가 포함됩니다.
이 패키지를 사용하기 전에 아래 pip 명령을 사용하여 설치하십시오.

pip install icecream
좋은 점은 install()
을 사용하여 설치하여 모든 파일에서 반드시 ic()
을 가져올 필요 없이 모든 파일에서 사용할 수 있다는 것입니다. 또한 install()
은 내장 모듈에 ic()
을 추가합니다. 인터프리터가 가져오는 모든 파일은 ic()
을 공유합니다.
x.py라는 이름을 지정할 수 있는 첫 번째 루트 python 파일에서 install()
) 을 사용하여 ic()
을 추가하십시오.
from icecream import install install() from y import mult mult()
y.py 파일에서 x.py 파일을 가져오려면 ic()
def mult(): z=8 ic(z)
결과:
y ic| z : 8
ic()을 더 효율적으로 만드는 것은 자신을 포함하여 전달된 변수를 검사한 다음 다음 예제와 같이 해당 인수와 인수 값을 인쇄하는 기능입니다.
from icecream import ic def mult(x): return x * 4 ic(mult(100))
산출:
ic| mult(100): 400
또한 ic()이 인수를 반환하므로 기존 코드에 ic()을 삽입할 수 있습니다. 아래 예제는 ic| x: 12
ic| x: 12
, ic| y: 48
ic| y: 48
.
from icecream import ic x = 12 def mult(x): return x*4 y = mult(ic(x)) ic(y)
py-spy 도구를 사용한 디버깅
py-spy를 사용하여 디버깅 도구로 Python 프로그램에 대한 샘플을 프로파일링할 수 있습니다. 프로그램을 다시 시작하거나 코드를 수정하지 않고 py-spy는 Python 프로그램의 실행을 시각화합니다. 게다가 Rust로 작성되었기 때문에 오버헤드가 적습니다.
또한 프로덕션 Python 코드에 대해 py-spy를 사용하는 것은 프로파일링된 Python 프로그램과 다른 프로세스를 실행하기 때문에 안전하다는 점을 고려할 가치가 있습니다.
앞에서 본 다른 모든 도구와 마찬가지로 py-spy 도구를 설치한 후 사용할 수 있습니다.
pip install py-spy
프로덕션 트래픽을 제공하는 Python 프로그램에도 불구하고 py-spy를 사용하여 이 프로그램을 프로파일링하고 디버그할 수 있으므로 중요한 Python 프로파일러 도구가 됩니다.
Viztracer 디버거
또는 디버깅 도구인 viztracer를 사용하여 Python 프로그램 실행을 추적하고 시각화할 수 있습니다. 또한 오버헤드가 낮은 로깅이 있는 프로파일링 도구입니다.
viztracer를 효과적인 디버깅 도구로 만드는 것은 무엇입니까?
- 그것을 사용하는 것은 매우 쉽고 외부 패키지에 의존하지 않습니다.
- Viztracer는 Windows, Linux 또는 macOS와 같은 모든 운영 체제 플랫폼에서 작동합니다.
- 강력한 프런트 엔드는 GB 수준 추적을 부드럽게 렌더링합니다.
- RegEx를 사용하여 소스 코드 내의 코드 섹션을 수정하지 않고 변수 및 속성, 발생한 예외, 가비지 수집기 작업 등과 같은 임의의 기능과 추가 정보를 기록합니다.
- viztracer를 오버헤드가 낮은 디버깅 도구로 만드는 것은 프로그램에서 필요하지 않은 데이터를 필터링하는 기능입니다. 그런 다음 JSON 형식으로 로그를 덤프하기 전에 이전 정보를 유지합니다.
- 이를 사용하여 프로그램이 실행될 때 인스턴트 이벤트, 변수 이벤트 및 Duration 이벤트와 같은 사용자 정의 이벤트를 삽입할 수 있습니다. 이렇게 하면 인쇄 디버그처럼 작동하지만 viztracer는 데이터를 추적할 때 인쇄가 발생하는 시기를 알려줍니다.
결론
소프트웨어 프로파일링과 마찬가지로 Python 프로파일링 및 디버깅은 주의가 필요한 개발의 핵심 단계입니다. 이 단계는 코드의 전체 성능이 최적화되도록 버그가 있는 코드 섹션을 배제하는 데 도움이 됩니다.
위에서 다룬 디버깅 도구는 Python 개발자의 작업을 매우 쉽게 만드는 효율적인 도구입니다.
다른 디버깅 도구가 cProfiler보다 더 효과적으로 작동하는 것을 보면 진정한 영웅처럼 Python 코드를 디버그하고 이러한 디버거를 사용하여 잠재적인 버그를 수정하여 코드가 충돌 없이 실행되는 것을 방지할 수 있습니다.
즐거운 디버깅!