2011-09-30 10 views
9

मैं सीधे पीडीबी के साथ डीबगिंग के साथ काफी नया हूं और मुझे अपने Django एप्लिकेशन को डीबग करने में कुछ समस्याएं हैं। यहां मैं यह कर रहा हूं:पीडीबी ब्रेकपॉइंट पर नहीं रुक जाएगा

python -m pdb manage.py runserver 
(pdb) b core/views.py:22 
Breakpoint 2 at /Users/raphaelcruzeiro/Documents/Projects/pdb_test/core/views.py:22 
(Pdb) c 

हालांकि निष्पादन सीधे ब्रेकपॉइंट के माध्यम से गुजरता है। क्या मुझे कुछ कमांड याद आ रहा है? मैनुअल इस से अधिक ब्रेकपॉइंट सेट करने पर विस्तार नहीं करता है।

+0

कोई अपवाद नहीं है। कोड बस निष्पादित करता है जैसे – Raphael

+0

कोई डिबगर संलग्न नहीं है क्या आप कृपया कोड का एक छोटा टुकड़ा पोस्ट कर सकते हैं जो इस समस्या को प्रदर्शित करता है, केवल त्रुटि संदेश नहीं? –

उत्तर

13

मुझे एक ही समस्या के माध्यम से किया गया है।

python -m pdb ./manage.py runserver --nothreading --noreload 127.0.0.1:8080 जैसी कुछ कोशिश करें। यह मेरे लिए मुद्दा हल किया।

ऐसा लगता है कि पीडीबी के साथ ब्रेकपॉइंट थ्रेड-विशिष्ट हैं, और --nothreading और --noreload विकल्प कुछ पीडीबी को भ्रमित करने से बचने के लिए आवश्यक हैं। यही कारण है कि set_trace काम करता है, क्योंकि इसे सीधे ब्याज के धागे के अंदर बुलाया जाता है।

+0

अन्य तरीकों से इसे कैसे करें इस पर कोई विचार (विशेष रूप से, परीक्षण)? - नोथ्रेडिंग केवल रनरवर प्रतीत होता है। –

5

मैं आम तौर पर स्रोत में set_trace() पसंद करता हूं, इस तरह देव सर्वर जोड़े/हटाए जाने पर फिर से लोड हो जाएगा, और मुझे इसे रोकने और फिर से शुरू करने की आवश्यकता नहीं है। । उदाहरण के लिए:

def get_item(request): 
    import pdb; pdb.set_trace() 

जब दृश्य एक्सेस किया जाता है, pdb में शुरू होगा

+2

इस विकल्प के साथ समस्या यह है कि यह स्रोत कोड – Raphael

+0

को प्रदूषित करता है मान लीजिए कि यह राय का विषय है। वैसे भी, यह सिर्फ डीबग के दौरान है, निश्चित रूप से डिबगिंग सत्र समाप्त हो जाने के बाद यह कथन हटा दिया जाता है (साथ ही, किसी को यह याद रखने की आवश्यकता नहीं है कि कहां तोड़ना है, या यदि स्रोत केस संपादित किया गया है तो कमांड लाइन को अपडेट करें)। – mkriheli

+0

निश्चित रूप से एक बड़ी रिक है, मुझे विश्वास है कि यह कथन भूल जाएगा। मैं चाहता हूं कि पीडीबी के माध्यम से एक साधारण ब्रेकपॉइंट सेट करना है। यह मुश्किल नहीं होना चाहिए और उपकरण के लिए और अधिक दस्तावेज़ीकरण होना चाहिए ... – Raphael

1

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

1

मैंने देखा है कि एक अजीब चीज यह है कि जब आप बार-बार प्रवेश करते हैं तो पीडीबी प्रॉम्प्ट आपकी पिछली क्रिया को दोहराता है। इसके अलावा, यदि आपका प्रोग्राम चल रहा है, तो आप एंटर दबाते हैं, पीडीबी इनपुट को बफर करता है और प्रॉम्प्ट दिखाई देने पर इसे लागू करता है। मेरे मामले में, मैं पीडीबी सी (ऑनटिन्यू) का उपयोग कर एक प्रोग्राम चला रहा था। मेरा कार्यक्रम शुरुआतीकरण के दौरान stdout के लिए बहुत सारी डीबग जानकारी लिख रहा था, इसलिए ब्रेकपॉइंट ट्रिगर होने के बाद लिखे जाने वाले आउटपुट से पहले से लिखे गए आउटपुट को अलग करने के लिए मैंने दो बार प्रवेश किया। फिर, जब मैंने कुछ बाहरी कार्रवाई के माध्यम से ब्रेकपॉइंट ट्रिगर किया, तो पीडीबी ब्रेकपॉइंट पर रुक जाएगा लेकिन फिर 'buffered enter' लागू करें जो सी (ऑनटिन्यू) एक्शन को दोहराता है। एक बार जब मैंने प्रवेश करना बंद कर दिया तो यह सब सामान्य रूप से काम करना शुरू कर दिया।

यह थोड़ा अजीब लग सकता है, और मैंने इस मुद्दे की बहुत अधिक जांच नहीं की है, लेकिन यह मेरे लिए समस्या हल हो गई है। शायद यह किसी और की मदद करता है।

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