Google app engine 无法在Google App Engine中调试dev_appserver

Google app engine 无法在Google App Engine中调试dev_appserver,google-app-engine,pydev,Google App Engine,Pydev,我认为这个问题不是PyDev独有的,而是任何python调试器独有的 使用Eclipse和pydev,我无法在dev_appserver(googleappengine开发服务器)过程中中断我的WSGI处理程序。我不是100%确定,但我认为这是GAE 1.7.6或1.7.7中的回归,因为我几乎可以肯定,在升级到1.7.7之前,我能够调试我的代码 GAE似乎创建了一个不受PyDev控制的新进程(“u python_runtime.py”)。我找不到任何证据表明PyDev中有“调试子流程”功能,所以

我认为这个问题不是PyDev独有的,而是任何python调试器独有的

使用Eclipse和pydev,我无法在dev_appserver(googleappengine开发服务器)过程中中断我的WSGI处理程序。我不是100%确定,但我认为这是GAE 1.7.6或1.7.7中的回归,因为我几乎可以肯定,在升级到1.7.7之前,我能够调试我的代码

GAE似乎创建了一个不受PyDev控制的新进程(“u python_runtime.py”)。我找不到任何证据表明PyDev中有“调试子流程”功能,所以现在我有点迷路了

查看GAE代码(1.7.7),子流程似乎是在tools/devappserver2/http_runtime.py中创建的,它调用
safe_subprocess.py/start_process

游手好闲我也没有看到任何明显的方法: 1.告诉来自同一进程的GAE到服务器到用户处理程序。 2.告诉GAE将新项目的命令行从
python\u python\u runtime.py
更改为
python pydev.py--文件_python_runtime.py
(即使这样,也不确定PyDev是否能够获取它)

有什么建议吗?这真的是一种倒退吗

编辑(部分答案):
以下是部分答案。在SDK 1.7.6中,Google应用程序引擎有一个全新的服务器。服务器现在是一个多进程。主进程生成子进程(称为运行时)来运行WSGI处理程序。这些子进程未被调试

这一变化在社区中引起了很多反应,但显然GAE社区主要生活在谷歌群体中,而不是SO(这是我直到昨天才意识到的)。以下是讨论的链接:

基本上有两种解决方案:

  • 简单的做法是使用旧服务器,从1.7.7开始,旧服务器仍然可用。不用dev_appserver.py,只需启动旧的dev_appserver.py即可。在EclipsePydev中,转到调试配置…,将“主模块”替换为$(GOOGLE_APP_ENGINE)/old_dev_appserver.py,并像新服务器从未出现一样启动。此解决方案的明显缺点是运行较旧的服务器,不知道此设置将保持多长时间

  • 第二个解决方案有点复杂,我还没能一路破解它。它基于PyDev的远程调试功能,以及在运行时进程开始时告诉GAE运行脚本的能力。这就是如何做到这一点:

  • 创建一个脚本并将其命名为:gae_runtime_startup.py。放在(下面)某处
  • 在全局PyDev首选项(窗口菜单->首选项->PyDev->解释器Python->字符串替换变量)中,添加一个新的PyDev变量,并将值设置为eclipse的PyDev插件(在我的计算机中是c:\eclipse\plugins\org.Python.PyDev_2.7.1.2012100913)
  • 在项目属性中,将${PYDEV}/pysrc添加到PYTHONPATH
  • 您需要告诉GAE运行GAE\u runtime\u startup.py。转到启动器,并将以下选项添加到命令行(调试配置->参数):--python\u startup\u script=/GAE\u runtime\u startup.py--max\u server\u instances=1
  • 启动PyDev远程服务器。

    因此,在完成所有这些之后,我在运行时进程上运行的runtime_startup.py中得到了一个断点。如果我进入堆栈,我将进入runtime.py源代码中-因此我认为我的方向是正确的。然而,我在处理程序中设置的断点没有中断-因此此路由对我来说仍然是阻塞的。任何帮助都将不胜感激。
  • 一些相关链接:
  • 谷歌小组讨论:
  • 谷歌的一份文档,解释如何调试(我的第二种方法):
  • PyDev提供的说明如何设置远程调试器的文档

  • 另请参见下面@Tim Hoffman的精彩评论。

    这确实是一个在1.8.3中修复的回归:。

    我发布了一个关于如何使用Boa进行远程调试的快速指南,我想pydev将与之类似——尽管我从未使用过它。该方法将适用于winpdb 1.7.6,并引入了一个新的开发服务器。您的另一个替代方案是:native将运行old_dev_server.pyThank you@Tim。无法将您的Boa解决方案完全转移到PyDev,但我的方向是正确的(请参阅我的编辑)。希望很快会有修复/指导。您的第二种方法肯定可以正常工作。我可能会尝试运行winpdb,它的模型与Boa几乎相同,您可以连接到与代码挂钩的调试器,而不是相反。请注意,PyDev 2.8.0现在支持Google App Engine上的新挂钩,因此,调试应该正在重新工作。请参阅发布详细信息,网址:
    # gae_runtime_startup.py
    import pydevd; 
    pydevd.settrace()