Google compute engine Google云调试器不适用于Python AppEngine管理的虚拟机

Google compute engine Google云调试器不适用于Python AppEngine管理的虚拟机,google-compute-engine,google-app-engine-python,managed-vm,google-cloud-debugger,Google Compute Engine,Google App Engine Python,Managed Vm,Google Cloud Debugger,正如今天在中宣布的,我现在可以使用Python调试器了 我在GCE映像上运行AppEngine管理的虚拟机,因此我遵循的是。我已经修改了Dockerfile,添加了pip安装google python云调试器(我还尝试将该库直接安装到我的app/lib中,它包含在我的sys.path中): 然后我修改了main.py以启用调试器: try: import googleclouddebugger googleclouddebugger.AttachDebugger() except Imp

正如今天在中宣布的,我现在可以使用Python调试器了

我在GCE映像上运行AppEngine管理的虚拟机,因此我遵循的是。我已经修改了Dockerfile,添加了
pip安装google python云调试器
(我还尝试将该库直接安装到我的app/lib中,它包含在我的sys.path中):

然后我修改了main.py以启用调试器:

try:
  import googleclouddebugger
  googleclouddebugger.AttachDebugger()
except ImportError:
  pass
不幸的是,当我提交代码时,运行
gcloud preview app gen repo info file
,然后推送它,我无法使用调试器。当我转到时,它会在右侧加载我的github存储库,但我在左侧导航区域看到一条错误消息:

调试不可用。您可以调试正在运行的Java应用程序 在应用程序引擎或计算引擎上


有什么想法可能出错,或者如何调试调试器吗?

编辑:尽管此答案的线程包含有用的调试步骤,但问题的根本原因已在我发布的另一个答案中解释

这里可能发生了两件事:

第一个是作为普通用户运行的pip命令想要访问系统安装位置,并且在没有root权限的情况下失败。尝试
sudopip安装…
pip安装-t lib/googlepython云调试器


发生的第二件事是,您的代码正在捕获一个重要的错误,而仅仅是
pass
ing。作为一名python演说家,我以前见过这种结构,老实说,如果我见过这种结构的话,那就是一把猎枪。
pass
有什么作用?如果您采取这样的预防措施,错误日志会很快显示问题。

尽管另一个线程确实提供了很多机会来遵循调试中常见的最佳实践,但解决方案比我们任何一方想象的要简单得多。您看到的错误很可能是由于使用python的托管虚拟机尚未成为云调试器的受支持平台所致

然而,随着云调试器服务的增长,以及使用python的云调试器的实际情况,这当然有可能发生变化


如果您注意到缺少某些功能,并希望让我们知道您和其他可能引发此问题的人对此感兴趣,请随时在中提交功能请求。

检查Python云调试器是否正确安装的最简单方法是尝试在Python交互控制台中导入它:

docker run -i -t cdbgtest bin/bash
python
import googleclouddebugger
print googleclouddebugger.__version__

我猜在你的例子中,
pip安装googlepython云调试器
失败了。如果是这样的话,可能是因为过时的
pip
。用
sudo easy\u install pip
安装
pip
可以解决这个问题。

对于您提到的两个问题,我一直在逐字阅读上面的谷歌文档。(非sudo的pip和安静的pass)那么,也许值得告诉文档编写者也修复该文档?对于安静通行证,我添加了一个日志语句,但我不知道在哪里可以看到它。它不在每个servlet日志中(因为它在wsgi服务器初始化之前),也不在VM实例的串行控制台输出中。在我的main.py中还有其他一些我在prod中也从未见过的日志。就pip而言,我已经尝试将googleclouddebugger库安装到我推送的lib/中,正如我在原始问题中提到的。它不起作用,但也许它正在取得更大的进步?似乎每个请求都会立即发送500秒(没有任何日志输出)。“/mapreduce/controller_回调”请求返回200,但它们通过我的app.yaml通过不同的wsgi服务器/模块进行路由,因此我不确定这是否相关。如果我在我的应用程序直接运行500秒时打开云调试器,它会继续告诉我相同的错误消息:“调试不可用”,如果使用这样的文件夹,您需要将
lib/
添加到python路径中。
sudo
是否有助于使模块全局可见?我将其安装到了一个推送的lib/目录中,该目录中已经有我成功使用的其他库(即,它已经在我的路径中)。我对这种方法很满意,所以我从未尝试过sudo。事实上,在从lib/加载之后,500秒的行为发生了变化,我假设它在lib/中被正确地找到了,并且没有特别的理由尝试sudo…?为什么500秒被服务?某处应该有木头。你能检查一下承载Docker进程本身的GCE实例吗?啊,我原以为“在Google计算引擎实例上运行的任何Python应用程序”都捕捉到了“在GCE实例上运行的Python托管VM应用程序”的情况,但看看Java支持的平台就可以清楚地看出托管VM还不受支持。谢谢So提到:“在这个版本中,云调试器现在可用于以下语言和平台:在App Engine上运行的Python应用程序、App Engine管理的VM和Compute Engine”。然而,我无法让调试器找到可调试的应用程序,官方文档仍然说“在App Engine上运行的Python App Engine应用程序。”(不要提托管虚拟机)那么…我想这篇博文是错的?
docker run -i -t cdbgtest bin/bash
python
import googleclouddebugger
print googleclouddebugger.__version__