2009-02-12 13 views
49

मैं अपने अजगर कार्यक्रमों और सांत्वना के माध्यम से डिबगिंग मेंमैं एक पायथन प्रक्रिया में रिमोट डीबगर कैसे संलग्न करूं?

import pdb; pdb.set_trace() 

लाइनों डालने के थक गया हूँ। मैं रिमोट डीबगर को कैसे कनेक्ट करूं और सभ्य उपयोगकर्ता इंटरफ़ेस से ब्रेकपॉइंट्स कैसे सम्मिलित करूं?

उत्तर

55

Winpdb का उपयोग करें। यह प्लेटफ़ॉर्म स्वतंत्र ग्राफ़िकल जीपीएल पायथन डीबगर नेटवर्क, रिमोट डीबगिंग के लिए नेटवर्क, एकाधिक थ्रेड्स, नेमस्पेस संशोधन, एम्बेडेड डिबगिंग, एन्क्रिप्टेड संचार के लिए समर्थन के साथ है और पीडीबी से 20 गुना तेज है।

विशेषताएं:

  • जीपीएल लाइसेंस। Winpdb मुफ्त सॉफ्टवेयर है।
  • 2.6 के माध्यम से CPython 2.3 और अजगर 3000
  • wxPython 2.6 के साथ संगत के साथ संगत 2.8
  • मंच स्वतंत्र के माध्यम से, और Ubuntu Gutsy और Windows XP पर परीक्षण किया गया।
  • उपयोगकर्ता इंटरफेस: rpdb2 कंसोल आधारित है, जबकि winpdb को wxPython 2.6 या बाद की आवश्यकता होती है।

Screenshot http://winpdb.org/images/screenshot_winpdb_small.jpg

+0

sudo aptitude install winpdb –

16

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

from twisted.internet import reactor 
from twisted.cred import portal, checkers 
from twisted.conch import manhole, manhole_ssh 

def getManholeFactory(namespace): 
    realm = manhole_ssh.TerminalRealm() 
    def getManhole(_): 
     return manhole.Manhole(namespace) 
    realm.chainedProtocolFactory.protocolFactory = getManhole 
    p = portal.Portal(realm) 
    p.registerChecker(
     checkers.InMemoryUsernamePassword DatabaseDontUse(admin='foobar')) 
    f = manhole_ssh.ConchFactory(p) 
    return f 

reactor.listenTCP(2222, getManholeFactory(globals())) 
reactor.run() 

तो फिर तुम सिर्फ SSH पर कार्यक्रम के लिए लॉग इन;

$ ssh [email protected] -p 2222 
[email protected]'s password: 

पासवर्ड के रूप में foobar का उपयोग करना।

जब आप लॉगिन करते हैं तो आपको एक सामान्य पायथन प्रॉम्प्ट मिलेगा जहां आप केवल डेटा पर पोक कर सकते हैं। यह मेजबान को भेजे गए ट्रेसबैक के समान नहीं है।

अब, यह एक जीयूआई कार्यक्रम के लिए एकीकृत करने के लिए मुश्किल हो सकता है, उस मामले में आप जीटीके आधारित कार्यक्रमों के लिए उदाहरण के लिए, एक और रिएक्टर चयन करने के लिए आवश्यकता हो सकती है के लिए इस्तेमाल किया gtk2reactor आदि

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

2

आधुनिक IDEs से दो समाधान:

  1. PTVS पार ​​मंच दूरस्थ डीबगिंग

  2. PyCharm/PyDev दूरस्थ डीबगिंग

+0

पिचर्म को यह आवश्यक है कि यह पेशेवर संस्करण – gdbj

+0

पीटीवीएस में कंटेनरों के साथ एएसपी लोड हो। और सीपीथन समर्थित नहीं है? – user1712447

9

थोड़ा सा देर से, बी

  1. pip install epdb दूरस्थ होस्ट पर: ut यहाँ http://michaeldehaan.net/post/35403909347/tips-on-using-debuggers-with-ansible का एक बहुत ही हल्के दूरस्थ डीबगिंग समाधान शिष्टाचार है।
  2. सुनिश्चित करें कि आपका फ़ायरवॉलिंग सेटअप दूरस्थ होस्ट पर गैर-स्थानीय कनेक्शन पोर्ट 8080 को अनुमति नहीं दे रहा है, क्योंकि epdb किसी भी पते (INADDR_ANY) पर सुनने के लिए डिफ़ॉल्ट है, 127.0.0.1 नहीं।
  3. अपने प्रोग्राम में import pdb; pdb.set_trace() का उपयोग करने के बजाय, import epdb; epdb.serve() का उपयोग करें।
  4. सुरक्षित होस्ट में सुरक्षित रूप से लॉग इन करें, क्योंकि epdb.connect() टेलनेट का उपयोग करता है।
  5. python -c 'import epdb; epdb.connect()' का उपयोग कर प्रोग्राम से जुड़ें।

अपने स्थानीय नेटवर्क सेटअप और सुरक्षा रुख के अनुरूप सुरक्षा बिट्स समायोजित करें।

+1

इससे मुझे एक पाइथन ऐप डीबग करने में मदद मिली जो डॉकर कंटेनर के अंदर चल रहा है। पाइथन ऐप चलाने के लिए डॉकर कंपोज़ और nginx + uwsgi के उपयोग से सेटअप को और जटिल बना दिया गया था, इसलिए मेरे लिए कोई भी अन्य समाधान काम नहीं करता था। यह एक किया था। –

+0

यह शाप अनुप्रयोगों को डीबग करने का सबसे आसान तरीका है। चीयर्स! – Qix

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