我有类似的问题,这不是最理想的答案,但我会为你描述它,也许你可以解决它。
我或多或少地写了一个迷你调试器。 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