Кажется, что в пирамиде есть несколько потоков, как предполагает Фабио. Я обнаружил, что могу заставить точки останова работать, монтируя патч ThreadTaskDispatcher перед вызовом pserve:
# Allow attaching PyDev to the web app
import sys;sys.path.append('..../pydev/2.5.0-2/plugins/org.python.pydev.debug_2.4.0.201208051101/pysrc/')
# Monkey patch the thread task dispatcher, so it sets up the tracer in the worker threads
from waitress.task import ThreadedTaskDispatcher
_prev_start_new_thread = ThreadedTaskDispatcher.start_new_thread
def start_new_thread(ttd, fn, args):
def settrace_and_call(*args, **kwargs):
import pydevd ; pydevd.settrace(suspend=False)
return fn(*args, **kwargs)
from thread import start_new_thread
start_new_thread(settrace_and_call, args)
ThreadedTaskDispatcher.start_new_thread = start_new_thread
Обратите внимание, я тоже пробовал:
set_trace(..., trace_only_current_thread=False)
Но это либо делает приложение необычайно медленным, либо не работает по какой-то другой причине.
Сделав вышеизложенное, при запуске приложение автоматически зарегистрирует его на локальном сервере отладки pydev. Увидеть:
http://pydev.org/manual_adv_remote_debugger.html