繁体   English   中英

如何使用Eclipse调试pserve?

[英]How can I debug pserve using Eclipse?

我开始在Windows上进行Pyramid开发。 我安装了Python 2.7。 我使用virtualenv为我的Pyramid应用程序创建了一个漂亮的沙盒。 我还在Eclipse Indigo上创建了PyDev 2.4。 我还为我的virutalenv创建了一个单独的PyDev解释器,因此它应该可以访问所有目录。

我设置了一个新的调试配置。

  • 项目 :testapp(工作区中唯一的项目)
  • 主模块 :$ {workspace_loc:testapp / Scripts / pserve-script.py}
  • Args :development.ini
  • 工作目录 :其他:$ {workspace_loc:testapp / testapp}

当我点击Debug时,输出是:

pydev调试器:启动PID 2208中的启动服务器。
线程中未处理的异常由
Traceback(最近一次调用最后一次):
文件“C:\\ Tools \\ eclipse-cpp-indigo-SR1-incubation-win32-x86_64 \\ eclipse \\ plugins \\ org.python.pydev.debug_2.3.0.2011121518 \\ pysrc \\ pydevd.py”,第200行,在__call__中未处理线程中的异常由
Traceback(最近一次调用最后一次):
线程中未处理的异常由
Traceback(最近一次调用最后一次):
文件“C:\\ Tools \\ eclipse-cpp-indigo-SR1-incubation-win32-x86_64 \\ eclipse \\ plugins \\ org.python.pydev.debug_2.3.0.2011121518 \\ pysrc \\ pydevd.py”,第200行,在__call__ self中.original_func(* self.args,** self.kwargs)
线程中未处理的异常由
文件“C:\\ Tools \\ eclipse-cpp-indigo-SR1-incubation-win32-x86_64 \\ eclipse \\ plugins \\ org.python.pydev.debug_2.3.0.2011121518 \\ pysrc \\ pydevd.py”,第200行,在__call__中
TypeErrorTraceback(最近一次调用最后一次):
self.original_func(* self.args,** self.kwargs):
文件“C:\\ Tools \\ eclipse-cpp-indigo-SR1-incubation-win32-x86_64 \\ eclipse \\ plugins \\ org.python.pydev.debug_2.3.0.2011121518 \\ pysrc \\ pydevd.py”,第200行,在__call__ self中.original_func(* self.args,** self.kwargs)
**之后的TypeErrorThreadedTaskDispatcher对象参数必须是映射,而不是元组
TypeError:self.original_func(* self.args,** self.kwargs):**之后的ThreadedTaskDispatcher对象参数必须是映射,而不是元组
**之后的TypeErrorThreadedTaskDispatcher对象参数必须是映射,而不是元组:
**之后的ThreadedTaskDispatcher对象参数必须是映射,而不是元组
http://0.0.0.0:6543上提供服务

即使它说服务器正在运行,但事实并非如此。 没有什么东西在听那个港口。

有关如何解决此问题的任何想法? 调试当然没有必要,但我喜欢有一个完全设置的开发环境。 谢谢!

Pyramid包含调试工具栏形式的非常好的调试支持。

确保该行

pyramid.includes = pyramid_debugtoolbar

在您的development.ini中没有注释掉它以启用它。 它不支持Eclipse断点,但几乎可以提供您想要的所有其他东西。

金字塔的pserve似乎使用多个线程,如Fabio建议可能就是这种情况。 我发现在调用pserve之前,我可以通过猴子修补ThreadTaskDispatcher来使断点工作:

# 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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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