2015-02-09 10 views
6

इस नमूना कोड को देखते हुए:पायथन पीडीबी में अगले लूप पुनरावृत्ति को कैसे जारी रखें?

import pdb 

for i in range(10): 
    pdb.set_trace() 
    print(str(i)) 

जब मैं PDB से शीघ्र मिलता है, मैं कैसे पाश की एक यात्रा छोड़ सकते हैं जब यह भी PDB द्वारा प्रयोग किया जाता है, के साथ जारी रखने लूप नियंत्रण बयान, जारी रखने के लिए कोड निष्पादन?

+0

तो, स्पष्ट होने के लिए, क्या आप चाहते हैं कि कोड 'जारी रखें' कथन निष्पादित किया गया हो? आप उस लूप के लिए 'str (i) 'मुद्रित नहीं करना चाहते हैं, है ना? – Kevin

+0

यह सही है! – Andor

+1

संयोग से, "मैं पीडीबी कमांड और पायथन अभिव्यक्तियों के बीच एक भेद कैसे बना सकता हूं जो सामान्य रूप से पीडीबी कमांड की तरह दिखता है?", आप अपने पायथन अभिव्यक्ति को विस्मयादिबोधक बिंदु से उपसर्ग कर सकते हैं। लेकिन यह विशेष रूप से 'जारी रखने 'के लिए काम नहीं करता है। – Kevin

उत्तर

7

ऐसा करने के लिए एक अजीब चीज की तरह लगता है। हालांकि आप jump command का उपयोग करने में सक्षम होना चाहिए। आपको शायद अपने लूप के अंत में पास स्टेटमेंट जोड़ना होगा ताकि आप लूप के अंत तक कूद सकें। यदि आप अपने कोड की लाइन संख्याओं के बारे में सुनिश्चित नहीं हैं तो आप अपने लूप की लाइन संख्याओं को जानने के लिए ll का उपयोग कर सकते हैं।

> c:\run.py(5)<module>() 
-> print(i) 
(Pdb) ll 
    1  import pdb 
    2  
    3  for i in range(10): 
    4   pdb.set_trace() 
    5 ->  print(i) 
    6   pass 
(Pdb) j 6 
> c:\run.py(6)<module>() 
-> pass 
(Pdb) c 
> c:\python\run.py(4)<module>() 
-> pdb.set_trace() 
(Pdb) c 
1 
> c:\python\run.py(5)<module>() 
-> print(i) 

यह ध्यान देने योग्य है कि for लाइन के लिए कूद पाश पुनः आरंभ करेगा लायक है।

+0

यह एक समाधान है। आपका बहुत बहुत धन्यवाद! हालांकि अगर किसी संदर्भ में * जारी * कथन निष्पादित करने के लिए कोई समाधान जानता है, तो यह भी बेहतर होगा। – Andor

8

आप continue का उपयोग नहीं कर सकते हैं क्योंकि डीबगर में नए बयान पूर्ण और किसी भी अन्य संदर्भ के बिना मान्य होना चाहिए; को लूप निर्माण के अंदर संकलित करते समय दिया जाना चाहिए। !continue (! के साथ कमांड को समझने से pdb को रोकने के लिए) का उपयोग नहीं किया जा सकता है, भले ही डीबगर लूप निर्माण को संसाधित कर रहा हो।

आप j[ump] आदेश, बशर्ते आप एक बाद में बयान के लिए कूद करने के लिए है का उपयोग कर सकते हैं। यदि आपका पाश के बाद बयान आप चाहते थे के ऊपर कूद करने के रिक्त है, आप केवल 'रिवाइंड' कर सकते हैं:

$ bin/python test.py 
> /.../test.py(5)<module>() 
-> print(str(i)) 
(Pdb) l 
    1  import pdb 
    2  
    3  for i in range(10): 
    4   pdb.set_trace() 
    5 ->  print(str(i)) 
    6  
[EOF] 
(Pdb) j 3 
> /.../test.py(3)<module>() 
-> for i in range(10): 

j 3 3 लाइन, कुछ भी लंघन नहीं कूद गया; लाइन 3 को फिर से निष्पादित किया जाएगा जिसमें range() स्थापित किया जाएगा। आप लाइन 4 पर कूद सकते हैं, लेकिन फिर for लूप अग्रिम नहीं है।

पाइथन के लिए जारी रखने के लिए आपको लूप के अंत में एक और कथन जोड़ने की आवश्यकता होगी। यह कथन print() या pass या ऐसा कुछ भी हो सकता है जो आपके राज्य को बदलने की आवश्यकता न हो। आप अंतिम विवरण के रूप में continue का भी उपयोग कर सकते हैं। मैं i प्रयोग किया है:

for i in range(10): 
    pdb.set_trace() 
    print(str(i)) 
    i # only here to jump to. 

डेमो:

$ bin/python test.py 
> /.../test.py(5)<module>() 
-> print(str(i)) 
(Pdb) l 
    1  import pdb 
    2  
    3  for i in range(10): 
    4   pdb.set_trace() 
    5 ->  print(str(i)) 
    6   i # only here to jump to. 
    7  
[EOF] 
(Pdb) j 6 
> /.../test.py(6)<module>() 
-> i # only here to jump to. 
(Pdb) c 
> /.../test.py(4)<module>() 
-> pdb.set_trace() 
(Pdb) s 
> /.../test.py(5)<module>() 
-> print(str(i)) 
(Pdb) j 6 
> /.../test.py(6)<module>() 
-> i # only here to jump to. 
(Pdb) i 
1 
(Pdb) c 
> /.../test.py(4)<module>() 
-> pdb.set_trace() 
(Pdb) s 
> /.../test.py(5)<module>() 
-> print(str(i)) 
(Pdb) j 6 
> /.../test.py(6)<module>() 
-> i # only here to jump to. 
(Pdb) i 
2 

Debugger Commands से:

j (UMP) lineno
अगली पंक्ति है कि निष्पादित किया जाएगा निर्धारित करें। केवल नीचे-फ्रेम में उपलब्ध है। यह आपको वापस कूदने और कोड को फिर से निष्पादित करने देता है, या उस कोड को छोड़ने के लिए आगे बढ़ता है जिसे आप चलाने के लिए नहीं चाहते हैं।

यह ध्यान दिया जाना चाहिए कि सभी कूदों की अनुमति नहीं है - उदाहरण के लिए for लूप के बीच में या finally खंड से बाहर कूदना संभव नहीं है।

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