我有類似的問題,這不是最理想的答案,但我會爲你描述它,也許你可以解決它。
我或多或少地寫了一個迷你調試器。 Udp客戶端/服務器和一個除了獲取全局鎖定之外什麼也不做的函數,睡眠1秒,然後釋放它。這個函數被傳遞給每個線程。然後我打電話給我想調試的關鍵區域之間的這個函數。啓動程序後,udp服務器將監聽客戶端,如果我輸入「pause」,它將獲取共享函數使用的同一個全局鎖,並且不會放棄,直到我在客戶端中鍵入「play」。所以這樣做,你可以得到一個相當嚴格的停止...取決於應用程序。
希望它有幫助...下面的微小片段。我的應用程序是用於測試平臺的,所以我所做的是將函數指針添加到基類構造函數,並使用它來代替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一起工作。你遇到什麼問題? – 2010-08-07 13:47:37