2010-12-21 27 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