पीडीबी से बाहर कैसे निकलें और कार्यक्रम जारी रखने की अनुमति दें?


111

मैं एक प्रोग्राम को डीबग करने के लिए pdb मॉड्यूल का उपयोग कर रहा हूं। मैं समझना चाहता हूं कि मैं पीडीबी से कैसे बाहर निकल सकता हूं और कार्यक्रम को आगे बढ़ने के लिए जारी रखने की अनुमति दे सकता हूं। कार्यक्रम को चलाने के लिए कम्प्यूटेशनल रूप से महंगा है, इसलिए मैं स्क्रिप्ट को पूरा करने के प्रयास के बिना बाहर नहीं निकलना चाहता। continueकाम करने के लिए नहीं लगता है। मैं पीडीबी से कैसे बाहर निकल सकता हूं और अपने कार्यक्रम के साथ जारी रख सकता हूं?


2
continueलूप्स से बाहर निकलता है, returnतरीकों / कार्यों को बाहर निकालता है
Stephan

7
@ स्टेफ़न: वह continuepdb कमांड के बारे में बात कर रहा है । अजगर का बयान नहीं।
२३:१३ पर आवाज

1
@turtle: continue"डॉक्स के अनुसार, ब्रेकआउट जारी रखें, तभी निष्पादन जारी रखें"। क्या आपके पास एक ब्रेकपॉइंट सेट है जो हिट हो रहा है?
वॉलीथोस

1
आह। ठीक है मैं समझा। हां, मेरे पास एक लूप के अंदर एक ब्रेक पॉइंट सेट है। वैसे भी यह चारों ओर पाने के लिए? लूप को हजारों बार कहा जाता है, इसलिए मैं मैन्युअल रूप से जारी नहीं रख सकता।
कछुए

1
@turtle: क्या आपके पास Pdb के भीतर से एक विराम बिंदु है, या क्या आपके पास pdb.set_trace()अपने स्रोत कोड में है?
--१३

जवाबों:


190

continue"निष्पादन जारी रखें, केवल तब रुकें जब एक ब्रेकपॉइंट का सामना करना पड़ता है", इसलिए आपको कहीं एक ब्रेकपॉइंट सेट किया गया है। ब्रेकपॉइंट निकालने के लिए (यदि आपने इसे मैन्युअल रूप से डाला है):

(Pdb) break
Num Type         Disp Enb   Where
1   breakpoint   keep yes   at /path/to/test.py:5
(Pdb) clear 1
Deleted breakpoint 1
(Pdb) continue

या, यदि आप उपयोग कर रहे हैं, तो आप pdb.set_trace()यह कोशिश कर सकते हैं (हालांकि यदि आप अधिक फैंसी तरीकों से पीडीबी का उपयोग कर रहे हैं, तो इससे चीजें टूट सकती हैं ...)

(Pdb) pdb.set_trace = lambda: None  # This replaces the set_trace() function!
(Pdb) continue
# No more breaks!

10
उपरोक्त pdb से बाहर नहीं निकलता है
स्टीव बार्न्स

7
सवाल के 15 वें शब्द के बारे में!
स्टीव बार्न्स

13
@SteveBarnes: मुझे लगता है कि आप इसे सचमुच में ले रहे हैं। ओपी बार-बार एक ब्रेकपॉइंट मार रहा है। ब्रेकपॉइंट से टकराने के बिना उनकी लंबी चलने वाली प्रक्रिया को जारी रखने की आवश्यकता है। Pdb वास्तव में चल रहा है या नहीं, असंगत है।
वॉयथोस

35
सेटिंग पर अच्छी टिप set_trace = lambda: None:)
रैंडलेट

2
चरम मामलों के लिए, कुछ भी नहीं धड़कता है set_trace = lambda: None। पायथन ओआरजी को एक कमांड जोड़ना चाहिए जो बस आपको पीडीबी से बाहर निकलने देता है।
एरेज़ो

26

एक साधारण Ctrl- Dपीडीबी से बाहर निकल जाएगा। यदि आप तोड़ने के बजाय जारी रखना चाहते हैं, cतो पूरे continueकमांड के बजाय बस दबाएं


6
जब आप किसी फंक्शन के अंदर होते हैं, तो लूप के अंदर क्या होता है? ऐसा लगता है कि मेरे लिए बस अगले लूप पर जाना है, और मैं पूरे टर्मिनल को बंद किए बिना वास्तव में पीडीबी, या यहां तक ​​कि अजगर को बंद नहीं कर सकता हूं?
Marses

@LimokPalantaemon अजीब, क्या आपने टाइप करने की कोशिश की हैexit
मिन्ह

यदि आप एक ट्रेस सेट करते हैं या यदि आपके पास ब्रेक पॉइंट हैं तो यह तब तक काम नहीं करता है जब तक कि आप सी दबाते रहें।
एलेक्स

शर्मनाक, लेकिन इसने मुझे बहुत लंबे समय तक अटकने से बचाया -_-
jmcg

7

इस सवाल का जवाब तो मैं बस इस मामले में जहां आप उपयोग कर रहे एक विकल्प जोड़ देंगे @voithos से, सही है set_trace। हां, pdb.set_trace = lambda: Noneहैक ठीक काम करता है, लेकिन नहीं अगर आपके पास अन्य ब्रेकप्वाइंट सेट हैं और बाद में इसे फिर से चालू करना चाहते हैं। मेरे लिए यह इस तथ्य की ओर इशारा करता है कि दुर्भाग्य pdbसे कार्यक्षमता का एक गुच्छा (यहां तक ​​कि प्रदर्शन सूचियों की तरह बुनियादी सामान) भी याद आ रहा है, और यह एक और मामला है।

अच्छी खबर यह है कि इसके pdb++लिए एक महान ड्रॉप-इन प्रतिस्थापन है pdb, और एक चीज़ जो इसे हल करती है वह वास्तव में अक्षम करने की समस्या है set_trace। तो आप बस कर सकते हैं:

pip install pdbpp

और फिर (Pdb++)प्रॉम्प्ट पर टाइप करें:

pdb.disable()

यदि आप बाद में फिर से उपयोग करना चाहते हैं, तो इस काम के बिना:

pdb.enable()

आसान! और आपको उसके ऊपर बहुत सारे अन्य उपयोगी उपहार मिलेंगे।


4

यदि आप वास्तव में डिबगर से बाहर निकलने की इच्छा रखते हैं, तो आपको WinPdb जैसा कुछ चलाने की आवश्यकता है जो आपको प्रक्रिया से अलग करने की अनुमति देता है और फिर डिबगर से बाहर निकलता है, (एनबी यह बहु मंच है)।

यदि आप डिबगिंग जारी रखना चाहते हैं, लेकिन किसी दिए गए ब्रेकपॉइंट पर रुकना नहीं चाहते हैं, तो आपको निम्न करने की आवश्यकता है:

  1. ब्रेकपॉइंट नंबर, (या फ़ाइल और लाइन नंबर) का एक नोट बनाएं,
  2. या तो cl bp_number या clear file:line स्थायी रूप से ब्रेकपाइंट दूर करने के लिए या disable pb_number उसे बंद पर टॉगल लेकिन इसे वापस चालू करने के लिए सक्षम होने के लिए।
  3. तब continueऔर आपका कार्यक्रम तब तक चलता है, जब तक कि अगला अलग-अलग ब्रेकअप न हो जाए।

उपरोक्त विवरण के बारे में अधिक जानकारी के लिए मैनुअल देखें ।


0

कुछ भी स्थापित किए बिना पीडीबी से बाहर निकलने का नया तरीका खोजें: - जब प्रोग्राम चलना शुरू हो जाता है, तो ctrl + c दबाएं, फिर विंडो को दूसरे (किसी भी विंडो) पर स्विच करें, फिर पीडीबी रनिंग वाला मूल शेल कुछ इस तरह दिखाना चाहिए: (पीडीबी) ..... - pdb पर वापस जाएँ, फिर Enter दबाएँ, अब आप सभी सेट हैं, pdb कमांड शेल फिर से दिखाई देगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.