खोज…


टिप्पणियों

pdb

Pdb क्रमशः ग्लोबल्स globals() या locals() (Pdb) प्रॉम्प्ट में टाइप करके सभी मौजूदा वैरिएबल्स को ग्लोबल या लोकल स्कोप में प्रिंट कर सकता है।

पायथन डीबगर (पीडीबी) का उपयोग करना

अधिकांश बुनियादी Django डिबगिंग उपकरण pdb है , पायथन मानक पुस्तकालय का एक हिस्सा है।

Init view script

आइए एक साधारण 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

यह स्पष्ट है कि जब आप इंडेक्स पेज को लोड करने का प्रयास करते हैं, तो Django एक 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) प्रॉम्प्ट को ट्रिगर करेगा, जो आपके ब्राउज़र को लंबित स्थिति में भी लटकाएगा।

पीडीबी शेल के साथ डिबगिंग

यह शेल के माध्यम से स्क्रिप्ट के साथ बातचीत करके उस दृश्य को डीबग करने का समय है:

> ../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 प्रतिक्रिया दी और इसे निष्पादित करना चाहिए।

पीडीबी लूप को रोकने के लिए, केवल शेल में इनपुट q

Django डीबग टूलबार का उपयोग करना

सबसे पहले, आपको 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_IPS सेट करने के लिए भी आवश्यक है:

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

यही है, डिबग टूलबार आपको प्रोजेक्ट के पृष्ठों पर दिखाई देगा, निष्पादन समय, एसक्यूएल, स्टैटिक फाइलें, सिग्नल आदि के बारे में विभिन्न उपयोगी जानकारी प्रदान करता है।

HTML:

इसके अलावा, django-debug-toolbar को ठीक से रेंडर करने के लिए सामग्री-प्रकार के text/html , <html> और <body> टैग की आवश्यकता होती है।


यदि आप सुनिश्चित करते हैं कि आपने सब कुछ ठीक से कॉन्फ़िगर किया है, लेकिन डिबग टूलबार अभी भी प्रदान नहीं किया गया है: इसका पता लगाने के लिए इस "परमाणु" समाधान का उपयोग करें

"मुखर झूठ" का उपयोग करना

विकास करते समय, निम्नलिखित कोड को अपने कोड में सम्मिलित करें:

assert False, value

जब इस लाइन को निष्पादित किया जाता है, तो एक त्रुटि संदेश के रूप में दिए गए मूल्य के साथ एक AssertionError को बढ़ाने के लिए django का कारण होगा।

यदि यह किसी दृश्य में, या किसी दृश्य से बुलाए गए कोड में होता है, और DEBUG=True सेट हो जाता है, तो ब्राउज़र में बहुत सी डिबगिंग जानकारी के साथ एक पूर्ण और विस्तृत स्टैकट्रेस प्रदर्शित किया जाएगा।

जब आप कर रहे हैं लाइन को दूर करने के लिए मत भूलना!

डिबगर का उपयोग करने के बजाय लेखन, अधिक प्रलेखन, टेस्ट, लॉगिंग और जोर पर विचार करें

डिबगिंग में समय और मेहनत लगती है।

डिबगर के साथ बग का पीछा करने के बजाय, अपने कोड को बेहतर बनाने पर अधिक समय बिताने पर विचार करें:

  • टेस्ट लिखें और चलाएं। पायथन और Django में महान बिलिन टेस्टिंग फ्रेमवर्क हैं - जिनका उपयोग डिबगर के साथ मैन्युअल रूप से आपके कोड को बहुत तेजी से परीक्षण करने के लिए किया जा सकता है।
  • अपने कार्यों, कक्षाओं और मॉड्यूल के लिए उचित दस्तावेज लिखनाPEP 257 और Google का पायथन स्टाइल गाइड अच्छी डॉकस्ट्रिंग लिखने के लिए अच्छी प्रथाओं की आपूर्ति करता है।
  • अपने प्रोग्राम से आउटपुट तैयार करने के लिए लॉगिंग का उपयोग करें - विकास के दौरान और तैनाती के बाद।
  • महत्वपूर्ण स्थानों में अपने कोड में assert आयन जोड़ें : अस्पष्टता को कम करें, समस्याएं पैदा करें क्योंकि वे बनाई गई हैं।

बोनस: प्रलेखन और परीक्षण के संयोजन के लिए सिद्धांत लिखें!



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow