Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन डिबगर (pdb मॉड्यूल)

सॉफ़्टवेयर डेवलपमेंट की शब्दावली में, 'डिबगिंग' शब्द का उपयोग प्रोग्राम में त्रुटियों का पता लगाने और सुधारने की प्रक्रिया के लिए किया जाता है। पायथन की स्टैंडर्ड लाइब्रेरी में pdb मॉड्यूल होता है जो पायथन प्रोग्राम्स की डिबगिंग के लिए यूटिलिटीज़ का एक सेट है।

डिबगिंग कार्यक्षमता Pdb क्लास में परिभाषित है। मॉड्यूल आंतरिक रूप से bdb और cmd मॉड्यूल्स का उपयोग करता है।

pdb मॉड्यूल का एक बहुत सुविधाजनक कमांड लाइन इंटरफ़ेस है। इसे पायथन स्क्रिप्ट के एक्ज़ीक्यूशन के समय -m स्विच का उपयोग करके इम्पोर्ट किया जाता है:

python -m pdb script.py

यह समझने के लिए कि डिबगर कैसे काम करता है, आइए पहले एक पायथन मॉड्यूल (fact.py) लिखें:

def fact(x):
    f = 1
    for i in range(1, x+1):
        print(i)
        f = f * i
    return f

if __name__ == "__main__":
    print("factorial of 3=", fact(3))

कमांड लाइन से डिबगिंग शुरू करना

इस मॉड्यूल को कमांड लाइन से डिबग करना शुरू करें। इस मामले में एक्ज़ीक्यूशन कोड की पहली लाइन पर रुक जाता है, उसके बाईं ओर तीर (->) दिखाता है, और डिबगर प्रॉम्प्ट (Pdb) उत्पन्न करता है:

C:\python36>python -m pdb fact.py
> c:\python36\fact.py(1)() -> def fact(x):
(Pdb)

सभी डिबगर कमांड्स की सूची देखने के लिए डिबगर प्रॉम्प्ट के सामने 'help' टाइप करें। किसी कमांड के बारे में अधिक जानने के लिए 'help ' सिंटैक्स का उपयोग करें।

पायथन डिबगर (pdb मॉड्यूल)

list कमांड पूरे कोड को सूचीबद्ध करता है जिसमें प्रोग्राम जिस लाइन पर रुका है उसके बाईं ओर -> सिंबल होता है।

(Pdb) list
1 -> def fact(x):
2     f = 1
3     for i in range(1,x+1):
4         print(i)
5         f = f * i
6     return f
7 if __name__=="__main__":
8     print("factorial of 3 = ", fact(3))

प्रोग्राम के माध्यम से लाइन दर लाइन आगे बढ़ने के लिए step या next कमांड का उपयोग करें।

(Pdb) step
> c:\python36\fact.py(7)() -> if __name__=="__main__":
(Pdb) next
> c:\python36\fact.py(8)() -> print("factorial of 3 = ", fact(3))
(Pdb) next
1
2
3
factorial of 3= 6
--Return--
> c:\python36\fact.py(8)()->None
-> print("factorial of 3 = ", fact(3))

step और next कमांड के बीच मुख्य अंतर यह है कि step कमांड प्रोग्राम को फ़ंक्शन के भीतर रुकने का कारण बनेगा जबकि next कमांड कॉल किए गए फ़ंक्शन को एक्ज़ीक्यूट करता है और उसके बाद रुकता है।

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("factorial of 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 in range(1,x+1):
(Pdb) n
> c:\python36\fact.py(4)fact() -> print(i)
(Pdb) n
1
> c:\python36\fact.py(5)fact() -> f = f * i
(Pdb) n
> c:\python36\fact.py(3)fact() -> for i in range(1, x + 1):
(Pdb) n
> c:\python36\fact.py(4)fact() -> print(i)
(Pdb) f,i
(1, 2)
(Pdb)

step कमांड फ़ंक्शन कॉल का सामना करने पर --call-- इंडिकेशन भी दिखाता है और --return-- जब फ़ंक्शन खत्म होता है। किसी भी समय, हम केवल इसका नाम दर्ज करके किसी वेरिएबल के मान की जांच कर सकते हैं।

ब्रेकपॉइंट्स

आप break कमांड द्वारा प्रोग्राम के भीतर ब्रेकपॉइंट्स सेट कर सकते हैं। लाइन नंबर (जिस पर ब्रेकपॉइंट सेट किया जाना चाहिए) दिया जाना चाहिए। उदाहरण के लिए 'break 5' वर्तमान प्रोग्राम की लाइन 5 पर ब्रेकपॉइंट सेट करेगा।

(Pdb) list
2     f = 1
3     for i in range(1, x + 1):
4         print(i)
5     f = f * i
6     return f
7 -> if __name__=="__main__":
8     print("factorial of 3=",fact(3))
[EOF]
(Pdb) break 5
Breakpoint 1 at c:\python36\fact.py:5
(Pdb) continue
1
> c:\python36\fact.py(5)fact() -> f = f * i
(Pdb) break
Num Type Disp Enb Where
1 breakpoint keep yes at c:\python36\fact.py:5
breakpoint already hit 1 time
(Pdb) continue
2
> c:\python36\fact.py(5)fact() -> f = f * i
(Pdb) b
Num Type Disp Enb Where
1 breakpoint keep yes at c:\python36\fact.py:5
breakpoint already hit 2 times

जब 'continue' कमांड जारी की जाती है, तो प्रोग्राम एक्ज़ीक्यूशन तब तक आगे बढ़ेगा जब तक यह ब्रेकपॉइंट का सामना नहीं करता। सभी ब्रेकपॉइंट्स प्रदर्शित करने के लिए, बस लाइन नंबर के बिना break कमांड जारी करें।

किसी भी ब्रेकपॉइंट को disable/enable कमांड द्वारा अक्षम/सक्षम किया जा सकता है या clear कमांड द्वारा पूरी तरह से हटाया जा सकता है।

(Pdb) disable 1
Disabled breakpoint 1 at c:\python36\fact.py:5
(Pdb) b
Num Type Disp Enb Where
1 breakpoint keep no at c:\python36\fact.py:5
breakpoint already hit 2 times

स्क्रिप्ट के भीतर से Pdb का उपयोग करना

Pdb डिबगर को पायथन स्क्रिप्ट के भीतर से भी उपयोग किया जा सकता है। ऐसा करने के लिए, स्क्रिप्ट के शीर्ष पर pdb इम्पोर्ट करें और प्रोग्राम के अंदर set_trace() मेथड का उपयोग करें।

import pdb

def fact(x):
    f = 1
    for i in range(1, x+1):
        pdb.set_trace()
        print(i)
        f = f * i
    return f

if __name__ == "__main__":
    print("factorial of 3=", fact(3))

डिबगर का व्यवहार बिल्कुल वैसा ही होगा जैसा हम कमांड लाइन एनवायरनमेंट में पाते हैं।

  1. - पायथन यील्ड कीवर्ड: एक गाइड

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

  1. जावास्क्रिप्ट में डिबगर स्टेटमेंट जावास्क्रिप्ट में डिबगर स्टेटमेंट

    जावास्क्रिप्ट में डिबगर स्टेटमेंट का उपयोग कोड में ब्रेकपॉइंट सेट करने के लिए किया जाता है। कोड का निष्पादन डिबगर स्टेटमेंट का सामना करते ही रुक जाता है और डिबगर फ़ंक्शन को कॉल करता है (यदि उपलब्ध हो)। जावास्क्रिप्ट में डिबगर स्टेटमेंट लागू करने के लिए निम्नलिखित कोड है: उदाहरण <!DOCTYPE html>

  1. पायथन में लिस्ट (List) का आंतरिक कार्यान्वयन पायथन में लिस्ट (List) का आंतरिक कार्यान्वयन

    इस ट्यूटोरियल में, हम पायथन 3.x या उससे पहले के संस्करण में लिस्ट (List) के आंतरिक कार्यान्वयन के बारे में जानेंगे। हम यह भी देखेंगे कि जब हम प्रत्येक चरण में एक पायथन स्टेटमेंट लिखते हैं तो ऑब्जेक्ट और फ्रेम कैसे बनते हैं।लिस्ट इनिशियलाइज़ करना: इसका मतलब है कि हम कुछ तत्वों के साथ एक लिस्ट बना रहे