2010-12-21 103 views
18

在本地使用AppEngine(即使用dev_appserver.py)时,有没有做一步一步的调试?使用logging.info()或类似的函数来显示代码中所有变量的值并确定错误的位置是过时的方式。AppEngine:分步调试

回答

8

如果本地的AppEngine过程是一个普通的Python过程中,你有两个选择:

  1. 在代码中,地方 “代码断点”:import pdb; pdb.set_trace()。正常情况下运行dev_appserver.py,python调试器在到达代码行时会中断。

  2. 在pdb中运行dev_appserver.py。从外壳:$ python -m pdb dev_appserver.py。要设置断点,请使用命令b filename.py:linenumber。然后使用c命令继续。见http://docs.python.org/library/pdb.html#debugger-commands

pdb module documentation

+1

第一个没有为我工作。它只是不停止,我似乎得到BdbQuit错误! – Rafid 2010-12-24 10:25:36

+0

第二个为我工作,但它不方便。它从一开始就打破了,而我想在我的代码的某个点上有一个断点。 – Rafid 2010-12-24 10:25:58

+0

要设置断点,请使用命令“b filename.py:linenumber”。然后使用“c”命令继续。请参阅http://docs.python.org/library/pdb.html#debugger-commands – codeape 2010-12-25 18:45:20

15

要扩大codeape的答案的第一个建议一点点:因为dev_appserver.py用标准输入,标准输出和标准错误扼杀,需要更多的工作来设置“代码断点”。这是否把戏对我来说:

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调试器中。

+0

你能解释一下你的代码吗?为什么这里需要setattr?如果我不把这个代码呢? – Rafid 2010-12-24 10:15:23

+0

我试过你的解决方案,但它不适合我。我收到“非法查找”错误。 – Rafid 2010-12-24 10:26:39

+0

for循环只是写入''sys.stdin = sys .__ stdin__; sys.stdout = sys .__ stdout__; sys.stderr = sys .__ stderr__'' – codeape 2010-12-25 18:48:52

3

PyCharm Professional Edition启用开箱即用的逐步调试。

如果您愿意经历几个设置步骤,可以将免费版本PyCharm Community Edition配置为使用Google App Engine python。你不会得到PyCharm专业版的所有优势,比如部署,但你可以一步一步地进行调试,并获得代码导航和自动完成工作。

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

  • 脚本:App Engine的dev_appserver.py
  • 脚本参数:--automatic_restart=no --max_module_instances="default:1" .
  • 工作目录:你的基地项目文件夹(其中一个包含app.yaml文件)

有关更多详细说明,说明以及如何在aCyCharm CE pr中完成代码完成工作oject,请参阅http://www.enkisoftware.com/devlogpost-20141231-1-Python_Google_App_Engine_debugging_with_PyCharm_CE.html

如果你在Windows上工作,你要使用PyTools(微软的Visual Studio社区)调试的Python GAE,看到http://www.enkisoftware.com/devlogpost-20140814-1-Python_Google_App_Engine_debugging_with_PyTools.html