सॉफ्टवेयर डेवलपमेंट शब्दजाल में, 'डिबगिंग' शब्द का इस्तेमाल प्रोग्राम में त्रुटियों का पता लगाने और उन्हें सुधारने की प्रक्रिया के लिए किया जाता है। पायथन के मानक पुस्तकालय में पीडीबी मॉड्यूल शामिल है जो पायथन कार्यक्रमों के डिबगिंग के लिए उपयोगिताओं का एक सेट है।
डिबगिंग कार्यक्षमता को Pdb वर्ग में परिभाषित किया गया है। मॉड्यूल आंतरिक रूप से bdb और cmd मॉड्यूल का उपयोग करता है।
पीडीबी मॉड्यूल में एक बहुत ही सुविधाजनक कमांड लाइन इंटरफ़ेस है। इसे -एम स्विच का उपयोग करके पायथन लिपि के निष्पादन के समय आयात किया जाता है
पायथन-एम pdb script.py
डिबगर कैसे काम करता है, इसके बारे में अधिक जानने के लिए, आइए पहले एक पायथन मॉड्यूल (fact.py) को इस प्रकार लिखें -
def fact(x):f =1 के लिए i रेंज में(1,x+1):प्रिंट (i) f =f * i रिटर्न fif __name__=="__main__":प्रिंट ("3 का फैक्टोरियल =" ,तथ्य(3))
इस मॉड्यूल को कमांड लाइन से डीबग करना प्रारंभ करें। इस मामले में निष्पादन कोड में पहली पंक्ति में बाईं ओर तीर (->) दिखा कर रुक जाता है, और डीबगर प्रॉम्प्ट (पीडीबी) उत्पन्न करता है
C:\python36>python -m pdb fact.py> c:\python36\fact.py(1)()-> def fact(x):(Pdb)
सभी डिबगर कमांड की सूची देखने के लिए डिबगर प्रॉम्प्ट के सामने 'help' टाइप करें। किसी भी कमांड के बारे में अधिक जानने के लिए 'help
सूची कमांड पूरे कोड को -> प्रतीक के साथ एक पंक्ति के बाईं ओर सूचीबद्ध करता है जिस पर प्रोग्राम रुका हुआ है।
(Pdb) list1 -> def fact(x):2 f =13 for i in range(1,x+1):4 print (i)5 f =f * i6 रिटर्न f7 अगर __name__=="__main__ ":8 प्रिंट ("3 का फैक्टोरियल =", फैक्ट(3))
प्रोग्राम लाइन से लाइन में जाने के लिए स्टेप या नेक्स्ट कमांड का उपयोग करें।
(Pdb) step> c:\python36\fact.py(7)()-> if __name__=="__main__":(Pdb) next> c:\python36\fact.py(8) <मॉड्यूल>()-> प्रिंट ("3 =" का फैक्टोरियल, फैक्ट (3)) (पीडीबी) नेक्स्ट123फैक्टोरियल ऑफ 3=6--रिटर्न--> c:\python36\fact.py(8)<मॉड्यूल>( )->कोई नहीं-> प्रिंट ("3 का फैक्टोरियल =", फैक्ट(3))
स्टेप और नेक्स्ट कमांड के बीच प्रमुख अंतर यह है कि स्टेप कमांड किसी प्रोग्राम को एक फंक्शन के भीतर बंद कर देगा जबकि अगला कमांड एक कॉल किए गए फंक्शन को निष्पादित करता है और उसके बाद रुक जाता है।
C:\python36>python -m pdb fact.py> c:\python36\fact.py(1)()-> def fact(x):(Pdb) s> c:\python36\ fact.py(7) ()-> if __name__=="__main__":(Pdb) n> c:\python36\fact.py(8) ()-> Print ("3 का फैक्टोरियल" =", fact(3))(Pdb) s--Call--> c:\python36\fact.py(1)fact()-> def fact(x):(Pdb) n> c:\python36\ fact.py(2)fact()->f =1(Pdb) n> c:\python36\fact.py(3)fact()-> for i इन रेंज(1,x+1):(Pdb) n> c:\python36\fact.py(4)fact()-> प्रिंट (i)(Pdb) n1> c:\python36\fact.py(5)fact()->f =f * i(Pdb ) n> c:\python36\fact.py(3)fact()-> for i इन रेंज(1, x + 1):(Pdb) n> c:\python36\fact.py(4)fact() -> प्रिंट (i)(Pdb) f,i(1, 2)(Pdb)
जब कोई प्रोग्राम कार्य करने के लिए कॉल का सामना करता है और फ़ंक्शन समाप्त होने पर --return--- तब स्टेप कमांड --कॉल—संकेत भी दिखाता है। किसी भी समय, हम एक निश्चित चर के मान को केवल उसका नाम दर्ज करके जांच सकते हैं।
आप ब्रेक कमांड द्वारा प्रोग्राम के भीतर ब्रेकप्वाइंट सेट कर सकते हैं। लाइन नंबर (जिस पर ब्रेकपॉइंट सेट किया जाना चाहिए) दिया जाना चाहिए। उदाहरण के लिए 'ब्रेक 5' मौजूदा प्रोग्राम की लाइन 5 पर एक ब्रेकपॉइंट सेट करेगा।
(Pdb) list2 f =13 के लिए i रेंज में(1, x + 1):4 प्रिंट (i)5 f =f * i6 रिटर्न f7 -> अगर __name__=="__main__":8 प्रिंट ("फैक्टोरियल" of 3=",fact(3))[EOF](Pdb) 5Breakpoint 1 को c:\python36\fact.py:5(Pdb) Continue1> c:\python36\fact.py(5)fact() पर तोड़ें () -> f =f * i(Pdb) breakNum Type Disp Enb जहां1 ब्रेकप्वाइंट c:\python36\fact.py:5breakpoint पहले से ही 1 बार हिट (Pdb) Continue2> c:\python36\fact.py(5)fact( )-> f =f * i(Pdb) bNum Type Disp Enb जहां1 ब्रेकप्वाइंट c:\python36\fact.py:5ब्रेकप्वाइंट पहले से ही 2 बार हिट हो चुका है पर हां रखें।जब 'जारी रखें' आदेश जारी किया जाता है, तो प्रोग्राम निष्पादन तब तक जारी रहेगा जब तक कि यह एक ब्रेकपॉइंट का सामना न करे। सभी ब्रेकप्वाइंट प्रदर्शित करने के लिए, बिना लाइन नंबर के साधारण इश्यू ब्रेक कमांड।
किसी भी ब्रेकपॉइंट को अक्षम/सक्षम कमांड द्वारा अक्षम/सक्षम किया जा सकता है या स्पष्ट आदेश द्वारा पूरी तरह से साफ़ किया जा सकता है।
(Pdb) c:\python36\fact.py:5(Pdb) bNum Type Disp Enb पर 1 डिसेबल ब्रेकप्वाइंट 1 को डिसेबल करें जहां 1 ब्रेकप्वाइंट c:\python36\fact.py:5ब्रेकप्वाइंट पहले से ही 2 बार हिट हो चुका हैपीडीबी डीबगर का उपयोग पायथन लिपि के भीतर से भी किया जा सकता है। ऐसा करने के लिए, स्क्रिप्ट के शीर्ष पर pdb आयात करें और प्रोग्राम के अंदर set_trace() विधि का उपयोग करें।
आयात pdbdef fact(x):f =1for i इन रेंज(1,x+1):pdb.set_trace()print (i)f =f * ireturn fif __name__=="__main__":print ("फैक्टोरियल of 3=",तथ्य(3))डिबगर का व्यवहार ठीक वैसा ही होगा जैसा हम इसे कमांड लाइन वातावरण में पाते हैं।