2008-09-06 8 views
26

मैं लॉक होने के बाद एक बहु-थ्रेडेड पायथन एप्लिकेशन में डेडलॉक डीबग करने का प्रयास कर रहा हूं। क्या प्रक्रिया की स्थिति का निरीक्षण करने के लिए डीबगर संलग्न करने का कोई तरीका है?क्या बहु-थ्रेडेड पायथन प्रक्रिया में डीबगर संलग्न करने का कोई तरीका है?

संपादित करें: मैं इसे लिनक्स पर करने का प्रयास कर रहा हूं, लेकिन क्रॉस-प्लेटफ़ॉर्म समाधान होने पर यह बहुत अच्छा होगा। यह सब के बाद पाइथन है :)

उत्तर

10

हाँ, जीडीबी निम्न स्तर डीबगिंग के लिए अच्छा है।

आप थ्रेड कमांड के साथ धागे बदल सकते हैं।

, उदा,

(gdb) thr 2 
[Switching to thread 2 (process 6159 thread 0x3f1b)] 
(gdb) backtrace 
.... 

तुम भी Winpdb, या pydb तरह अजगर विशिष्ट डिबगर की जाँच कर सकते हैं। दोनों मंच स्वतंत्र।

0

आप किस प्लेटफ़ॉर्म पर इसका प्रयास कर रहे हैं? अधिकांश डिबगर्स आपको प्रक्रिया आईडी का उपयोग करके चल रही प्रक्रिया से जुड़ने की अनुमति देते हैं। आप या तो लॉगिंग या कार्य प्रबंधक जैसे कुछ का उपयोग कर प्रक्रिया आईडी आउटपुट कर सकते हैं। एक बार हासिल होने के बाद व्यक्तिगत थ्रेड और उनके कॉल स्टैक का निरीक्षण करना संभव होगा।

संपादित करें: मुझे जीएनयू डीबगर (जीडीबी) के साथ कोई अनुभव नहीं है, जो क्रॉस प्लेटफार्म है, हालांकि मुझे यह link मिला और यह आपको सही रास्ते पर शुरू कर सकता है। यह बताता है कि डीबग प्रतीकों को जोड़ने के लिए (स्टैक निशान पढ़ने के लिए आसान) और कैसे चलने वाले पायथन प्रक्रिया से संलग्न करने के लिए gdb को निर्देश देना है।

3

यदि आपका मतलब है pydb, ऐसा करने का कोई तरीका नहीं है। उस दिशा में कुछ प्रयास किए गए थे: see the svn commit, लेकिन इसे छोड़ दिया गया था। माना जाता है कि winpdb supports it

3

मेरा अनुभव पाइडेव (विंडोज एक्सपी पर ग्रहण) में बहु-थ्रेडेड प्रोग्राम डीबगिंग है, थ्रेड का उपयोग करके बनाए गए धागे .start_new_thread को झुकाया नहीं जा सका, लेकिन धागा थ्रेडिंग का उपयोग करके बनाया गया था। थ्रेड को लगाया जा सकता है। उम्मीद है कि जानकारी सहायक है।

6

आप एक बहु थ्रेडेड पायथन प्रक्रिया में डीबगर संलग्न कर सकते हैं, लेकिन आपको इसे सी स्तर पर करने की आवश्यकता है। क्या हो रहा है, इस बारे में समझने के लिए, आपको पाइथन दुभाषिया को प्रतीकों के साथ संकलित करने की आवश्यकता है। यदि आपके पास नहीं है, तो आप python.org से स्रोत डाउनलोड करने और यह अपने आप का निर्माण करने की आवश्यकता है:

./configure --prefix=/usr/local/pydbg 
make OPT=-g 
sudo make install 
sudo ln -s /usr/local/pydbg/bin/python /usr/local/bin/dbgpy 

सुनिश्चित करें कि आपके काम का बोझ दुभाषिये की उस संस्करण पर चल रहा है। फिर आप किसी भी समय जीडीबी के साथ इसे संलग्न कर सकते हैं। पाइथन लोगों ने अपनी विविध निर्देशिका में नमूना ".gdbinit" शामिल किया है, जिसमें कुछ उपयोगी मैक्रोज़ हैं। हालांकि यह बहु थ्रेडेड डीबगिंग (!) के लिए टूटा हुआ है। आप इस

while $pc < Py_Main || $pc > Py_GetArgcArgv 
निम्नलिखित के साथ

तरह लाइनों को बदलने के लिए की जरूरत है:

while ($pc < Py_Main || $pc > Py_GetArgcArgv) && ($pc < t_bootstrap || $pc > thread_PyThread_start_new_thread) 

अन्यथा pystack की तरह आदेश मुख्य थ्रेड के अलावा अन्य धागे पर समाप्त नहीं होंगे। इस सामान के साथ, आप

gdb> attach <PID> 
gdb> info threads 
gdb> thread <N> 
gdb> bt 
gdb> pystack 
gdb> detach 

जैसी सामग्री कर सकते हैं और देखें कि क्या हो रहा है। एक प्रकार का।

आप "pyo" मैक्रो के साथ ऑब्जेक्ट्स को पार्स कर सकते हैं। अपने ब्लॉग पर Chris has some examples

शुभकामनाएं।

(मेरे लिए कुछ महत्वपूर्ण जानकारी के लिए Dan's blog के लिए Shoutout, विशेष रूप से सूत्रण ठीक!)

13

उपयोग 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

pdbinject आप एक पहले से ही चल रहा है अजगर की प्रक्रिया में pdb इंजेक्षन कर सकते हैं।

pdbinject निष्पादन योग्य केवल python2 के तहत काम करता है, लेकिन python3 में इंजेक्ट कर सकता है ठीक है।

0

PyCharm IDE संस्करण 4.0 के बाद से चल रहे पायथन प्रक्रिया को जोड़ने की अनुमति देता है।

Here का वर्णन किया गया है कि यह कैसे करें।

+0

साइट 404 है। कृपया यहां दिए गए चरणों को शामिल करें। – luckydonald

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

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