Depuración de errores de la aplicación

En producción

No ejecute el servidor de desarrollo, ni habilite el depurador incorporado, en un entorno de producción. El depurador permite ejecutar código Python arbitrario desde el navegador. Está protegido por un pin, pero no se debe confiar en eso para la seguridad.

Utiliza una herramienta de registro de errores, como Sentry, como se describe en Herramientas de registro de errores, o activa el registro y las notificaciones como se describe en Registro.

Si tiene acceso al servidor, podría añadir algún código para iniciar un depurador externo si request.remote_addr coincide con su IP. Algunos depuradores IDE también tienen un modo remoto para que los puntos de interrupción en el servidor puedan ser interactuados localmente. Habilite un depurador sólo temporalmente.

El depurador incorporado

El servidor de desarrollo incorporado de Werkzeug proporciona un depurador que muestra un rastreo interactivo en el navegador cuando se produce un error no manejado durante una solicitud. Este depurador sólo debe utilizarse durante el desarrollo.

captura de pantalla del depurador en acción

Advertencia

El depurador permite ejecutar código Python arbitrario desde el navegador. Está protegido por un pin, pero sigue representando un riesgo de seguridad importante. No ejecute el servidor de desarrollo o el depurador en un entorno de producción.

Para habilitar el depurador, ejecuta el servidor de desarrollo con el entorno establecido en development. Esto pone a Flask en modo de depuración, lo que cambia la forma en que maneja algunos errores, y habilita el depurador y el recargador.

$ flask --app hello --env development run

FLASK_ENV también se puede establecer como una variable de entorno. Cuando se ejecuta desde el código de Python, pasar debug=True habilita el modo de depuración, que es mayormente equivalente. El modo de depuración se puede controlar por separado del entorno con la opción --debug/--no-debug o la variable de entorno FLASK_DEBUG.

app.run(debug=True)

Servidor de desarrollo y Interfaz de línea de comandos tienen más información sobre la ejecución del depurador, el modo de depuración y el modo de desarrollo. Puede encontrar más información sobre el depurador en la documentación de Werkzeug.

Depuradores externos

Los depuradores externos, como los proporcionados por los IDEs, pueden ofrecer una experiencia de depuración más potente que el depurador incorporado. También pueden utilizarse para recorrer el código durante una solicitud antes de que se produzca un error, o si no se produce ningún error. Algunos incluso tienen un modo remoto para que puedas depurar el código que se ejecuta en otra máquina.

Cuando se utiliza un depurador externo, la aplicación debe seguir en modo de depuración, pero puede ser útil desactivar el depurador y el recargador integrados, que pueden interferir.

$ flask --app hello --env development run --no-debugger --no-reload

Cuando se ejecuta desde Python:

app.run(debug=True, use_debugger=False, use_reloader=False)

Desactivar estos no es necesario, un depurador externo seguirá funcionando con las siguientes advertencias. Si el depurador incorporado no está deshabilitado, capturará las excepciones no manejadas antes de que el depurador externo pueda hacerlo. Si el recargador no está deshabilitado, podría causar una recarga inesperada si el código cambia durante la depuración.