2011-06-30 13 views
5

यह एक तुच्छ सवाल होना चाहिए में एक सदस्य समारोह में तोड़कर, लेकिन मेरे खोज अब तक निरर्थक कर दिया गया है:अजगर डिबगर

मैं पहली बार के लिए अजगर डिबगर (pdb) का उपयोग कर रहा है, और काफी था gdb का उपयोग करने से परिचित अधिकांश आदेशों को ढूंढकर प्रसन्नता हुई।

हालांकि, जब मैं बयान के साथ JamParser वर्ग की पार्स() सदस्य में एक ब्रेकपाइंट सेट करने के लिए चला गया: मैं कई कई वेरिएंट की कोशिश की, सहित

(Pdb) b JamParser.parse 
*** The specified object 'JamParser.parse' is not a function 
or was not found along sys.path. 

:

(Pdb) b jam2dot.py:JamParser.parse 

मुझे लगता है कि चूंकि मैंने कमांड लाइन से डीबगर को बुलाया था क्योंकि यह फ़ाइल में इकाइयों को जानता है। क्या यह एक झूठी धारणा है?

documentation कहता है कि ब्रेक एक तर्क के रूप में कार्य कर सकता है, लेकिन कोई वाक्यविन्यास सहायता प्रदान नहीं करता है। तो मैं सदस्य के फ़ंक्शन के नाम से ब्रेकपॉइंट कैसे सेट करूं?

+2

यदि आपके पास स्रोत तक पहुंच है, तो मैं आमतौर पर 'आयात पीडीबी' छोड़ देता हूं; pdb.set_trace() 'जहां मैं डीबगर के साथ कदम से गुजरना चाहता हूं। –

+0

@Noufal: अब जब मैं थोड़ा और अनुभवी हूं, तो मैंने आपके सुझाव के मूल्य को महसूस किया है, धन्यवाद। –

+0

आपका स्वागत है। मैंने दो साल पहले पायकॉन में पाइथन पेशेवरों के समूह से इस चाल को सीखा। :) –

उत्तर

13

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

(Pdb) from jam2dot import JamParser 
(Pdb) b JamParser.parse 
+0

यह चाल है, धन्यवाद! –

+0

वाह। क्या एक भयानक, भ्रामक त्रुटि संदेश। यदि कोई प्रोग्राम * कुछ नहीं ढूंढ पा रहा है, तो ऐसा कहने के बजाय, इसे यह कहने के बजाय कहना चाहिए कि यह सही प्रकार का नहीं था। – kindall

+0

हां, यह बदतर है, है ना? समस्या यह है कि 'b' कमांड * या तो * फ़ाइल नाम, * या * एक फ़ंक्शन लेता है, इसलिए त्रुटि संदेश को इस अस्पष्टता का सम्मान करना पड़ता है (आखिरकार, आप 'JamParser.py' नाम की फ़ाइल में ब्रेकपॉइंट चाहते थे और एक्सटेंशन को गलत टाइप किया गया)। लेकिन मैं मानता हूं कि इससे इससे बेहतर कुछ भी हो सकता है। मेरा सुझाव है कि आप एक बग रिपोर्ट जमा करें! –

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