이 라이브러리와 도구를 사용하여 Python을 영웅처럼 디버그하십시오

진정한 Python 디버깅 전문가가 되고 싶습니까? 곧 다룰 이 놀라운 Python 디버깅 도구와 라이브러리를 사용하여 Python 코드를 디버그하십시오!

Python은 많은 개발 목적으로 사용되는 범용 고급 객체 지향 프로그래밍 언어입니다. 또한 웹 응용 프로그램 개발에서 웹 스크래핑 및 기계 학습 및 데이터 과학과 같은 더 복잡한 응용 프로그램에 이르기까지 다양한 응용 프로그램을 위한 효과적인 개발 도구입니다.

개발 과정에서 프로그래밍의 버그라는 오류가 발생하기 쉽습니다. 개발자는 코드에서 기존 및 잠재적 버그를 감지하고 제거하기 위해 여러 단계를 수행합니다. 결과적으로 프로그램 코드가 손상되는 것을 방지할 수 있습니다. 이 프로세스를 디버깅이라고 합니다.

이 기사에서는 사용할 수 있는 여러 Python 디버거를 살펴봅니다. 우리는 또한 이러한 디버거가 서로 얼마나 다른지, 그리고 무엇이 그들의 구현을 효과적으로 만드는지 볼 것입니다.

cProfiler 디버깅 라이브러리

c프로파일러는 널리 사용되는 라이브러리이자 장기 실행 코드의 프로파일링을 실행하는 C 확장입니다. 장기적으로 실행하는 데 시간이 오래 걸리는 프로그램 코드 섹션을 식별합니다. 코드의 다른 섹션을 실행하는 데 걸리는 정확한 시간을 식별하지만 코드의 버그를 완전히 식별하거나 수정하지는 않습니다.

따라서 다른 디버거를 사용해야 할 필요성이 발생합니다.

다행히도 ipdb, Django-debug-toolbar, pyelftools, viztracer 및 py-spy와 같은 권장 라이브러리를 Python 코드용 디버깅 도구로 사용할 수 있습니다.

ipdb 디버깅 도구

전체 IPython 지원 Python 디버거는 다음을 포함하는 대화형 타사 디버거입니다. pdb의 기능. Ipbd 대화형 셸 IPython 지원도 함께 제공됩니다. 이러한 지원에는 다른 지원 기능 중에서 탭 완성, 색상 지원 및 매직 기능이 포함됩니다.

이 디버거를 사용하면 관련 기능을 내보내 IPython 디버거에 액세스할 수 있습니다. 또한 pdb 모듈에서와 같이 더 나은 내성을 위해 유사한 인터페이스를 제공합니다.

  Verizon 고객 서비스에서 사람을 얻는 방법

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 개발자를 위한 또 다른 효율적인 디버깅 도구입니다.

사용 아이스크림또한 ic()은 아래와 같이 print()보다 많은 이점이 있습니다.

  • 문자 그대로 입력하는 것이 상대적으로 빠릅니다.
  • 데이터 구조를 꽤 잘 인쇄합니다.
  • ic()을 사용하여 표현식 또는 변수 이름 및 해당 값을 인쇄합니다.
  • 출력 구문을 강조 표시합니다.
  • 선택적으로 여기에는 파일 이름, 줄 번호 및 상위 함수를 포함한 프로그램 컨텍스트가 포함됩니다.
  Linux의 Shadow of War

이 패키지를 사용하기 전에 아래 pip 명령을 사용하여 설치하십시오.

pip install icecream

좋은 점은 install()을 사용하여 설치하여 모든 파일에서 반드시 ic()을 가져올 필요 없이 모든 파일에서 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| 여: 48.

from icecream import ic
x = 12
def mult(x):
    return x*4
    y = mult(ic(x))
    ic(y)

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는 Windows, Linux 또는 macOS와 같은 모든 운영 체제 플랫폼에서 작동합니다.
  • 강력한 프런트 엔드는 GB 수준의 추적을 부드럽게 렌더링합니다.
  • RegEx를 사용하여 임의의 기능과 다음과 같은 추가 정보를 기록합니다. 변수 및 속성, 발생한 예외, 가비지 컬렉터 작업등, 소스 코드 내의 코드 섹션을 수정하지 않고.
  • viztracer를 오버헤드가 낮은 디버깅 도구로 만드는 것은 프로그램에서 필요하지 않은 데이터를 필터링하는 기능입니다. 그런 다음 JSON 형식으로 로그를 덤프하기 전에 이전 정보를 유지합니다.
  • 이를 사용하여 다음과 같은 사용자 정의 이벤트를 삽입할 수 있습니다. 즉석 이벤트, 가변 이벤트그리고 기간 이벤트 프로그램이 실행되면서. 이렇게 하면 데이터를 추적할 때 인쇄가 발생하는 시기를 viztracer가 알려준다는 점을 제외하고는 인쇄 디버그처럼 작동합니다.
  uTorrent는 안전한가요?

결론

소프트웨어 프로파일링과 마찬가지로 Python 프로파일링 및 디버깅은 주의가 필요한 개발의 핵심 단계입니다. 이 단계는 코드의 전체 성능이 최적화되도록 버그가 있는 코드 섹션을 배제하는 데 도움이 됩니다.

위에서 다룬 디버깅 도구는 Python 개발자의 작업을 매우 쉽게 만드는 효율적인 도구입니다.

다른 디버깅 도구가 cProfiler보다 더 효과적으로 작동하는 것을 보면 진정한 영웅처럼 Python 코드를 디버그하고 이러한 디버거를 사용하여 잠재적인 버그를 수정하여 코드가 충돌 없이 실행되지 않도록 할 수 있습니다.

즐거운 디버깅!