जवाबों:
हाँ! वहाँ एक पायथन डिबगर कहा जाता है pdb
कि बस करने के लिए!
आप pdb
का उपयोग करके pdb myscript.py
या के माध्यम से एक पायथन कार्यक्रम लॉन्च कर सकते हैं python -m pdb myscript.py
।
कुछ आदेश हैं जिन्हें आप तब जारी कर सकते हैं, जो pdb
पृष्ठ पर प्रलेखित हैं ।
याद रखने के लिए कुछ उपयोगी हैं:
b
: एक ब्रेकपॉइंट सेट करेंc
: तब तक डिबगिंग जारी रखें जब तक कि आप एक ब्रेकपॉइंट नहीं मारतेs
: कोड के माध्यम से कदमn
: कोड की अगली पंक्ति में जाने के लिएl
: वर्तमान फ़ाइल के लिए सूची स्रोत कोड (डिफ़ॉल्ट: 11 लाइनों को निष्पादित किया जा रहा है सहित)u
: स्टैक फ्रेम को नेविगेट करेंd
: एक स्टैक फ्रेम नीचे नेविगेट करेंp
: वर्तमान संदर्भ में एक अभिव्यक्ति के मूल्य को मुद्रित करने के लिएयदि आप कमांड लाइन डिबगर का उपयोग नहीं करना चाहते हैं, तो कुछ IDEs जैसे Pydev , Wing IDE या PyCharm में GUI डीबगर है। विंग और PyCharm वाणिज्यिक उत्पाद हैं, लेकिन विंग का एक "व्यक्तिगत" संस्करण है, और PyCharm का एक निःशुल्क सामुदायिक संस्करण है।
pudb
लिए बहुत अच्छा है। इसके अलावाpydev
pdb
कमांड लाइन टूल नहीं है। इसका उपयोग करने के लिए, का उपयोग करें python -m pdb your_script.py
।
pdb
कमांड python
पैकेज का हिस्सा है । किसी भी मामले में, python -m <module>
अन्य चीजों के लिए भी मानक बन रहा है pip
, इसलिए संभवत: डिफ़ॉल्ट रूप से इसका उपयोग करना सबसे अच्छा है।
पहला कदम पायथन इंटरप्रेटर को डिबगिंग मोड में प्रवेश करने के लिए बनाना है।
A. कमांड लाइन से
सबसे सीधा आगे रास्ता, कमांड लाइन से चल रहा है, अजगर दुभाषिया का
$ python -m pdb scriptName.py
> .../pdb_script.py(7)<module>()
-> """
(Pdb)
इंटरप्रेटर के भीतर बी
मॉड्यूल के शुरुआती संस्करणों को विकसित करते हुए और इसे और अधिक प्रयोग करने के लिए।
$ python
Python 2.7 (r27:82508, Jul 3 2010, 21:12:11)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb_script
>>> import pdb
>>> pdb.run('pdb_script.MyObj(5).go()')
> <string>(1)<module>()
(Pdb)
अपने कार्यक्रम के भीतर से सी
एक बड़े प्रोजेक्ट और लंबे समय तक चलने वाले मॉड्यूल के लिए, आयात pdb और set_trace () का उपयोग करके प्रोग्राम के अंदर से डिबगिंग शुरू कर सकते हैं :
#!/usr/bin/env python
# encoding: utf-8
#
import pdb
class MyObj(object):
count = 5
def __init__(self):
self.count= 9
def go(self):
for i in range(self.count):
pdb.set_trace()
print i
return
if __name__ == '__main__':
MyObj(5).go()
अधिक आंतरिक में जाने के लिए चरण-दर-चरण डिबगिंग
"N" (अगला) के साथ अगला कथन निष्पादित करें ...
अंतिम डिबगिंग कमांड को दोहराया जा रहा है ... ENTER के साथ
यह सब छोड़ ... "क्ष" (छोड़ें) के साथ
"पी" (प्रिंट) के साथ चर के मूल्य को प्रिंट करना ...
a) पा
(Cdb) प्रॉम्प्ट को "c" (जारी) के साथ बंद करना
"L" (सूची) के साथ आप कहां हैं ...
"एस" (चरण में) के साथ सबरूटीन्स में कदम रखना ...
जारी है ... लेकिन बस वर्तमान सबरूटीन के अंत तक ... "आर" (वापसी) के साथ
एक नया मान निर्दिष्ट करें
a) ! b = "B"
एक ब्रेकपॉइंट सेट करें
a) लिननम्बर को तोड़ें
ख) फंक्शननामे तोड़ें
सी) फ़ाइल नाम: लिननम्बर
अस्थायी ब्रेकपॉइंट
ए) ट्रेंक लिननम्बर
सशर्त विराम
क) लिननम्बर, स्थिति को तोड़ दें
नोट: ** इन सभी कमांड को ** pdb से निष्पादित किया जाना चाहिए
गहन ज्ञान के लिए, देखें: -
https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
अजगर में 'pdb' नामक एक मॉड्यूल होता है। अपने अजगर स्क्रिप्ट के शीर्ष पर आप करते हैं
import pdb
pdb.set_trace()
और आप डिबगिंग मोड में प्रवेश करेंगे। आप 's' को स्टेप, 'n' के साथ अगली पंक्ति का अनुसरण करने के लिए उपयोग कर सकते हैं, जो आप 'gdb' डिबगर के साथ करेंगे।
पायथन 3.7 में शुरू, आप breakpoint()
डिबगर में प्रवेश करने के लिए अंतर्निहित फ़ंक्शन का उपयोग कर सकते हैं :
foo()
breakpoint() # drop into the debugger at this point
bar()
डिफ़ॉल्ट रूप से, breakpoint()
आयात pdb
और कॉल करेगा pdb.set_trace()
। हालाँकि, आप sys.breakpointhook()
पर्यावरण चर के माध्यम से डिबगिंग व्यवहार को नियंत्रित कर सकते हैं PYTHONBREAKPOINT
।
अधिक जानकारी के लिए पीईपी 553 देखें ।
breakpoint
मैं उत्साहित था। लेकिन तब मुझे पता चला कि यह अनिवार्य रूप से सिर्फ एक शॉर्टकट है import pdb; pdb.set_trace()
और इसने मुझे दुखी किया है। पायथन देव: कृपया संदर्भ लाइनों, लगातार कमांड इतिहास और टैब ऑटो पूरा करने जैसी बुनियादी GDB सुविधाओं के साथ PDB को बेहतर बनाने पर ध्यान केंद्रित करें :-)
ipdb निम्नलिखित बड़ी सुधार की पेशकश करते हुए pdb में IPython कार्यक्षमता जोड़ता है:
Pdg की तरह, ipdb अभी भी GDB की तुलना में एकदम सही और पूरी तरह से अल्पविकसित है, लेकिन यह पहले से ही pdb पर बहुत बड़ा सुधार है।
उपयोग के अनुरूप है pdb
, बस इसे स्थापित करें:
python3 -m pip install --user ipdb
और फिर उस पंक्ति में जोड़ें जिससे आप डीबग करना चाहते हैं:
__import__('ipdb').set_trace(context=21)
आप अपने संपादक से इसके लिए एक शॉर्टकट जोड़ना चाहते हैं, उदाहरण के लिए विम स्निपमेट मेरे पास:
snippet ipd
__import__('ipdb').set_trace(context=21)
इसलिए मैं सिर्फ टाइप कर सकता हूं ipd<tab>
और यह ब्रेकपॉइंट तक फैलता है। फिर इसे हटाना आसान है dd
क्योंकि सब कुछ एक ही पंक्ति में समाहित है।
context=21
संदर्भ लाइनों की संख्या में वृद्धि के रूप में समझाया गया है: मैं डीबग करते समय संदर्भ की अधिक पंक्तियां कैसे दिखा सकता हूं?
वैकल्पिक रूप से, आप शुरू से ही प्रोग्राम डिबग भी कर सकते हैं:
ipdb3 main.py
लेकिन आप आम तौर पर ऐसा नहीं करना चाहते क्योंकि:
या वैकल्पिक रूप से, कच्चे pdb 3.2+ की तरह आप कमांड लाइन से कुछ ब्रेकप्वाइंट सेट कर सकते हैं:
ipdb3 -c 'b 12' -c 'b myfunc' ~/test/a.py
हालांकि -c c
किसी कारण से टूट गया है: https://github.com/gotcha/ipdb/issues/156
python -m module
डिबगिंग में पूछा गया है: कमांड लाइन से अजगर -m के साथ चलने वाले पायथन मॉड्यूल को कैसे डिबग करें? और जब से Python 3.7 के साथ किया जा सकता है:
python -m pdb -m my_module
GDB की तुलना में pdb और ipdb दोनों की गंभीर गायब विशेषताएँ:
ipdb विशिष्ट झुंझलाहट:
उबंटू 16.04, ipdb == 0.11, पायथन 3.5.2 में परीक्षण किया गया।
breakpoint()
आजकल विधि मौजूद है, जो बदल देती है import pdb; pdb.set_trace()
।
इसमें कई नई विशेषताएं भी हैं , जैसे कि संभव पर्यावरण चर।
यदि आप एकीकृत डीबगर के साथ एक आईडीई चाहते हैं, तो PyScripter की कोशिश करें ।
https://wiki.python.org/moin/PythonDebuggingTools
pdb pdb के लिए एक अच्छा ड्रॉप-इन रिप्लेसमेंट है
पायथन ट्यूटर नौसिखियों के लिए एक ऑनलाइन एकल-कदम डिबगर है। आप एडिट पेज पर कोड डाल सकते हैं और फिर इसे चालू करने के लिए "विज़ुअलाइज़ एक्सक्यूशन" पर क्लिक करें।
अन्य बातों के अलावा, यह समर्थन करता है:
हालाँकि, यह बहुत सी चीज़ों का समर्थन नहीं करता है , उदाहरण के लिए:
io.StringIO
और io.BytesIO
इसके बजाय: डेमोपायथन कोड के माध्यम से प्रोग्रामिंग स्टेपिंग और ट्रेसिंग भी संभव है (और इसके आसान!)। को देखो sys.settrace () अधिक जानकारी के लिए प्रलेखन। यहां भी आपको शुरू करने के लिए एक ट्यूटोरियल है।
PTVS के साथ विजुअल स्टूडियो आपके लिए एक विकल्प हो सकता है: http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx
PyCharm पायथन के लिए एक IDE है जिसमें एक डीबगर शामिल है। कोड के माध्यम से कदम रखने के लिए PyCharm के डिबगर का उपयोग करने पर एक परिचय के लिए यह YouTube वीडियो देखें।
PyCharm ट्यूटोरियल - PyCharm का उपयोग करके अजगर कोड को डीबग करें
नोट: यह एक समर्थन या समीक्षा करने का इरादा नहीं है। PyCharm एक व्यावसायिक उत्पाद है जिसे किसी को भुगतान करने की आवश्यकता होती है, लेकिन कंपनी छात्रों और शिक्षकों को एक मुफ्त लाइसेंस प्रदान करती है, साथ ही एक "हल्का" सामुदायिक संस्करण भी है जो स्वतंत्र और खुला-स्रोत है।