无法在 Google App Engine 中调试 dev_appserver

2023-11-22

我不认为这个问题是 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. 最简单的方法就是使用旧服务器,从 1.7.7 开始该服务器仍然可用。只需启动 old_dev_appserver.py,而不是 dev_appserver.py。在 Eclipse PyDev 中,转到“调试配置...”,并将“主模块”替换为 $(GOOGLE_APP_ENGINE)/old_dev_appserver.py,然后启动,就好像新服务器从未发生过一样。该解决方案显然存在运行较旧服务器的缺点,并且不知道该设置将维持多久。

  2. 第二种解决方案有点复杂,我还无法完全破解它。它基于 PyDev 的远程调试功能,以及告诉 GAE 在运行时进程开始时运行脚本的能力。所以这是如何做到的:

    1. 创建一个脚本并将其命名为:gae_runtime_startup.py。 Put 位于某处(如下)。
    2. 在全局 PyDev 首选项中(窗口菜单 -> 首选项 -> PyDev -> Interpreter Python -> String Substitution Variables,添加一个新的 PYDEV 变量,并将值设置为 eclipse 的 PyDev 插件(在我的计算机中,这是 c:\eclipse\插件\org.python.pydev_2.7.1.2012100913)。
    3. 在项目属性中,将 ${PYDEV}/pysrc 添加到 PYTHONPATH。这样,您就可以导入 pydevd
    4. 您需要告诉 GAE 运行 gae_runtime_startup.py。转到启动器,并将以下选项添加到命令行(调试配置 -> 参数): --python_startup_script=/gae_runtime_startup.py --max_server_instances=1
    5. 启动 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(使用前将#替换为@)

    无法在 Google App Engine 中调试 dev_appserver 的相关文章

    随机推荐

    • 你能在一条语句中访问MySQL中的自动增量值吗?

      我有一个 MySQL 数据库 其中包含一个用户表 表的主键是 userid 设置为自增字段 我想做的是 当我将新用户插入表中时 使用自动增量在不同字段 default assignment 的 userid 字段中创建的相同值 e g 我想
    • C++:声明一个全局类并从其他类访问它?

      我有一个类应该从 main 全局声明并从程序中的其他声明的类访问 我该怎么做 class A int i int value return i class B global A a or extern int calc return a v
    • Python 中 Tesseract OCR 的 UnicodeDecodeError

      我正在尝试使用 Python 中的 Tesseract OCR 从图像文件中提取文本 但我遇到了一个错误 我可以弄清楚如何处理它 我的所有环境都很好 因为我用 python 中的 ocr 测试了一些示例图像 这是代码 from PIL im
    • 更改 MySQL 错误消息语言

      我的 MySQL 错误语言有问题 当查询出现错误时 该错误不是英文的 就像下面的消息 Le champ id ne peut tre vide null 我已经运行此查询来更改语言 但仍然出现相同的错误 SET lc messages en
    • 本地 ffmpeg 输出到 S3 Bucket

      这是我的设置 我有一台运行 ffmpeg 的本地 PC 输出配置为 h 264 和 aac 以及在AWS创建的S3存储桶 我需要做的是 使用 ffmpeg local 输出将文件直接上传到 s3 存储桶 附 计划将 s3 存储桶与 clou
    • DOM/Javascript:获取标签后的文本

      如何获取 html 文档中标签后面的文本 there p a hello a there p 我发现有一种方法可以用 xpath 做到这一点 从下一个标签获取文本 但我没有使用 xpath 并且希望不必为此而开始 我意识到我可以获取 p 标
    • 如何在Java.time中将LocalDateTime的精度设置为纳秒?

      根据java time 文档 java time应该能够以纳秒精度呈现 LocalDateTime 或 LocalTime 但是当我运行时LocalDateTime now 打印出来 只显示3位数字 而不是9位 像这样 2016 08 11
    • 怎么去掉这些点啊!

      我正在 VS2008 的一个项目上编码 我试图按 CTR R E 将字段封装为属性 resharper 的功能 但我摸索着 现在我到处都是点 我有空格 我不知道如何摆脱它 例如 using System Namespace EgNamesp
    • C++ 从 hBitmap 获取 RGB

      使用位图对我来说是非常陌生的 所以我一直在努力阅读我读过的在线教程和策略 基本上我的目标是扫描屏幕以获取特定的 RGB 值 我相信执行此操作的步骤是在 hBitmap 中捕获屏幕 然后从中生成一个我可以扫描的 RGB 值数组 我最初从 Ge
    • 空基类优化

      引用 C 标准第 1 8 节中的两句话 对象是一个存储区域 基类子对象的大小可能为零 我不认为存储区域的大小可以为零 这意味着某些基类子对象实际上并不是对象 这些说法如何共存 对于 区域 的定义进行哲学争论是没有必要的 1 8 5 说 除非
    • 使一个条形的边框比其他条形更暗

      我在 ggplot2 中创建了一个条形图 其中 3 个条代表做出 3 个选择中的 1 个的概率 我想添加一个bolded显示正确响应的条形周围的边框 我还没有找到办法做到这一点 我可以改变所有条形的颜色 但不仅仅是一个 所附图像显示了我生成
    • 为什么 Spark Cassandra 连接器会失败并出现 NoHostAvailableException?

      我在让 Spark Cassandra Connector 在 Scala 中工作时遇到问题 我正在使用这些版本 斯卡拉2 10 4 火花核心 1 0 2 cassandra thrift 2 1 0 我安装的cassandra是v2 1
    • 升压 asio io_service.run()

      我只是想看一下 asio聊天服务器示例 我的问题是关于他们的使用情况io service run 功能 的文档io service run 函数说 run 函数会阻塞 直到所有工作都完成并且没有 更多处理程序被调度 或者直到 io serv
    • 使用 g++ 与 pragma 链接

      在 Visual C 中 可以通过以下方式链接到代码本身中的库 pragma comment lib libname lib g 中可能有类似的东西吗 The 升压配置库对自动链接有一些支持 使用特定编译器的相关编译器特定代码 然而 文档指
    • 如何在序列化 OData 响应时忽略 Null 值

      我需要从响应中完全省略空值字段 我可以通过修改正常 webapi 响应的 JsonFormatter 序列化设置来做到这一点 config Formatters JsonFormatter SerializationSettings Nul
    • 哪款相机会在移动设备中打开 getUserMedia API?前部还是后部?

      在桌面上使用getUserMedia API访问摄像头时 会打开网络摄像头 当然这对视频通信有帮助 但是在移动设备上使用时会调用哪个摄像头 前置摄像头还是后置摄像头 是否需要代码来选择相机 有一种解决方案 用户可以选择其中一台摄像机 使用
    • 从 PHP 检查 Google 地图点是否在多边形中

      我一直在寻找一种方法来检查一个点是否是多边形的一部分 该多边形是从文件加载的 与这个问题相关的所有答案都是用javascript解决的 但我需要在服务器端执行此操作 这是因为结果不需要作为 Web 客户端显示给用户 而是需要存储并稍后用作参
    • 我想使用 EBImage 包,但它说它不适用于我的 R 版本

      install packages 中的警告 软件包 EBImage 不可用 适用于 R 版本 3 2 4 修订版 现在该怎么办有什么帮助 请指导我 EBImage作为 Bioconductor 项目的一部分分发 要安装包 请使用 sourc
    • MongoDB 不区分大小写的键搜索

      我可以不区分大小写地查询值 但我想不敏感地查询键 以便用户可以以全部小写形式键入它们 这不起作用 因为它不是有效的 JSON lastName i Jones 除了将新的键集合作为值之外 是否有我可以使用的策略 目前还没有办法做到这一点 M
    • 无法在 Google App Engine 中调试 dev_appserver

      我不认为这个问题是 PyDev 所独有的 而是任何 python 调试器所独有的 使用 Eclipse 和 pydev 我无法在 dev appserver Google 应用程序引擎开发服务器 进程中中断 WSGI 处理程序 我不是 10