2008-10-08 14 views
5

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

इसलिए, क्योंकि आपके प्रोग्राम के आउटपुट को तुरंत देखना आसान है और कोई भी त्रुटि हो सकती है, मैंने अभी तक एक डीबगर टूल का उपयोग नहीं किया है। वर्तमान में उपयोग की जाने वाली विधि के वास्तविक डीबगर बनाम उपयोग करने के लिए कौन सी स्थितियां कॉल कर सकती हैं?

मैं किसी स्थिति में आने से पहले जानना चाहता हूं और निराश हो जाता हूं क्योंकि मुझे नहीं पता कि समस्या को कैसे ठीक किया जाए।

+0

मुझे लगता है कि आपका मतलब है कि पेशेवरों के लिए डीबगर उपयोगी क्यों है, लेकिन भाषा संरचनाओं के अर्थशास्त्र को समझाने के लिए डीबगर भी उपयोगी हो सकता है। Thonny (http://thonny.cs.ut.ee) यहां अच्छा काम करता है। – Aivar

उत्तर

7

मैं मूल पायथन डीबगिंग के लिए पीडीबी का उपयोग करता हूं। स्थितियों मैं इसका इस्तेमाल से कुछ हैं:

  • आप 100,000 प्रविष्टियों पर एक पाश-बार दोहराना है और एक विशिष्ट बिंदु पर तोड़ने के लिए चाहते हैं, तो यह वास्तव में उपयोगी हो जाता है (सशर्त टूट जाता है)
  • ट्रेस के नियंत्रण प्रवाह। किसी और का कोड
  • प्रिंटर के साथ कोड कूड़े की तुलना में डीबगर का उपयोग करना हमेशा बेहतर होता है।
  • आम तौर पर एक बग के परिणामस्वरूप असफलताओं के एक से अधिक बिंदु हो सकते हैं, सभी पहले रूप में स्पष्ट नहीं हैं। तो आप स्पष्ट स्थानों की तलाश करते हैं, यदि कुछ भी गलत नहीं है, तो आप आगे बढ़ें और कुछ और प्रिंट जोड़ें .. डीबगर आपको समय बचा सकता है, आपको प्रिंट जोड़ने और फिर से चलाने की आवश्यकता नहीं है।
2

जब भी आप वेरिएबल की सामग्री का निरीक्षण करना चाहते हैं जो त्रुटि उत्पन्न कर सकता है। एकमात्र तरीका यह है कि आप निष्पादन को रोकना और ढेर पर नजर डालना है।

ग्रहण में pydev एक बहुत अच्छा आईडीई है यदि आप एक की तलाश में हैं।

6

आमतौर पर जब त्रुटि कुछ फ़ंक्शन में दफन होती है, लेकिन मुझे नहीं पता कि वास्तव में क्या या कहां है। या तो मैं log.debug() कॉल के दर्जनों डालने और फिर उन्हें वापस लेने के लिए है, या बस में डाल दिया:

import pdb 
pdb.set_trace() 

और फिर कार्यक्रम चलाते हैं। जब यह उस बिंदु तक पहुंचता है तो डीबगर लॉन्च होगा और मुझे

8

प्रोग्रामिंग के 30 वर्षों में मैंने डीबगर का उपयोग 4 बार किया है। सभी चार बार सीआर प्रोग्राम क्रैशिंग से उत्पादित core फ़ाइल को पढ़ना था जो वहां दफन की गई ट्रेसबैक जानकारी का पता लगाने के लिए था।

मुझे नहीं लगता कि डिबगर्स संकलित भाषाओं में भी बहुत मदद करते हैं। डिबगर्स जैसे कई लोग, उनका उपयोग करने के कुछ कारण हैं, मुझे यकीन है, या लोग उन पर ऐसे प्यार और देखभाल को पसंद नहीं करेंगे।

यहां बिंदु - सॉफ़्टवेयर ज्ञान कैप्चर है।

हां, इसे चलाने के लिए है। सबसे महत्वपूर्ण बात यह है कि, सॉफ्टवेयर में का अर्थ है

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

डिबगर पर मेरे सुझाव है" परेशान नहीं है "।

" लेकिन, क्या हुआ अगर मैं पूरी तरह स्टंप्डया हूँ? "आप पूछ," मैं तो डिबगर सीखना चाहिए? "पूरी तरह से क्या द्वारा स्टम्प्ड? भाषा पायथन के भी बोलना befuddlement के लिए सरल कुछ पुस्तकालय शायद

यहाँ आप क्या करना है? -।?।। के साथ या एक डिबगर के बिना

  1. आप स्रोत है, यह पढ़
  2. आप लिखें। पुस्तकालय का प्रयोग करने के लिए छोटे परीक्षण। Usi यदि संभव हो तो इंटरैक्टिव खोल। [सभी वास्तव में अच्छी पुस्तकालय इंटरैक्टिव पायथन मोड का उपयोग करके अपनी विशेषताओं को दिखाना प्रतीत होते हैं - मैं इस स्तर के तंग, स्पष्ट सादगी के लिए प्रयास करता हूं।]
  3. आपके पास स्रोत है, प्रिंट फ़ंक्शन जोड़ें।
+1

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

+0

@ केना: मुझे लगता है कि पाइथन में असत्य होना है। इंटरेक्टिव पायथन का उपयोग करना इतना आसान है कि डीबगर अनिवार्य लगता है। –

+2

ठीक है, मुझे यकीन नहीं है कि डीबगर और इंटरैक्टिव कंसोल के बीच रेखा को कहां खींचना है। मेरी पुस्तक में, यह सब एक निरंतरता है कि यह पता लगाना कि यह कोड ऐसा क्यों नहीं करता है जो इसे करना है ", चाहे मैं सीधे कंसोल में स्निपेट कहूं या पीडीबी का उपयोग करके एक महत्वपूर्ण बिंदु पर कंसोल को फायर कर दूं। मुझे लगता है कि मैं जिस प्रकार की बग का सामना करता हूं, उसके लिए दूसरा विकल्प बेहतर होता है, लेकिन जो कुछ भी आपके लिए काम करता है ... – Kena

1

मुझे असफल परीक्षण मामले में डीबगर में जाने के लिए बहुत उपयोगी लगता है।

मैं परीक्षण की विफलता बिंदु से ठीक पहले import pdb; pdb.set_trace() जोड़ता हूं। परीक्षण चलता है, संभावित रूप से काफी बड़े संदर्भ का निर्माण करता है (उदाहरण के लिए डेटाबेस स्थिरता आयात करना या HTTP अनुरोध बनाना)। जब परीक्षण pdb.set_trace() लाइन तक पहुंच जाता है, तो यह इंटरैक्टिव डीबगर में गिर जाता है और मैं उस संदर्भ का निरीक्षण कर सकता हूं जिसमें सामान्य पीडीबी कमांड के साथ विफलता होती है जिससे कारणों के कारण सुराग मिलते हैं।

0

आप इस अन्य अतः पद पर एक नज़र लेने के लिए चाहते हो सकता है:

Why is debugging better in an IDE?

यह सीधे आप के बारे में क्या कह रहे हैं के लिए प्रासंगिक है।

संबंधित मुद्दे