Python AppEngine:逐步调试

Python AppEngine:逐步调试,python,debugging,google-app-engine,Python,Debugging,Google App Engine,在本地使用AppEngine时(即使用dev_appserver.py),是否需要进行逐步调试?使用logging.info()或类似函数来显示代码中所有变量的值并确定错误所在,这种方式太旧了。Eclipse PyDev支持调试和AppEngine 如果本地appengine进程是一个普通的python进程,那么您有两个选项: 在代码中,放置“代码断点”:importpdb;pdb.set_trace()。正常运行dev_appserver.py,python调试器到达代码行时将中断 在pdb中

在本地使用AppEngine时(即使用dev_appserver.py),是否需要进行逐步调试?使用logging.info()或类似函数来显示代码中所有变量的值并确定错误所在,这种方式太旧了。

Eclipse PyDev支持调试和AppEngine


如果本地appengine进程是一个普通的python进程,那么您有两个选项:

  • 在代码中,放置“代码断点”:
    importpdb;pdb.set_trace()
    。正常运行
    dev_appserver.py
    ,python调试器到达代码行时将中断


  • 在pdb中运行dev_appserver.py。从shell:
    $python-mpdb dev_appserver.py
    。要设置断点,请使用命令
    b filename.py:linenumber
    。然后使用
    c
    命令继续。看


  • 请参阅。

    对codeape的答案的第一个建议进行一点扩展:因为dev_appserver.py在stdin、stdout和stderr上乱七八糟,所以需要做更多的工作来设置“代码断点”。这对我来说是个诀窍:

    import sys
    for attr in ('stdin', 'stdout', 'stderr'):
        setattr(sys, attr, getattr(sys, '__%s__' % attr))
    import pdb
    pdb.set_trace()
    
    您必须从命令行而不是通过GUI应用程序引擎启动器运行
    dev_appserver.py
    。当执行
    pdb.set_trace()
    行时,此时您将被放入
    pdb
    调试器。

    启用开箱即用的分步调试

    如果您愿意经历一些设置步骤,那么免费版本PyCharm Community Edition也可以配置为与Google应用程序引擎python一起使用。您不会获得PyCharm Professional Edition的所有优点,例如部署,但您可以一步一步地进行调试,并获得代码导航和自动完成功能

    要启用调试,请通过设置编辑PyCharm运行/调试配置:

    • 脚本:appengine的dev_appserver.py
    • 脚本参数:
      --automatic\u restart=no--max\u module\u instances=“默认值:1”。
    • 工作目录:基本项目文件夹(包含app.yaml文件的文件夹)
    有关更详细的说明、解释以及如何在aup Pyce项目中完成代码,请参阅


    如果您在Windows上工作,并且希望使用PyTools(Microsoft Visual Studio社区)为GAE调试python,请参见

    是的,您现在可以轻松地完成Visual Studio代码的调试

    首先,您需要安装python模块debugpy

    pip安装debugpy
    
    然后为VisualStudio代码安装Python扩展

    现在使用以下命令启动服务器:

    cd/path/to/python/project
    python-m debugpy--listen 5678/path/to/googlecloudsdk/platform/google_appengine/dev_appserver.py。
    
    在VisualStudioCodeDebug中,在“lauch.json”内创建一个配置


    之后,您只需设置断点,然后单击运行“Python:Attach”。

    您能再解释一下您的a代码吗?为什么这里需要设置属性?如果我不写这个代码呢?我试过你的解决方案,但对我无效。我得到“非法搜索”错误。for循环只是写入sys.stdin=sys的快捷方式;sys.stdout=sys.\u stdout\u;sys.stderr=sys.\uu stderr\uuuHandy factoid:这也适用于调试Python GUI应用程序!第一个不适合我。它只是没有停止,我似乎得到BdbQuit错误!第二个对我有用,但不方便。它从一开始就中断了,而我希望在代码的某个点上有一个断点。要设置断点,请使用命令“b filename.py:linenumber”。然后使用“c”命令继续。为了确定要运行哪个命令,我只需在AppEngineLauncher中启动应用程序,并在进程列表中对其执行grep操作:
    ps x | grep dev_appserver
    ,然后停止它并从命令行启动它,但我直接在python命令之后添加
    -m pdb
    {
        "name": "Python: Attach",
        "type": "python",
        "request": "attach",
        "connect": {
          "host": "localhost",
          "port": 5678
        }
      }