简体   繁体   中英

How can I debug pserve using Eclipse?

I'm getting started with Pyramid development on Windows. I have Python 2.7 installed. I used virtualenv to create a nice sandbox for my Pyramid app. I also created PyDev 2.4 on Eclipse Indigo. I also created a separate PyDev interpreter just for my virutalenv, so it should have access to all the directories.

I set up a new debug configuration.

  • Project : testapp (the only project in the workspace)
  • Main module : ${workspace_loc:testapp/Scripts/pserve-script.py}
  • Args : development.ini
  • Working dir : Other: ${workspace_loc:testapp/testapp}

When I hit Debug, the output is:

pydev debugger: starting Starting server in PID 2208.
Unhandled exception in thread started by
Traceback (most recent call last):
File "C:\\Tools\\eclipse-cpp-indigo-SR1-incubation-win32-x86_64\\eclipse\\plugins\\org.python.pydev.debug_2.3.0.2011121518\\pysrc\\pydevd.py", line 200, in __call__ Unhandled exception in thread started by
Traceback (most recent call last):
Unhandled exception in thread started by
Traceback (most recent call last):
File "C:\\Tools\\eclipse-cpp-indigo-SR1-incubation-win32-x86_64\\eclipse\\plugins\\org.python.pydev.debug_2.3.0.2011121518\\pysrc\\pydevd.py", line 200, in __call__ self.original_func(*self.args, **self.kwargs)
Unhandled exception in thread started by
File "C:\\Tools\\eclipse-cpp-indigo-SR1-incubation-win32-x86_64\\eclipse\\plugins\\org.python.pydev.debug_2.3.0.2011121518\\pysrc\\pydevd.py", line 200, in __call__
TypeErrorTraceback (most recent call last):
self.original_func(*self.args, **self.kwargs) :
File "C:\\Tools\\eclipse-cpp-indigo-SR1-incubation-win32-x86_64\\eclipse\\plugins\\org.python.pydev.debug_2.3.0.2011121518\\pysrc\\pydevd.py", line 200, in __call__ self.original_func(*self.args, **self.kwargs)
TypeErrorThreadedTaskDispatcher object argument after ** must be a mapping, not tuple
TypeError: self.original_func(*self.args, **self.kwargs) : ThreadedTaskDispatcher object argument after ** must be a mapping, not tuple
TypeErrorThreadedTaskDispatcher object argument after ** must be a mapping, not tuple :
ThreadedTaskDispatcher object argument after ** must be a mapping, not tuple
serving on http://0.0.0.0:6543

Even though it says the server is running, it's not. Nothing is listening on that port.

Any idea on how to fix this? Debugging certainly isn't necessary, but I like having a fully set up development environment. Thanks!

Pyramid includes remarkably good debug support in the form of the debug toolbar .

Make sure that the line

pyramid.includes = pyramid_debugtoolbar

in your development.ini isn't commented out to enable it. It doesn't support Eclipse breakpoints, but gives almost everything else you'd want.

Pyramid's pserve seems to use multiple threads like Fabio suggests might be the case. I found I could make breakpoints work by monkey-patching the ThreadTaskDispatcher before invoking 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

Note, I also tried:

set_trace(..., trace_only_current_thread=False)

But this either makes the app unusably slow, or doesn't work for some other reason.

Having done the above, when run the app will automatically register it with pydev debug server running locally. See: http://pydev.org/manual_adv_remote_debugger.html

没有遇到这个错误,但通常,在难以调试的环境中,可能会使用远程调试器(http://pydev.org/manual_adv_remote_debugger.html)(这种方式有点像pdb:添加代码来添加一个断点,所以,直到那一刻,你的程序像往常一样运行)。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM