2011-05-11 29 views
98

तो मैं एक अजगर स्क्रिप्ट के भीतर जो मैं पायथन के डिबगर, PDB बोल रहा हूँ लेखन से चला रहा हूँ इस मामले के लिए मुझे नहीं लगता कि इससे कोई फर्क पड़ता है; मैं इसे केवल रंगीन आउटपुट के लिए उपयोग करता हूं)।कैसे अजगर के अपने डिबगर के भीतर बहु ​​लाइन स्टेटमेंट्स को निष्पादित करने (PDB)

अब, जब मैं डिबगर के लिए मिलता है मैं एक बहु-लाइन बयान निष्पादित करने के लिए इस तरह के खंड अगर एक या एक पाश के लिए, लेकिन जैसे ही मेरे लिखते ही

if condition: 

चाहते हैं और वापस कुंजी मारा, मैं त्रुटि संदेश प्राप्त करें *** SyntaxError: invalid syntax (<stdin>, line 1)

पीडीबी के भीतर बहु-पंक्ति विवरण कैसे निष्पादित कर सकते हैं? यदि संभव नहीं है तो क्या क्लॉज या लूप के लिए अभी भी निष्पादित करने के लिए इसके आसपास एक तरीका है?

उत्तर

2

मुझे नहीं पता कि आप यह कर सकते हैं या नहीं, यह आईपीडीबी के लिए एक शानदार विशेषता होगी। आप निश्चित रूप से सूची comprehensions उपयोग कर सकते हैं, और जैसे सरल बहु लाइन भाव निष्पादित करें:

if y == 3: print y; print y; print y; 

तुम भी पहले से कुछ कार्यों लिख सकता है जो कुछ भी यह आप कर की जरूरत है कि आम तौर पर कई पंक्तियों ले जाएगा है क्या करना है।

23

पायथन (2.7.1) दुभाषिया या डीबगर (आयात पीडीबी) के अंदर, आप निम्न वाक्यविन्यास के साथ एक बहु-रेखा विवरण निष्पादित कर सकते हैं।

for i in range(5): print("Hello"); print("World"); print(i) 

नोट: जब मैं दुभाषिया के अंदर हूं, तो मुझे कोड निष्पादित होने से पहले दो बार वापसी करना होगा। डीबगर के अंदर, हालांकि, मुझे केवल एक बार वापसी करना है।

+0

यह एक स्तर से गहराई से कुछ भी चलाने की अनुमति नहीं देता है। –

6

यदि आप ब्रेक पॉइंट मारते समय कुछ आदेशों को निष्पादित करना चाहते हैं तो विशेष मामला है। फिर डीबगर कमांड commands है। यह आपको कमांड की कई पंक्तियों को दर्ज करने की अनुमति देता है और फिर end कुंजी शब्द के साथ पूरे अनुक्रम को समाप्त करता है। (pdb) help commands के साथ और अधिक।

175

आप सभी स्थानीय उपलब्ध चर के साथ एक अस्थायी इंटरैक्टिव अजगर सत्र शुरू करने के लिए pdb में इस जबकि कर सकता है:

(pdb) !import code; code.interact(local=vars()) 
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
(InteractiveConsole) 
>>> 

कार्य पूरा हो जाने, Ctrl-D का उपयोग नियमित रूप से pdb शीघ्र पर लौटने के लिए।

बस Ctrl-C दबाएं, जो पूरे पीडीबी सत्र को समाप्त कर देगा।

+4

प्रतिभाशाली, टिप – cedbeu

+10

के लिए यह एक ही लगता है धन्यवाद pdb 'interact' आदेश का उपयोग कर प्राप्त किया जा सकता ([के रूप में मैं इस बग ट्रैकर संदेश से सीखा] (http://bugs.python.org/msg215963))। – gerrit

+1

'आयात' कथन में '!' क्यों आवश्यक है? –

10

python3 ipdb (और pdb) एक आदेश interact कहा जाता है। यह करने के लिए इस्तेमाल किया जा सकता:

Start an interactive interpreter (using the code module) whose global namespace contains all the (global and local) names found in the current scope.

इसका इस्तेमाल करने के लिए बस pdb प्रॉम्प्ट पर interact दर्ज करें। अन्य चीजों के अलावा, यह एकाधिक लाइनों को फैलाने वाले कोड को लागू करने के लिए उपयोगी है, और अन्य पीडीबी कमांडों के आकस्मिक ट्रिगरिंग से बचने के लिए भी उपयोगी है।

+0

यह मुझे "नाम त्रुटि: नाम 'इंटरैक्ट' परिभाषित नहीं किया गया है" ऐसा करते समय। – Jason

+0

@ जेसन संस्करण 3.2 या उच्चतर – vaerek

+0

बताता है। मैं अजगर 2.7 में था। – Jason