У меня была аналогичная проблема, это не самый идеальный ответ, но я опишу его для вас, и, возможно, вы сможете отработать.
Я более или менее написал мини-отладчик. Udp Client/Server и функция, которая ничего не делала, кроме как захватить глобальную блокировку, спать .1 секунд, а затем отпустить ее. Эта функция передавалась каждому потоку. Затем я вызывал эту функцию между критическими областями, которые я хотел отлаживать. После запуска программы udp-сервер будет прослушивать клиент, и если бы я набрал «паузу», он бы захватил тот же глобальный блокировщик, который использовался совместно используемой функцией, и не отдавал его до тех пор, пока я не набрал «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. Какую проблему вы испытываете? –