我不认为这个问题是 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.py
to python pydev.py ... --file _python_runtime.py
(即便如此,也不确定 PyDev 是否能够接受它)。
有什么建议吗?这真的是一种回归吗?
EDIT(部分答案):
这是部分答案。 IN SDK 1.7.6 Google App Engine 有一个全新的服务器。服务器现在是多进程的。主进程生成子进程(称为运行时)来运行 WSGI 处理程序。这些子进程没有被调试。
这一变化在社区中引起了很大的反响,但显然 GAE 社区主要生活在 Google 群组中,而不是 SO 中(直到昨天我才意识到这一点)。这是讨论的链接:
https://groups.google.com/forum/?fromgroups=#!topic/google-appengine/ep5BWYKpQpU
基本上有两种解决方案:
最简单的方法就是使用旧服务器,从 1.7.7 开始该服务器仍然可用。只需启动 old_dev_appserver.py,而不是 dev_appserver.py。在 Eclipse PyDev 中,转到“调试配置...”,并将“主模块”替换为 $(GOOGLE_APP_ENGINE)/old_dev_appserver.py,然后启动,就好像新服务器从未发生过一样。该解决方案显然存在运行较旧服务器的缺点,并且不知道该设置将维持多久。
-
第二种解决方案有点复杂,我还无法完全破解它。它基于 PyDev 的远程调试功能,以及告诉 GAE 在运行时进程开始时运行脚本的能力。所以这是如何做到的:
- 创建一个脚本并将其命名为:gae_runtime_startup.py。 Put 位于某处(如下)。
- 在全局 PyDev 首选项中(窗口菜单 -> 首选项 -> PyDev -> Interpreter Python -> String Substitution Variables,添加一个新的 PYDEV 变量,并将值设置为 eclipse 的 PyDev 插件(在我的计算机中,这是 c:\eclipse\插件\org.python.pydev_2.7.1.2012100913)。
- 在项目属性中,将 ${PYDEV}/pysrc 添加到 PYTHONPATH。这样,您就可以导入 pydevd
- 您需要告诉 GAE 运行 gae_runtime_startup.py。转到启动器,并将以下选项添加到命令行(调试配置 -> 参数): --python_startup_script=/gae_runtime_startup.py --max_server_instances=1
- 启动 PyDev 远程服务器。
So, after doing all that, I get a break point within runtime_startup.py running on the runtime process. If I go up the stack, I'll step within the runtime.py sources - so I think I'm in the right direction. And yet, the breakpoints I set in my handlers to not break - so this route is still blocked for me. Any help will be appreciated.
# gae_runtime_startup.py
import pydevd;
pydevd.settrace()
一些相关链接:
谷歌小组讨论: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 的精彩评论。
这确实是 1.8.3 中修复的回归:https://code.google.com/p/googleappengine/wiki/SdkReleaseNotes.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)