2010-08-12 20 views
9

मैं एक पायथन प्रोग्राम डीबग करने की कोशिश कर रहा हूं और मैंने एक स्टैक ट्रेस उत्पन्न करने वाले कॉल से ठीक पहले, एक फ़ंक्शन में क्लासिक 'आयात pdb; pdb.set_trace()' पंक्ति डाली। हालांकि उस कॉल को अनदेखा किया जा रहा है, यानी कुछ भी नहीं होता है और मुझे पीडीबी प्रॉम्प्ट नहीं मिलता है।क्या pdb.set_trace() को अनदेखा किया जा सकता है?

कार्यक्रम के उस बिंदु पर, केवल एक सक्रिय धागा है। पीडीबी मॉड्यूल का कोई बंदर पैचिंग नहीं मिला था।

क्या कॉल set_trace करना पड़ सकता है पर कोई मदद को नजरअंदाज किया जा करने के लिए स्वागत है। धन्यवाद।

प्लेटफार्म की जानकारी: डेबियन निचोड़ + अजगर 2.6.5

कोड निकालने:

import threading 
print threading.active_count() 
import pdb 
print pdb 
pdb.set_trace() 
print "*****" 
root_resource.init_publisher() # before changing uid 

उत्पादन:

<lots of stuff> 
1 
<module 'pdb' from '/usr/lib/python2.6/pdb.pyc'> 
***** 
<stack trace in init_publisher> 
+0

क्या आप इसे पुन: पेश करने के लिए कोड प्रदान कर सकते हैं? क्या 'प्रिंट' कॉल वहां से काम करते हैं? क्या आपने 'pdb.pm()' कोशिश की है? (http://docs.python.org/library/pdb.html#pdb.pm) – katrielalex

+0

दुर्भाग्यवश मैं इसे आसानी से पुन: उत्पन्न करने में सक्षम नहीं हूं (अन्यथा मैं अब तक इसे दबा दूंगा)। प्रिंट काम, pdb.pm() विफल रहता है क्योंकि उस बिंदु पर मेरे पास कोई स्टैक ट्रेस नहीं है (और अपवाद कुछ सी एक्सटेंशन द्वारा बाद में खाया जाता है, इसलिए मैं आसानी से pm() और पायथन -i –

उत्तर

6

शायद आप कुछ मुश्किल कोड एक जटिल तरीके से पता लगाने समारोह manipulates कि मिल गया है से बजाय एक की आयातित हो रही फाइल? या आप psyco जैसे त्वरक का उपयोग कर रहे हैं?

+0

कुछ बहुत अजीब सेटअप के माध्यम से, यह पता चला है कि एप्लिकेशन में एक वैकल्पिक मॉड्यूल लोड नहीं हो सका एक सी एक्सटेंशन (अनुपलब्ध साझा lib) और शुद्ध पायथन कार्यान्वयन पर डिफॉल्ट किया गया है जो चीजों को तेज़ करने के लिए psyco (http://psyco.sf.net) का उपयोग करता है। साइको पाइथन फ्रेम के साथ अजीब चीजें करता है, और इससे पाइथन डीबगर बहुत भ्रमित हो जाता है । –

0

आप शायद नहीं कि बयान चल रहे हैं, क्योंकि या तो:

  • स्टैकेट दौड़ नहीं है जहां सोचा था कि यह
  • था आप एक समान है, लेकिन गलत जगह पर set_trace कॉल डाला
  • आप एक अलग .py फ़ाइल द्वारा चलाए जा रहे एक आप संपादित
  • आप अपने खुद के स्थानीय pdb की तुलना .py जाता है कि stdlib
+0

का उपयोग नहीं कर सकता, अच्छा नहीं, लेकिन नहीं: मैं मैंने मूल संदेश में कुछ कोड जोड़ा है, यह दिखाता है कि यह मामला नहीं है। –

+0

क्या आप इंटरैक्टिव कंसोल के अलावा किसी अन्य चीज़ से stdin पाइप कर रहे हैं? – PaulMcG

4

यह एक पायथन डेवलपर्स के समय को बर्बाद करने जा रहा है। आज रात मैंने अपने रैंक में खुद को जोड़ा। काश मैं एक बड़ी लाइब्रेरी के साथ एक ही समस्या की खोज करने में 2 घंटे बिताए जाने से पहले इस पोस्ट को मिला था। इसके बाद गूगल खोजों शायद ही pdb और pysco असंगति के मुद्दे पर ज्यादा प्रकाश डाला। पीडीबी के साथ शुरू करने वाले उपयोगकर्ताओं के लिए समस्या अधिक दिखाई देनी चाहिए।

एक पुस्तकालय मैं आयात करने गया था एक फ़ाइल जो निम्नलिखित कोड निहित था की हिम्मत भीतर दीप:

try: 
    import psyco 
    psyco.bind(bdecode) 
    psyco.bind(bencode) 
except ImportError: 
    pass 

क्या लेखक, जो स्पष्ट रूप से अपने कोड, और का उपयोग कर कोई भी मान लिया की एक सुंदर इशारा जिन्होंने psyco भी स्थापित किया था, कभी भी पीडीबी जैसे उपकरण को डीबग करने के लिए एक उपकरण का उपयोग करना चाहेंगे ;-) आपको याद है, आप पूछ सकते हैं कि उन्हें किसी भी तरह से कैसे पता नहीं था?

समस्या की खोज जबकि मैं की है कि उपयोग पाया: के बाद

import pdb; pdb.set_trace() 

psyco के आयात, सिर्फ पारित हो जाता है; न तो rythme और न ही कारण के लिए। वास्तव में बहुत निराशाजनक।

समस्या PyDev के साथ डीबगिंग को प्रभावित नहीं करती है या, मुझे लगता है कि, अन्य उन्नत डिबगर्स, जो मुझे लगता है कि यह प्रारंभिक Google खोजों के रडार के बाहर क्यों गिरता है।

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