수색…


비고

Pdb

Pdb는 (Pdb) 프롬프트에서 globals() 또는 locals() 를 입력하여 globals() 또는 로컬 범위의 기존 변수를 모두 인쇄 할 수도 있습니다.

파이썬 디버거 (Pdb) 사용하기

가장 기본적인 Django 디버깅 도구는 Python 표준 라이브러리의 일부인 pdb 입니다.

초기화보기 스크립트

간단한 views.py 스크립트를 살펴 보자.

from django.http import HttpResponse


def index(request):
    foo = 1
    bar = 0

    bug = foo/bar

    return HttpResponse("%d goes here." % bug)

서버를 실행하는 콘솔 명령 :

python manage.py runserver

인덱스 페이지를로드하려고 시도 할 때 장고가 ZeroDivisionError 던지는 것은 명백합니다.하지만 코드에서 버그가 매우 심한 것처럼 보이면 정말 불쾌해질 수 있습니다.

중단 점 설정

다행히도, 우리는 버그를 추적하도록 중단 점 을 설정할 수 있습니다 :

from django.http import HttpResponse

# Pdb import
import pdb


def index(request):
    foo = 1
    bar = 0
    
    # This is our new breakpoint
    pdb.set_trace()
    
    bug = foo/bar
    
    return HttpResponse("%d goes here." % bug)

pdb를 사용하여 서버를 실행하는 콘솔 명령 :

python -m pdb manage.py runserver

이제 페이지로드 브레이크 포인트가 셸에서 (Pdb) 프롬프트를 트리거하고, 브라우저가 대기 상태가됩니다.

pdb 쉘로 디버깅하기

쉘을 통해 스크립트와 상호 작용하여 해당 뷰를 디버그 할 차례입니다.

> ../views.py(12)index()
-> bug = foo/bar
# input 'foo/bar' expression to see division results:
(Pdb) foo/bar
*** ZeroDivisionError: division by zero
# input variables names to check their values:
(Pdb) foo
1
(Pdb) bar
0
# 'bar' is a source of the problem, so if we set it's value > 0...
(Pdb) bar = 1
(Pdb) foo/bar
1.0
# exception gone, ask pdb to continue execution by typing 'c':
(Pdb) c
[03/Aug/2016 10:50:45] "GET / HTTP/1.1" 200 111

마지막 줄에서 우리는 우리의 견해가 OK 응답을 반환하고 꼭 실행해야한다는 것을 알 수 있습니다.

pdb 루프를 멈추려면 q 를 쉘에 입력하십시오.

장고 디버그 툴바 사용하기

먼저 django-debug-toolbar 를 설치해야합니다.

pip install django-debug-toolbar

settings.py :

그런 다음 프로젝트의 설치된 응용 프로그램에 포함 시키되 조심하십시오. 디버그 도구 모음과 같은 개발 전용 응용 프로그램 및 미들웨어에 다른 settings.py 파일을 사용하는 것이 좋습니다.

# If environment is dev...
DEBUG = True

INSTALLED_APPS += [
    'debug_toolbar',
]

MIDDLEWARE += ['debug_toolbar.middleware.DebugToolbarMiddleware']

디버그 도구 모음도 정적 파일을 사용하므로 적절한 앱도 포함해야합니다.

INSTALLED_APPS = [
    # ...
    'django.contrib.staticfiles',
    # ...
]

STATIC_URL = '/static/'

# If environment is dev...
DEBUG = True

INSTALLED_APPS += [
    'debug_toolbar',
]

어떤 경우에는 settings.py 에서 INTERNAL_IPSsettings.py .

INTERNAL_IPS = ('127.0.0.1', )

urls.py :

urls.py 에서는 공식 문서에서 알 수 있듯이 다음 스 니펫이 디버그 툴바 라우팅을 활성화해야합니다.

if settings.DEBUG and 'debug_toolbar' in settings.INSTALLED_APPS:
    import debug_toolbar
    urlpatterns += [
        url(r'^__debug__/', include(debug_toolbar.urls)),
    ]

설치 후 도구 모음의 정적 수집 :

python manage.py collectstatic

그게 바로 디버그 툴바가 프로젝트 페이지에 표시되어 실행 시간, SQL, 정적 파일, 신호 등에 대한 다양한 유용한 정보를 제공합니다.

HTML :

또한, django-debug-toolbar 는 적절히 렌더링하기 위해 text/html , <html><body> 태그의 Content-type 을 필요로합니다.


모든 것을 올바르게 구성했지만 디버그 도구 모음이 여전히 렌더링되지 않은 경우이 "핵"솔루션 을 사용하여 파악하십시오.

"어설 션 거짓"사용

개발 중에 코드에 다음 행을 삽입하십시오.

assert False, value

django는이 라인이 실행될 때 오류 메시지로 제공된 값으로 AssertionError 를 발생시킵니다.

뷰 또는 뷰에서 호출 된 코드에서 DEBUG=True 로 설정하면 많은 디버깅 정보가 포함 된 전체 및 상세 스택 추적이 브라우저에 표시됩니다.

완료되면 라인을 삭제하는 것을 잊지 마십시오!

디버거를 사용하는 대신 문서, 테스트, 로깅 및 어설 션을 많이 작성하는 것을 고려하십시오.

디버깅에는 시간과 노력이 필요합니다.

디버거로 버그를 추적하는 대신 코드를 작성하는 데 더 많은 시간을 할애 해보십시오.

  • 테스트를 작성하고 실행하십시오. Python과 Django는 디버거를 사용하여 직접 작성하는 것보다 훨씬 빠르게 코드를 테스트하는 데 사용할 수있는 훌륭한 기본 프레임 워크를 내장하고 있습니다.
  • 함수, 클래스 및 모듈에 대한 적절한 문서 작성 PEP 257Google의 Python Style Guide 는 훌륭한 문서 문자열 작성을위한 우수 사례를 제공합니다.
  • 개발 중 및 배포 후 프로그램에서 출력을 생성 하려면 로깅사용하십시오 .
  • 중요한 장소에 코드에 assert 이온추가 합니다. 모호성을 줄이고 문제가 발생하면이를 잡습니다.

보너스 : 문서와 테스트를 결합하기위한 doctest 를 작성하십시오!



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow