Débogage des erreurs d’application

En cours de production

N’exécutez pas le serveur de développement ou n’activez pas le débogueur intégré dans un environnement de production. Le débogueur permet d’exécuter du code Python arbitraire depuis le navigateur. Il est protégé par un PIN, mais il ne faut pas s’y fier pour la sécurité.

Utilisez un outil de journalisation des erreurs, tel que Sentry, comme décrit dans Outils de journalisation des erreurs, ou activez la journalisation et les notifications comme décrit dans Journalisation.

Si vous avez accès au serveur, vous pouvez ajouter du code pour lancer un débogueur externe si request.remote_addr correspond à votre IP. Certains débogueurs IDE disposent également d’un mode distant, ce qui permet d’interagir localement avec les points d’arrêt sur le serveur. N’activez le débogueur que temporairement.

Le débogueur intégré

Le serveur de développement intégré de Werkzeug fournit un débogueur qui affiche un retour de trace interactif dans le navigateur lorsqu’une erreur non gérée survient lors d’une requête. Ce débogueur ne doit être utilisé que pendant le développement.

capture d'écran du débogueur en action

Avertissement

Le débogueur permet d’exécuter du code Python arbitraire depuis le navigateur. Il est protégé par un PIN, mais représente tout de même un risque de sécurité important. N’exécutez pas le serveur de développement ou le débogueur dans un environnement de production.

Pour activer le débogueur, exécutez le serveur de développement avec la variable d’environnement FLASK_ENV définie sur development. Cela met Flask en mode débogage, ce qui change la façon dont il gère certaines erreurs, et active le débogueur et le reloader.

$ export FLASK_ENV=development
$ flask run

FLASK_ENV ne peut être défini que comme une variable d’environnement. Lorsque vous exécutez du code Python, passer debug=True active le mode débogage, ce qui est pratiquement équivalent. Le mode débogage peut être contrôlé séparément de FLASK_ENV avec la variable d’environnement FLASK_DEBUG.

app.run(debug=True)

Development Server et Command Line Interface ont plus d’informations sur l’exécution du débogueur, le mode débogage et le mode développement. Plus d’informations sur le débogueur peuvent être trouvées dans la documentation Werkzeug.

Débogueurs externes

Les débogueurs externes, tels que ceux fournis par les IDE, peuvent offrir une expérience de débogage plus puissante que le débogueur intégré. Ils peuvent également être utilisés pour parcourir le code pendant une requête avant qu’une erreur ne soit levée, ou si aucune erreur n’est levée. Certains disposent même d’un mode distant qui vous permet de déboguer du code exécuté depuis une autre machine.

Lorsque vous utilisez un débogueur externe, l’application doit toujours être en mode débogage, mais il peut être utile de désactiver le débogueur et le reloader intégrés, qui peuvent interférer.

Lorsqu’il est exécuté à partir de la ligne de commande :

$ export FLASK_ENV=development
$ flask run --no-debugger --no-reload

Lors de l’exécution à partir de Python :

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

Il n’est pas nécessaire de les désactiver, un débogueur externe continuera à fonctionner avec les réserves suivantes. Si le débogueur intégré n’est pas désactivé, il attrapera les exceptions non gérées avant le débogueur externe. Si le reloader n’est pas désactivé, il peut provoquer un rechargement inattendu si le code change pendant le débogage.