मुझे एक समान समस्या थी, यह सबसे आदर्श उत्तर नहीं है, लेकिन मैं इसका आपके लिए वर्णन करूंगा और शायद आप इसका काम कर सकते हैं।
मैंने मिनी डिबगर को कम से कम लिखा था। Udp क्लाइंट/सर्वर और एक ऐसा फ़ंक्शन जिसने कुछ भी नहीं किया लेकिन वैश्विक लॉक पकड़ लिया, 1 सेकंड सो, और फिर इसे छोड़ दें। यह कार्य प्रत्येक धागे को पारित कर दिया गया। इसके बाद मैंने महत्वपूर्ण कार्यों के बीच इस समारोह में एक कॉल किया जिसे मैं डीबग करना चाहता था। प्रोग्राम शुरू करने के बाद, udp सर्वर क्लाइंट के लिए सुनेगा, और यदि मैंने "रोकें" टाइप किया है, तो यह साझा फ़ंक्शन द्वारा उपयोग किए जाने वाले एक ही वैश्विक लॉक को पकड़ लेगा, और जब तक मैंने क्लाइंट में "प्ले" टाइप नहीं किया तब तक इसे तब तक न दें। तो ऐसा करने से, आप आवेदन के आधार पर काफी तंग स्टॉप प्राप्त कर सकते हैं।
उम्मीद है कि यह मदद करता है ... नीचे छोटे स्निपेट। मेरा आवेदन एक टेस्ट प्लेटफ़ॉर्म के लिए था, इसलिए मैंने जो किया वह बेस क्लास कन्स्ट्रक्टर को फ़ंक्शन पॉइंटर जोड़ता था, और time.sleep() के बजाय इसका उपयोग करता था .. मुझे हल्का डिबगबिलिटी देता था। आप क्या कर सकते हैं यह प्रत्येक धागे को पास कर देता है और आपके कार्यों की शुरुआत और अंत में विराम समारोह में कॉल जोड़ता है, और यह आपको तोड़ने की इजाजत देता है, आदि। मैंने कुछ आदेश हटा दिए लेकिन आप देख सकते हैं कि यह हो सकता है जितनी व्यापक हो उतनी व्यापक बना दी गई है।
PAUSE_NOW = thread.allocate_lock()
def pause(s):
'''
FUNCTION: testStatus
DESCRIPTION: function passed to all test objects
INPUTS: none
RETURNS: none
'''
global Pause_NOW
PAUSE_NOW.acquire()
time.sleep(s)
PAUSE_NOW.release()
`
def server():
'''
\r\n
FUNCTION: server
DESCRIPTION: UDP server that launches a UDP client. The client it
starts can issue commands defined in cmdlineop. Most
functions return a status, but some are meant to block
the main thread as a means of pausing a test, in which case
a default response is returned.
INPUTS: none
RETURNS: none
'''
global EXIT
global Pause_NOW
host = "localhost"
port = 21567
buf = 1024
addr = (host,port)
UDPSock = socket(AF_INET,SOCK_DGRAM)
UDPSock.bind(addr)
sleep(1)
os.startfile('client.py')
#os.system('start python client.py')
cmdlineop = {
'pausenow' : "PAUSE_NOW.acquire()",
'playnow' : "PAUSE_NOW.release()",
}
while 1:
output = 'RECEIVED CMD'
# if EXIT: break
data,addr = UDPSock.recvfrom(buf)
if not data:
break
else:
if cmdlineop.has_key(data.split()[0]):
exec(cmdlineop[(data.split()[0])])
UDPSock.sendto(('\n'+output+'\n'),addr)
data = ''
else:
UDPSock.sendto('INVALID CMD',addr)
UDPSock.close()
pdb बहु कार्यक्रमों डिबगिंग समर्थन नहीं करता। हालांकि यह PyDev के साथ काम करना चाहिए। आप कौन सी समस्या का सामना कर रहे हैं? –