2010-12-21 25 views
18

Al trabajar con AppEngine localmente (es decir, mediante el uso de dev_appserver.py), ¿hay alguna forma de realizar una depuración paso a paso? Es una forma muy antigua de usar logging.info() o funciones similares para mostrar los valores de todas las variables en el código y decidir dónde está el error.AppEngine: Depuración paso a paso

Respuesta

8

Si el proceso appengine local es un proceso normal de Python tiene un par de opciones:

  1. En su código, el lugar "puntos de ruptura de códigos": import pdb; pdb.set_trace(). Ejecute dev_appserver.py de forma normal, y el depurador de python se interrumpirá cuando llegue a la línea con el código.

  2. Ejecute dev_appserver.py en pdb. Desde el shell: $ python -m pdb dev_appserver.py. Para establecer un punto de interrupción, use el comando b filename.py:linenumber. Luego use el comando c para continuar. Ver http://docs.python.org/library/pdb.html#debugger-commands

ver la pdb module documentation.

+1

La primera no funcionó para mí. ¡Simplemente no se detiene y parece que tengo el error BdbQuit! – Rafid

+0

El segundo me sirvió, pero no es conveniente.Se rompe desde el principio, mientras que quiero tener un punto de quiebre en un cierto punto de mi código. – Rafid

+0

Para establecer un punto de interrupción, use el comando "b filename.py:linenumber". Luego use el comando "c" para continuar. Consulte http://docs.python.org/library/pdb.html#debugger-commands – codeape

15

Para ampliar un poco en la primera sugerencia de la respuesta de codeape: Debido dev_appserver.py mucks unos con stdin, stdout y stderr, se necesita un poco más de trabajo para establecer un "código de punto de interrupción". Esto hace el truco para mí:

import sys 
for attr in ('stdin', 'stdout', 'stderr'): 
    setattr(sys, attr, getattr(sys, '__%s__' % attr)) 
import pdb 
pdb.set_trace() 

Vas a tener que correr dev_appserver.py desde la línea de comandos en lugar de a través de la interfaz gráfica de usuario de App Engine Launcher. Cuando se ejecuta la línea pdb.set_trace(), se colocará en el depurador pdb en ese punto.

+0

¿Puedes explicar un poco más tu código? ¿Por qué el setattr es necesario aquí? ¿Qué pasa si no coloco este código? – Rafid

+0

Intenté su solución pero no funcionó para mí. Obtengo un error de "búsqueda ilegal". – Rafid

+0

El bucle for es simplemente un atajo para escribir '' sys.stdin = sys .__ stdin__; sys.stdout = sys .__ stdout__; sys.stderr = sys .__ stderr__'' – codeape

3

PyCharm Professional Edition permite la eliminación de errores paso a paso.

Si está dispuesto a realizar algunos pasos de configuración, la versión gratuita, PyCharm Community Edition, se puede configurar para que funcione con Google App Engine python también. No obtendrá todas las ventajas de PyCharm Professional Edition, como la implementación, pero podrá realizar la depuración paso a paso y obtener la navegación de código y el trabajo de autocompletado.

Para habilitar la depuración, editar la configuración PyCharm Ejecutar/Depurar estableciendo:

  • de guión: dev_appserver.py de App Engine
  • parámetros Guión: --automatic_restart=no --max_module_instances="default:1" .
  • Directorio de trabajo: la carpeta del proyecto de base (la uno que contiene el archivo app.yaml)

Para obtener instrucciones más detalladas, explicaciones y cómo obtener la finalización del código trabajando en un PyCharm CE pr objeto, ver http://www.enkisoftware.com/devlogpost-20141231-1-Python_Google_App_Engine_debugging_with_PyCharm_CE.html.

Si está trabajando en Windows y que desea utilizar PyTools (Microsoft Visual Studio Comunidad) al pitón de depuración para GAE, ver http://www.enkisoftware.com/devlogpost-20140814-1-Python_Google_App_Engine_debugging_with_PyTools.html

Cuestiones relacionadas