无法在Google App Engine中调试dev_appserver

Uri*_*Uri 9 google-app-engine pydev

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

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

似乎GAE创建了一个不受PyDev控制的新进程('_python_runtime.py').我找不到PyDev中有"调试子进程"功能的任何证据,所以现在我有点迷失了.

看看GAE代码(1.7.7),看来子进程是在tools/devappserver2/http_runtime.py中调用的safe_subprocess.py/start_process.

闲逛我没有看到任何明显的方法:1.从同一个过程告诉GAE服务器到用户处理程序.2.告诉GAE将新项目的命令行更改python _python_runtime.pypython pydev.py ... --file _python_runtime.py(即使这样,不确定PyDev是否能够将其取出).

有什么建议吗?这真的是回归吗?

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

这种变化在社区中引起了很多反响,但显然GAE社区主要生活在谷歌群组中,而不是在SO中(直到昨天我才知道这一点).以下是讨论的链接:

https://groups.google.com/forum/?fromgroups=#!topic/google-appengine/ep5BWYKpQpU

基本上有两种解决方案:

  1. 最简单的方法是使用旧的服务器,从1.7.7开始仍然可用.而不是dev_appserver.py,只需启动old_dev_appserver.py即可.在Eclipse PyDev中,转到Debug Configuration ...,并将'Main Module'替换为$(GOOGLE_APP_ENGINE)/old_dev_appserver.py,并启动,好像新服务器从未发生过一样.这个解决方案显然具有运行旧服务器的缺点,并且不知道该设置将保持多长时间.

  2. 第二个解决方案涉及更多,我还无法一路解决它.它基于PyDev的远程调试功能,并能够告诉GAE在运行时进程开始时运行脚本.所以这是怎么做的:

    1. 创建一个脚本并命名为:gae_runtime_startup.py.Put在某处(下方).
    2. 在全局PyDev首选项(窗口菜单 - >首选项 - > PyDev - >解释器Python - >字符串替换变量中,添加一个新的PYDEV变量,并将值设置为eclipse的PyDev插件(在我的计算机中这是c:\ eclipse \插件\ org.python.pydev_2.7.1.2012100913).
    3. 在project属性中,将$ {PYDEV}/pysrc添加到PYTHONPATH.这样,你就可以篡改pydevd
    4. 你需要告诉GAE运行gae_runtime_startup.py.转到Launcher,并将以下选项添加到命令行(Debug Configurations - > Arguments): - python_startup_script = <full path> /gae_runtime_startup.py --max_server_instances = 1
    5. 启动PyDev远程服务器.

    所以,在完成所有这些之后,我在运行时进程上运行的runtime_startup.py中获得了一个断点.如果我上堆栈,我将进入runtime.py源代码 - 所以我认为我正朝着正确的方向前进.然而,我在处理程序中设置的断点不会中断 - 所以这条路线仍然被阻挡.任何帮助将不胜感激.
# gae_runtime_startup.py
import pydevd; 
pydevd.settrace()
Run Code Online (Sandbox Code Playgroud)

一些相关链接:

  • Google小组讨论:https://code.google.com/p/appengine-devappserver2-experiment/issues/detail?id = 28
  • 来自Google的文档解释了如何调试(我的第二种方法):https://docs.google.com/a/london.org.il/document/d/1CCSaRiIWCLgbD3OwmuKsRoHHDfBffbROWyVWWL0ZXN4/edit
  • PyDev的一个文档,解释了如何设置远程调试器.http://pydev.org/manual_adv_remote_debugger.html
  • 另见@Tim Hoffman的优秀评论.

  • Rom*_*vin 2

    这确实是在 1.8.3 中修复的回归: https: //code.google.com/p/googleappengine/wiki/SdkReleaseNotes