python Django में अच्छा तरीके से कैसे डिबग करें?




debugging (22)

मैं अत्यधिक पीडीबी का उपयोग करने का सुझाव देता हूं।

import pdb
pdb.set_trace()

आप सभी चर मूल्यों का निरीक्षण कर सकते हैं, फ़ंक्शन में कदम उठा सकते हैं और बहुत कुछ कर सकते हैं। https://docs.python.org/2/library/pdb.html

डेटाबेस के सभी प्रकार के अनुरोध, प्रतिक्रिया और हिट की जांच के लिए। मैं django-debug-toolbar का उपयोग कर रहा हूं https://github.com/django-debug-toolbar/django-debug-toolbar

तो, मैंने Python और बाद में Django में कोड सीखना शुरू कर दिया। पहली बार यह ट्रेसबैक पर मुश्किल लग रहा था और वास्तव में यह पता लगाया कि मैंने क्या गलत किया और जहां वाक्यविन्यास त्रुटि थी। कुछ समय बीत चुका है और रास्ते में कुछ रास्ता, मुझे लगता है कि मुझे अपने डीजेगो कोड को डीबग करने में नियमितता मिली है। चूंकि यह मेरे कोडिंग अनुभव में जल्दी ही किया गया था, मैं बैठ गया और सोच रहा था कि मैं यह कैसे कर रहा था यह अप्रभावी था और तेजी से किया जा सकता था। मैं आमतौर पर अपने कोड में कीड़े को खोजने और सही करने का प्रबंधन करता हूं, लेकिन मुझे आश्चर्य है कि मुझे इसे तेजी से करना चाहिए?

मैं आम तौर पर डीबग जानकारी का उपयोग करता हूं जब सक्षम होने पर Django देता है। जब चीजें खत्म होती हैं, जैसा कि मैंने सोचा था, तो मैं एक वाक्यविन्यास त्रुटि के साथ कोड प्रवाह को तोड़ देता हूं, और प्रवाह के उस बिंदु पर चर को देखने के लिए, जहां कोड चाहता था उससे कुछ और करता है।

लेकिन क्या यह सुधार किया जा सकता है? क्या आपके डीजेगो कोड को डीबग करने के कुछ अच्छे उपकरण या बेहतर तरीके हैं?


पाइथन डीबग करने का सबसे आसान तरीका - खासकर प्रोग्रामर के लिए जो विजुअल स्टूडियो में उपयोग किया जाता है - पीटीवीएस (विजुअल स्टूडियो के लिए पायथन टूल्स) का उपयोग कर रहा है। कदम सरल हैं:

  1. http://pytools.codeplex.com/ से इसे डाउनलोड और इंस्टॉल http://pytools.codeplex.com/
  2. ब्रेकपॉइंट्स सेट करें और F5 दबाएं।
  3. आपका ब्रेकपॉइंट हिट हो गया है, आप वैरिएबल को सी # / सी ++ प्रोग्राम डीबगिंग के रूप में आसान / बदल सकते हैं।
  4. बस इतना ही :)

यदि आप पीटीवीएस का उपयोग कर डीजेगो को डीबग करना चाहते हैं, तो आपको निम्न कार्य करने की आवश्यकता है:

  1. प्रोजेक्ट सेटिंग्स में - सामान्य टैब, "स्टार्टअप फ़ाइल" को "manage.py" पर सेट करें, जो Django प्रोग्राम का प्रवेश बिंदु है।
  2. प्रोजेक्ट सेटिंग्स में - डीबग टैब, "स्क्रिप्ट Arguments" को "runerver --noreload" पर सेट करें। मुख्य बिंदु यहां "--noreload" है। यदि आप इसे सेट नहीं करते हैं, तो आपके ब्रेकपॉइंट्स हिट नहीं होंगे।
  3. का आनंद लें।

मैं PyCharm उपयोग करता PyCharm और इसे सभी तरह से खड़ा करता हूं। यह मुझे थोड़ा सा खर्च करता है लेकिन मुझे यह कहना है कि मैं इससे फायदा उठाता हूं कि यह अनमोल है। मैंने कंसोल से डिबगिंग करने की कोशिश की और मैं लोगों को बहुत सारे क्रेडिट देता हूं जो ऐसा कर सकते हैं, लेकिन मेरे लिए मेरे आवेदन को दृष्टि से डीबग करने में सक्षम होना बहुत अच्छा है।

मुझे हालांकि कहना है, PyCharm बहुत मेमोरी लेता है। लेकिन फिर, जीवन में कुछ भी अच्छा नहीं है। वे अभी अपने नवीनतम संस्करण 3 के साथ आए थे। यह Django, फ्लास्क और Google AppEngine के साथ भी बहुत अच्छा खेलता है। तो, सब कुछ, मैं कहूंगा कि यह किसी भी डेवलपर के लिए एक बहुत ही आसान टूल है।

यदि आप अभी तक इसका उपयोग नहीं कर रहे हैं, तो मैं PyCharm की शक्ति को देखने के लिए 30 दिनों के लिए परीक्षण संस्करण प्राप्त करने की अनुशंसा करता हूं। मुझे यकीन है कि अन्य उपकरण भी उपलब्ध हैं, जैसे कि Aptana। लेकिन मुझे लगता है कि मैं बस चाइचर्म के तरीके की तरह भी पसंद करता हूं। मैं वहां अपने ऐप्स को डिबग करने में बहुत सहज महसूस करता हूं।


मुझे बस wdb मिला ( http://www.rkblog.rk.edu.pl/w/p/debugging-python-code-browser-wdb-debugger/?goback=%2Egde_25827_member_255996401 )। यह सभी घंटियाँ और सीटी के साथ एक बहुत अच्छा यूजर इंटरफेस / जीयूआई है। लेखक डब्ल्यूडीबी के बारे में यह कहते हैं -

"ऐसे PyEarm जैसे आईडीई हैं जिनके पास अपने स्वयं के डिबगर्स हैं। वे सुविधाओं के समान या समान सेट की पेशकश करते हैं ... हालांकि इनका उपयोग करने के लिए आपको उन विशिष्ट आईडीई का उपयोग करना होगा (और उनमें से कुछ गैर-मुक्त हैं या सभी के लिए उपलब्ध नहीं हो सकते हैं प्लेटफार्म)। अपनी जरूरतों के लिए सही उपकरण चुनें। "

सोचा था कि मैं इसे अभी पास कर दूंगा।

पायथन डीबगर्स के बारे में भी एक बहुत उपयोगी लेख: https://zapier.com/engineering/debugging-python-boss/

अंत में , यदि आप Django में अपने कॉल स्टैक का एक अच्छा ग्राफिकल प्रिंटआउट देखना चाहते हैं, तो चेकआउट: https://github.com/joerick/pyinstrument । बस pyinstrument.middleware.ProfilerMiddleware को MIDDLEWARE_CLASSES में जोड़ें, फिर प्रोफाइलर को सक्रिय करने के लिए अनुरोध URL के अंत में प्रोफ़ाइल जोड़ें।

कमांड लाइन से या मॉड्यूल के रूप में आयात करके pyinstrument भी चला सकते हैं।


मेरे परिप्रेक्ष्य से, हम सामान्य कोड डीबगिंग कार्यों को तीन अलग-अलग उपयोग पैटर्न में तोड़ सकते हैं:

  1. कुछ ने अपवाद उठाया है : django-extensions 'बचाव के लिए Werkzeug डीबगर। सभी ट्रेस स्तरों पर कस्टम कोड चलाने की क्षमता एक हत्यारा है। और यदि आप पूरी तरह से अटक गए हैं, तो आप केवल एक क्लिक के साथ साझा करने के लिए एक गिस्ट बना सकते हैं।
  2. पेज प्रस्तुत किया जाता है, लेकिन परिणाम गलत है : फिर, Werkzeug चट्टानों। कोड में ब्रेकपॉइंट बनाने के लिए, उस स्थान assert False केवल उस assert False डालें टाइप करें जिसे आप रोकना चाहते हैं।
  3. कोड गलत काम करता है , लेकिन त्वरित देखो मदद नहीं करता है। सबसे अधिक, एक एल्गोरिदमिक समस्या। आह। फिर मैं आमतौर पर एक कंसोल डीबगर pudb आग pudb : import pudb; pudb.set_trace() import pudb; pudb.set_trace() । [I] पीडीबी पर मुख्य लाभ यह है कि पुडबी (जब आप 80 के दशक में दिख रहे हैं) कस्टम घड़ी अभिव्यक्तियों को हवा बनाते हैं। और नेस्टेड लूप का एक समूह डीबग करना एक जीयूआई के साथ बहुत आसान है।

आह, हाँ, टेम्पलेट्स की विपत्तियां। सबसे आम (मेरे और मेरे सहयोगियों के लिए) समस्या एक गलत संदर्भ है: या तो आपके पास कोई चर नहीं है, या आपके चर के पास कुछ विशेषता नहीं है। यदि आप डीबग टूलबार का उपयोग कर रहे हैं, तो बस "टेम्पलेट्स" अनुभाग पर संदर्भ का निरीक्षण करें, या, यदि यह पर्याप्त नहीं है, तो अपने संदर्भ भरने के ठीक बाद अपने विचारों के कोड में ब्रेक सेट करें।

तो यह जाता है।


ऐसा करने के तरीकों का एक गुच्छा है, लेकिन सबसे सरल है कि केवल पाइथन डीबगर का उपयोग करना है । Django व्यू फ़ंक्शन में बस निम्न पंक्ति जोड़ें:

import pdb; pdb.set_trace()

यदि आप अपने ब्राउज़र में उस पृष्ठ को लोड करने का प्रयास करते हैं, तो ब्राउज़र लटकाएगा और आपको वास्तविक निष्पादन कोड पर डिबगिंग करने के लिए एक संकेत मिलेगा।

हालांकि अन्य विकल्प हैं (मैं उन्हें अनुशंसा नहीं कर रहा हूं):

* return HttpResponse({variable to inspect})

* print {variable to inspect}

* raise Exception({variable to inspect})

लेकिन पाइथन डीबगर (पीडीबी) की सभी प्रकार के पायथन कोड के लिए अत्यधिक अनुशंसा की जाती है। यदि आप पहले ही IPDB में हैं, तो आप IPDB पर भी देखना चाहते हैं जो डीबगिंग के लिए IPDB का उपयोग करता है।

पीडीबी के लिए कुछ और उपयोगी विस्तार हैं

Antash pdb++ , Antash द्वारा सुझाया गया।

pudb द्वारा सुझाए गए PatDuJour ।

Seafangs द्वारा सुझाए गए Django में पाइथन डीबगर का उपयोग करना


मुझे वाकई Werkzeug के इंटरैक्टिव डीबगर पसंद है। यह Django के डीबग पेज के समान है, सिवाय इसके कि आपको ट्रेसबैक के प्रत्येक स्तर पर एक इंटरैक्टिव खोल मिलती है। यदि आप django-extensions उपयोग करते हैं, तो आपको एक runserver_plus कमांड मिलता है जो विकास सर्वर शुरू करता है और आपको अपवादों पर वर्कज़ुग का डीबगर देता है।

बेशक, आपको केवल स्थानीय रूप से इसे चलाना चाहिए, क्योंकि यह किसी को ब्राउज़र के साथ सर्वर के संदर्भ में मनमानी पायथन कोड निष्पादित करने का अधिकार देता है।


import pdb; pdb.set_trace() जोड़ें import pdb; pdb.set_trace() import pdb; pdb.set_trace() पायथन कोड में इसी पंक्ति पर और इसे निष्पादित करें। निष्पादन एक इंटरैक्टिव खोल के साथ बंद हो जाएगा। खोल में आप पाइथन कोड (यानी प्रिंट चर) निष्पादित कर सकते हैं या कमांड का उपयोग कर सकते हैं जैसे कि:

  • c निष्पादन जारी रखें
  • एक ही समारोह के भीतर अगली पंक्ति के लिए कदम
  • इस फ़ंक्शन या बुलाए गए फ़ंक्शन में अगली पंक्ति में कदम
  • q डीबगर / निष्पादन से बाहर निकलें

यह भी देखें: https://poweruser.blog/setting-a-breakpoint-in-python-438e23fe6b28


मैं PyCharm (ग्रहण के रूप में एक ही pydev इंजन) का उपयोग करें। वास्तव में मुझे अपने कोड के माध्यम से कदम उठाने में सक्षम होने और क्या हो रहा है यह देखने में मदद करता है।


अधिकांश विकल्प उल्लिखित हैं। टेम्पलेट संदर्भ मुद्रित करने के लिए, मैंने इसके लिए एक सरल पुस्तकालय बनाया है। https://github.com/edoburu/django-debugtools देखें

आप किसी भी {% load %} निर्माण के बिना टेम्पलेट संदर्भ मुद्रित करने के लिए इसका उपयोग कर सकते हैं:

{% print var %}   prints variable
{% print %}       prints all

यह <pre> टैग में चर प्रदर्शित करने के लिए एक अनुकूलित पप्रिंट प्रारूप का उपयोग करता है।


कभी-कभी जब मैं किसी विशेष विधि में चारों ओर अन्वेषण करना चाहता हूं और पीडीबी को बुलावा करना बहुत बोझिल है, तो मैं जोड़ूंगा:

import IPython; IPython.embed()

IPython.embed() एक IPython.embed() खोल शुरू करता है जिसके पास उस बिंदु से स्थानीय चरों तक पहुंच होती है जहां आप इसे कॉल करते हैं।


ऐसे कुछ टूल हैं जो अच्छी तरह से सहयोग करते हैं और आपके डिबगिंग कार्य को आसान बना सकते हैं।

Django डीबग टूलबार सबसे महत्वपूर्ण है।

फिर आपको पाइथन logging सुविधा का उपयोग करके अच्छी लॉगिंग की आवश्यकता है। आप लॉग फ़ाइल में लॉगिंग आउटपुट भेज सकते हैं, लेकिन एक आसान विकल्प firepython लॉग आउटपुट भेज रहा है। इसका उपयोग करने के लिए आपको firebug एक्सटेंशन के साथ फ़ायरफ़ॉक्स ब्राउज़र का उपयोग करने की आवश्यकता है। फ़ायरपीथॉन में एक फ़ायरबग प्लगइन शामिल है जो फ़ायरबग टैब में किसी भी सर्वर-साइड लॉगिंग प्रदर्शित करेगा।

आपके द्वारा विकसित किसी भी ऐप के जावास्क्रिप्ट पक्ष को डीबग करने के लिए फ़ायरबग भी महत्वपूर्ण है। (मान लें कि आपके पास निश्चित रूप से कुछ जेएस कोड है)।

मुझे django-viewtools का उपयोग करके इंटरैक्टिव रूप से डीबगिंग विचारों के लिए django-viewtools भी पसंद आया, लेकिन मैं इसका अधिक उपयोग नहीं करता हूं।

मेमोरी लीक को ट्रैक करने के लिए डोजर जैसे अधिक उपयोगी टूल हैं (स्मृति ट्रैकिंग के लिए SO पर उत्तर में दिए गए अन्य अच्छे सुझाव भी दिए गए हैं)।


ipdb या ipdb प्रयोग करें। इन दोनों के बीच अंतर आईपीडीबी ऑटो पूर्ण का समर्थन करता है।

पीडीबी के लिए

import pdb
pdb.set_trace()

आईपीडीबी के लिए

import ipdb
ipdb.set_trace()

हिट c कुंजी जारी रखने के लिए, नई लाइन हिट n कुंजी निष्पादित करने के लिए। help(pdb) का उपयोग help(pdb) अधिक विकल्प जांचें


मैं अत्यधिक एपीडीबी (विस्तारित पायथन डीबगर) की सलाह देते हैं।

https://bitbucket.org/dugan/epdb

Django या अन्य पायथन वेबसर्वर डीबग करने के लिए मुझे एपीडीबी के बारे में एक बात है epdb.serve () कमांड है। यह एक ट्रेस सेट करता है और इसे स्थानीय पोर्ट पर पेश करता है जिसे आप कनेक्ट कर सकते हैं। विशिष्ट उपयोग केस:

मेरे पास एक विचार है कि मैं चरण-दर-चरण से गुज़रना चाहता हूं। मैं उस बिंदु पर निम्नलिखित डालेंगा जो मैं ट्रेस सेट करना चाहता हूं।

import epdb; epdb.serve()

एक बार यह कोड निष्पादित हो जाने पर, मैं एक पायथन दुभाषिया खोलता हूं और सेवा प्रस्तुति से कनेक्ट होता हूं। मैं सभी मानों का विश्लेषण कर सकता हूं और मानक पीडीबी कमांड जैसे एन, एस इत्यादि का उपयोग करके कोड के माध्यम से कदम उठा सकता हूं।

In [2]: import epdb; epdb.connect()
(Epdb) request
<WSGIRequest
path:/foo,
GET:<QueryDict: {}>, 
POST:<QuestDict: {}>,
...
>
(Epdb) request.session.session_key
'i31kq7lljj3up5v7hbw9cff0rga2vlq5'
(Epdb) list
 85         raise some_error.CustomError()
 86 
 87     # Example login view
 88     def login(request, username, password):
 89         import epdb; epdb.serve()
 90  ->     return my_login_method(username, password)
 91
 92     # Example view to show session key
 93     def get_session_key(request):
 94         return request.session.session_key
 95

और बहुत कुछ है कि आप किसी भी समय epdb मदद टाइप करने के बारे में जान सकते हैं।

यदि आप एक साथ कई एपीडीबी उदाहरणों को सेवा या कनेक्ट करना चाहते हैं, तो आप सुनने के लिए बंदरगाह निर्दिष्ट कर सकते हैं (डिफ़ॉल्ट 8080 है)। अर्थात

import epdb; epdb.serve(4242)

>> import epdb; epdb.connect(host='192.168.3.2', port=4242)

निर्दिष्ट नहीं होने पर होस्ट 'localhost' पर डिफ़ॉल्ट है। मैंने इसे स्थानीय उदाहरण के अलावा किसी अन्य चीज़ को डीबग करने के लिए इसका उपयोग करने के लिए यहां उपयोग किया है, जैसे कि आपके स्थानीय LAN पर विकास सर्वर। जाहिर है, अगर आप ऐसा करते हैं तो सावधान रहें कि सेट ट्रेस इसे आपके उत्पादन सर्वर पर कभी नहीं बनाता है!

एक त्वरित नोट के रूप में, आप अभी भी एपीडीबी ( import epdb; epdb.set_trace() ) के साथ स्वीकृत उत्तर के समान काम कर सकते हैं, लेकिन मैं सेवा कार्यक्षमता को हाइलाइट करना चाहता था क्योंकि मुझे यह बहुत उपयोगी लगता है।


टेम्पलेट टैग के लिए एक छोटी quickie:

@register.filter 
def pdb(element):
    import pdb; pdb.set_trace()
    return element

अब, एक टेम्पलेट के अंदर आप {{ template_var|pdb }} कर सकते हैं और एक पीडीबी सत्र दर्ज कर सकते हैं (दिए गए आप स्थानीय डेवेल सर्वर चला रहे हैं) जहां आप अपने दिल की सामग्री के लिए element का निरीक्षण कर सकते हैं।

यह देखने का एक बहुत अच्छा तरीका है कि जब यह टेम्पलेट पर आता है तो आपके ऑब्जेक्ट के साथ क्या हुआ।


विकास के दौरान, एक त्वरित जोड़ना

assert False, value

डीबगर का उपयोग करने की आवश्यकता के बिना विचारों या कहीं और समस्याओं का निदान करने में मदद कर सकते हैं।


जैसा कि यहां अन्य पदों में उल्लिखित है - कोड के माध्यम से ब्रेकपॉइंट्स सेट करना और कोड के माध्यम से चलना यह देखने के लिए कि क्या यह व्यवहार करता है, जैसा कि आप उम्मीद करते हैं, डीजेगो जैसे कुछ सीखने का एक शानदार तरीका है जब तक कि आपको यह अच्छी समझ न हो कि यह सब कैसे व्यवहार करता है - और आपका कोड क्या है कर रहा है।

ऐसा करने के लिए मैं विंगआईड का उपयोग करने की सिफारिश करता हूं। अन्य उल्लिखित आईडीई की तरह अच्छा और उपयोग करने में आसान, अच्छा लेआउट और ब्रेकपॉइंट्स सेट करना भी आसान है, स्टैक इत्यादि का मूल्यांकन / संशोधित करें। यह देखने के लिए बिल्कुल सही है कि आपका कोड क्या कर रहा है, इसके माध्यम से आप क्या कर रहे हैं। मैं इसका बड़ा प्रशंसक हूं।

इसके अलावा मैं PyCharm का उपयोग करता हूं - इसमें उत्कृष्ट स्थिर कोड विश्लेषण है और इससे पहले कि आप महसूस कर सकें कि वे वहां हैं, समस्याओं को कभी-कभी हल करने में मदद कर सकते हैं।

जैसा कि पहले से ही बताया गया है django-debug-toolbar आवश्यक है - https://github.com/django-debug-toolbar/django-debug-toolbar

और स्पष्ट रूप से एक डीबग या विश्लेषण उपकरण नहीं है - मेरे पसंदीदा में से एक एसक्यूएल प्रिंटिंग मिडलवेयर है जो Django Snippets से https://djangosnippets.org/snippets/290/ पर उपलब्ध है

यह आपके प्रश्नों के उत्पन्न होने वाले SQL क्वेरी प्रदर्शित करेगा। इससे आपको ओआरएम क्या कर रहा है और यदि आपके प्रश्न कुशल हैं या आपको अपने कोड को फिर से काम करने की आवश्यकता है (या कैशिंग जोड़ें) की अच्छी समझ होगी।

मुझे अपने आवेदन को विकसित और डिबग करने के दौरान क्वेरी प्रदर्शन पर नजर रखने के लिए अमूल्य लगता है।

बस एक और टिप - मैंने इसे अपने स्वयं के उपयोग के लिए थोड़ा सा संशोधित किया, केवल सारांश दिखाने के लिए और SQL कथन नहीं .... इसलिए मैं हमेशा विकास और परीक्षण करते समय इसका उपयोग करता हूं। मैंने यह भी कहा कि यदि लेन (कनेक्शन.क्व्यूरीज़) पूर्व परिभाषित थ्रेसहोल्ड से अधिक है तो यह एक अतिरिक्त चेतावनी प्रदर्शित करता है।

फिर यदि मैं कुछ खराब (प्रदर्शन या प्रश्नों की संख्या से परिप्रेक्ष्य से) खोज रहा हूं तो मैं यह देख रहा हूं कि क्या हो रहा है यह देखने के लिए मैं SQL कथन के पूर्ण प्रदर्शन पर वापस आ गया हूं। जब आप कई डेवलपर्स के साथ एक बड़ी Django परियोजना पर काम कर रहे हैं तो बहुत आसान है।


मैं PyCharm और विभिन्न डीबग उपकरण का उपयोग करें। नौसिखियों के लिए उन चीजों को आसान बनाने के बारे में भी एक अच्छा लेख सेट करें। आप यहां से शुरू कर सकते हैं। यह डीजेगो परियोजनाओं के साथ सामान्य रूप से पीडीबी और जीयूआई डीबगिंग के बारे में बताता है। उम्मीद है कि कोई उन्हें फायदा होगा।


Django कोड डीबग करने का आपका सबसे अच्छा विकल्प wdb के माध्यम से है: https://github.com/Kozea/wdb

wdb पायथन 2 (2.6, 2.7), पायथन 3 (3.2, 3.3, 3.4, 3.5) और पिल्ला के साथ काम करता है। इससे भी बेहतर, एक पायथन 2 प्रोग्राम को एक पायदान 3 प्रोग्राम पर डीबग करना संभव है, जिसमें पाइथन 3 पर चल रहे एक डब्ल्यूडीबी सर्वर और कंप्यूटर पर चल रहे प्रोग्राम को डीबग करना एक तीसरे कंप्यूटर पर किसी वेब कंप्यूटर के अंदर किसी अन्य कंप्यूटर पर चल रहे डिबगिंग सर्वर के साथ है! यहां तक ​​कि betterer, अब वेब इंटरफ़ेस से कोड इंजेक्शन का उपयोग कर वर्तमान में चल रहे पायथन प्रक्रिया / थ्रेड को रोकना संभव है। (इसके लिए gdb और ptrace सक्षम होना आवश्यक है) दूसरे शब्दों में यह अच्छी सुविधाओं के साथ सीधे आपके ब्राउज़र में पीडीबी का एक बहुत उन्नत संस्करण है।

सर्वर को स्थापित और चलाएं, और अपने कोड में जोड़ें:

import wdb
wdb.set_trace()

लेखक के अनुसार, pdb संबंध में मुख्य मतभेद हैं:

उन लोगों के लिए जो परियोजना को नहीं जानते हैं, डब्ल्यूडीबी पीडीबी की तरह एक पायथन डीबगर है, लेकिन एक स्लिम वेब फ्रंट एंड और कई अतिरिक्त फीचर्स के साथ, जैसे कि:

  • स्रोत वाक्यविन्यास हाइलाइटिंग
  • दृश्य ब्रेकपॉइंट्स
  • जेडीआई का उपयोग कर इंटरेक्टिव कोड पूरा करना
  • लगातार ब्रेकपॉइंट्स
  • माउस मल्टीथ्रेडिंग / मल्टीप्रोसेसिंग समर्थन का उपयोग कर दीप ऑब्जेक्ट्स निरीक्षण
  • रिमोट डीबगिंग
  • अभिव्यक्ति देखें
  • डीबगर कोड संस्करण में
  • त्रुटि पर तोड़ने के लिए लोकप्रिय वेब सर्वर एकीकरण
  • उदाहरण के लिए werkzeug डीबगर के विपरीत ट्रेस (पोस्ट-मॉर्टम नहीं) के दौरान अपवाद तोड़ने में
  • कोड इंजेक्शन के माध्यम से वर्तमान में चल रहे कार्यक्रमों में ब्रेक लगाना (समर्थित सिस्टम पर)

इसमें एक शानदार ब्राउज़र-आधारित यूजर इंटरफेस है। उपयोग करने के लिए एक खुशी! :)


एक अतिरिक्त सुझाव।

आप मैन्युअल रूप से pdb.set_trace() को अपने विचारों में इंजेक्शन pdb.set_trace() बजाय, pdb.set_trace() और pdb का लाभ उठा सकते हैं। लाभ यह है कि जब आप पहली बार शुरू करते हैं, तो संभावित रूप से तृतीय पक्ष कोड में आप त्रुटि शर्तों का निरीक्षण कर सकते हैं।

आज मेरे लिए एक त्रुटि यहाँ है।

TypeError at /db/hcm91dmo/catalog/records/

render_option() argument after * must be a sequence, not int

....


Error during template rendering

In template /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/crispy_forms/templates/bootstrap3/field.html, error at line 28
render_option() argument after * must be a sequence, not int
18  
19          {% if field|is_checkboxselectmultiple %}
20              {% include 'bootstrap3/layout/checkboxselectmultiple.html' %}
21          {% endif %}
22  
23          {% if field|is_radioselect %}
24              {% include 'bootstrap3/layout/radioselect.html' %}
25          {% endif %}
26  
27          {% if not field|is_checkboxselectmultiple and not field|is_radioselect %}
28  

      {% if field|is_checkbox and form_show_labels %}

अब, मुझे पता है इसका मतलब है कि मैंने फॉर्म के लिए कन्स्ट्रक्टर को गुमराह किया, और मुझे यह भी अच्छा विचार है कि कौन सा क्षेत्र एक समस्या है। लेकिन, क्या मैं यह देखने के लिए पीडीबी का उपयोग कर सकता हूं कि टेम्पलेट के भीतर कौन सी कुरकुरा रूप शिकायत कर रही है?

हाँ मैं कर सकता हूँ। Nosetests पर --pdb विकल्प का उपयोग करना:

tests$ nosetests test_urls_catalog.py --pdb

जैसे ही मैंने कोई अपवाद मारा (जिसमें खूबसूरत तरीके से संभाला गया था), पीडीबी बंद हो जाता है जहां यह होता है और मैं चारों ओर देख सकता हूं।

  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/forms.py", line 537, in __str__
    return self.as_widget()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/forms.py", line 593, in as_widget
    return force_text(widget.render(name, self.value(), attrs=attrs))
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/widgets.py", line 513, in render
    options = self.render_options(choices, [value])
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/widgets.py", line 543, in render_options
    output.append(self.render_option(selected_choices, *option))
TypeError: render_option() argument after * must be a sequence, not int
INFO lib.capture_middleware log write_to_index(http://localhost:8082/db/hcm91dmo/catalog/records.html)
INFO lib.capture_middleware log write_to_index:end
> /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/forms/widgets.py(543)render_options()
-> output.append(self.render_option(selected_choices, *option))
(Pdb) import pprint
(Pdb) pprint.PrettyPrinter(indent=4).pprint(self)
<django.forms.widgets.Select object at 0x115fe7d10>
(Pdb) pprint.PrettyPrinter(indent=4).pprint(vars(self))
{   'attrs': {   'class': 'select form-control'},
    'choices': [[('_', 'any type'), (7, (7, 'type 7', 'RECTYPE_TABLE'))]],
    'is_required': False}
(Pdb)         

अब, यह स्पष्ट है कि मेरी पसंद कुरकुरा क्षेत्र कन्स्ट्रक्टर के लिए तर्क थी क्योंकि यह सूची में एक सूची थी, बजाय टुपल्स की सूची / टुपल।

 'choices': [[('_', 'any type'), (7, (7, 'type 7', 'RECTYPE_TABLE'))]]

साफ बात यह है कि यह पीडीबी क्रिस्पी कोड के भीतर हो रहा है, मेरा नहीं और मुझे इसे मैन्युअल रूप से डालने की आवश्यकता नहीं थी।


मुझे लगता है कि विजुअल स्टूडियो कोड Django ऐप्स डीबग करने के लिए कमाल है। मानक पायथन लॉन्च.जेसन पैरामीटर डीबगर संलग्न के साथ python manage.py चलाते हैं, ताकि आप ब्रेकपॉइंट्स सेट कर सकें और अपनी पसंद के अनुसार अपने कोड के माध्यम से कदम उठा सकें।


मैं pyDev साथ pyDev उपयोग वास्तव में अच्छा है, सेट ब्रेक पॉइंट्स, कोड में कदम, किसी भी ऑब्जेक्ट्स और वैरिएबल पर मानों को देखते हैं, इसे आज़माएं।







debugging