J'ai donc commencé à apprendre à coder en Python et plus tard Django . Les premières fois, il était difficile de regarder les traces et de découvrir ce que j'avais fait de mal et où était l'erreur de syntaxe. Un certain temps s'est écoulé maintenant et en cours de route, je suppose que j'ai eu une routine de débogage de mon code Django. Comme cela a été fait au début de mon expérience de codage, je me suis assis et je me suis demandé si comment je faisais cela était inefficace et pourrait être fait plus rapidement. Je parviens généralement à trouver et à corriger les bogues dans mon code, mais je me demande si je devrais le faire plus rapidement?
J'utilise généralement les informations de débogage que Django donne lorsqu'il est activé. Lorsque les choses finissent comme je le pensais, je casse beaucoup le flux de code avec une erreur de syntaxe et regarde les variables à ce point du flux pour comprendre, où le code fait autre chose que ce que je voulais.
Mais cela peut-il être amélioré? Existe-t-il de bons outils ou de meilleures façons de déboguer votre code Django?
Réponses:
Il existe de nombreuses façons de le faire, mais le plus simple est d'utiliser simplement le débogueur Python . Ajoutez simplement la ligne suivante à une fonction de vue Django:
ou
Si vous essayez de charger cette page dans votre navigateur, le navigateur se bloque et vous obtenez une invite pour continuer le débogage sur le code d'exécution réel.
Cependant, il existe d'autres options (je ne les recommande pas):
Mais le débogueur Python (pdb) est fortement recommandé pour tous les types de code Python. Si vous êtes déjà dans pdb, vous voudrez également jeter un œil à IPDB qui utilise ipython pour le débogage.
Certaines extensions plus utiles de pdb sont
pdb ++ , suggéré par Antash .
pudb , suggéré par PatDuJour .
Utilisation du débogueur Python dans Django , suggéré par Seafangs .
la source
manage.py runserver --pdb
etmanage.py test --pdb
commande.ipython
aussi.Ipdb
, qui vient avecipython
, propose la complétion des onglets, la syntaxe colorée, et plus encore :-).J'aime vraiment le débogueur interactif de Werkzeug . C'est similaire à la page de débogage de Django, sauf que vous obtenez un shell interactif à tous les niveaux du traceback. Si vous utilisez le extensions django , vous obtenez un
runserver_plus
commande de gestion qui démarre le serveur de développement et vous donne le débogueur de Werkzeug sur les exceptions.Bien sûr, vous ne devez l'exécuter que localement, car cela donne à toute personne disposant d'un navigateur le droit d'exécuter du code python arbitraire dans le contexte du serveur.
la source
python 3.3
Un petit quickie pour les balises de modèle:
Maintenant, à l'intérieur d'un modèle, vous pouvez le faire
{{ template_var|pdb }}
et entrer une session pdb (étant donné que vous exécutez le serveur de développement local) où vous pouvez inspecterelement
le contenu de votre cœur.C'est une très belle façon de voir ce qui est arrivé à votre objet lorsqu'il arrive au modèle.
la source
Il existe quelques outils qui coopèrent bien et peuvent faciliter votre tâche de débogage.
Le plus important est la barre d'outils de débogage de Django .
Ensuite, vous avez besoin d'une bonne journalisation à l'aide de la fonction de journalisation Python . Vous pouvez envoyer la sortie de journalisation vers un fichier journal, mais une option plus simple consiste à envoyer la sortie de journal à firepython . Pour l'utiliser, vous devez utiliser le navigateur Firefox avec le firebug extension . Firepython inclut un plugin Firebug qui affichera toute journalisation côté serveur dans un onglet Firebug.
Firebug lui-même est également essentiel pour déboguer le côté Javascript de toute application que vous développez. (En supposant que vous ayez du code JS bien sûr).
J'ai aussi aimé django-viewtools pour déboguer des vues de manière interactive à l'aide de pdb, mais je ne l'utilise pas beaucoup.
Il existe des outils plus utiles comme le bulldozer pour traquer les fuites de mémoire (il y a aussi d'autres bonnes suggestions données dans les réponses ici sur SO pour le suivi de la mémoire).
la source
J'utilise PyCharm (même moteur pydev qu'eclipse). M'aide vraiment à pouvoir visuellement parcourir mon code et voir ce qui se passe.
la source
Presque tout a été mentionné jusqu'à présent, donc je vais seulement ajouter qu'au lieu d'
pdb.set_trace()
un, on peut utiliser ipdb.set_trace () qui utilise iPython et est donc plus puissant (saisie semi-automatique et autres goodies). Cela nécessite un package ipdb, vous n'avez donc qu'àpip install ipdb
la source
J'ai poussé
django-pdb
vers PyPI . C'est une application simple qui signifie que vous n'avez pas besoin de modifier votre code source à chaque fois que vous souhaitez pénétrer dans pdb.L'installation est juste ...
pip install django-pdb
'django_pdb'
à votreINSTALLED_APPS
Vous pouvez maintenant exécuter:
manage.py runserver --pdb
pour pénétrer dans pdb au début de chaque vue ...Et exécutez:
manage.py test --pdb
pour pénétrer dans pdb sur les échecs / erreurs de test ...Le projet est hébergé sur GitHub , les contributions sont bien sûr les bienvenues.
la source
Le moyen le plus simple de déboguer python - en particulier pour les programmeurs habitués à Visual Studio - est d'utiliser PTVS (Python Tools for Visual Studio). Les étapes sont simples:
Si vous souhaitez déboguer Django à l'aide de PTVS, vous devez procéder comme suit:
la source
J'utilise pyDev avec Eclipse vraiment bien, je fixe des points d'arrêt, j'entre dans le code, je vois les valeurs de tous les objets et variables, j'essaye.
la source
J'utilise PyCharm et je le maintiens tout le long. Cela m'a coûté un peu mais je dois dire que l'avantage que j'en retire est inestimable. J'ai essayé de déboguer à partir de la console et je donne beaucoup de crédit aux gens qui peuvent le faire, mais pour moi, pouvoir déboguer visuellement ma ou mes applications est génial.
Je dois dire cependant que PyCharm prend beaucoup de mémoire. Mais là encore, rien de bon n'est gratuit dans la vie. Ils viennent tout juste de sortir avec leur dernière version 3. Elle fonctionne également très bien avec Django, Flask et Google AppEngine. Donc, dans l'ensemble, je dirais que c'est un excellent outil pratique pour tout développeur.
Si vous ne l'utilisez pas encore, je vous recommande d'obtenir la version d'essai pendant 30 jours pour jeter un œil à la puissance de PyCharm. Je suis sûr qu'il existe également d'autres outils, comme Aptana. Mais je suppose que j'aime aussi l'apparence de PyCharm. Je me sens très à l'aise pour déboguer mes applications là-bas.
la source
Parfois, lorsque je veux explorer une méthode particulière et que l'invocation de pdb est trop lourde, j'ajoute:
IPython.embed()
démarre un shell IPython qui a accès aux variables locales à partir du point où vous l'appelez.la source
from IPython import embed
, puis chaque fois que je veux ajouter rapidement un point d'arrêt dans le code, j'écrisembed()
. Gain de temps. Pour éviter de rester coincé dans les boucles pour toujours, je le faisembed();exit();
pudb
etdebugger;
en JavaScript) dans le fichier que je modifie. Après avoir terminé, jedd
supprime simplement la ligne entière pour supprimer le point d'arrêt. Cela évite le risque de valider la ligne d'importation du débogueur dans le contrôle de version ou d'avoir à prédéfinir l'importation en premier en haut du fichier.De mon point de vue, nous pourrions décomposer les tâches de débogage de code courantes en trois modèles d'utilisation distincts:
assert False
l'endroit où vous souhaitez vous arrêter.import pudb; pudb.set_trace()
. Le principal avantage par rapport à [i] pdb est que PuDB (tout en ayant l'air des années 80) facilite la définition d'expressions de montre personnalisées. Et le débogage d'un tas de boucles imbriquées est beaucoup plus simple avec une interface graphique.Ah, oui, les problèmes des modèles. Le problème le plus courant (pour moi et mes collègues) est un mauvais contexte: soit vous n'avez pas de variable, soit votre variable n'a pas d'attribut. Si vous utilisez la barre d'outils de débogage , inspectez simplement le contexte dans la section "Modèles" ou, si cela ne suffit pas, définissez une rupture dans le code de vos vues juste après que votre contexte soit rempli.
Alors ça va.
la source
import pudb;pu.db
Je recommande fortement epdb (Extended Python Debugger).
https://bitbucket.org/dugan/epdb
Une chose que j'aime avec epdb pour le débogage de Django ou d'autres serveurs Web Python est la commande epdb.serve (). Cela définit une trace et la sert sur un port local auquel vous pouvez vous connecter. Cas d'utilisation typique:
Je pense que je veux passer par étape. Je vais insérer ce qui suit au point où je veux définir la trace.
Une fois ce code exécuté, j'ouvre un interpréteur Python et me connecte à l'instance de desserte. Je peux analyser toutes les valeurs et parcourir le code en utilisant les commandes pdb standard comme n, s, etc.
Et des tonnes de plus que vous pouvez à tout moment apprendre à taper l'aide epdb.
Si vous souhaitez servir ou vous connecter à plusieurs instances epdb en même temps, vous pouvez spécifier le port sur lequel écouter (la valeur par défaut est 8080). C'est à dire
l'hôte par défaut est «localhost» s'il n'est pas spécifié. Je l'ai ajouté ici pour montrer comment vous pouvez l'utiliser pour déboguer autre chose qu'une instance locale, comme un serveur de développement sur votre réseau local. Évidemment, si vous faites cela, faites attention à ce que la trace définie ne parvienne jamais sur votre serveur de production!
En bref, vous pouvez toujours faire la même chose que la réponse acceptée avec epdb (
import epdb; epdb.set_trace()
) mais je voulais mettre en évidence la fonctionnalité de service car je l'ai trouvée si utile.la source
Je viens de trouver wdb ( http://www.rkblog.rk.edu.pl/w/p/debugging-python-code-browser-wdb-debugger/?goback=%2Egde_25827_member_255996401 ). Il a une interface utilisateur / GUI assez agréable avec toutes les cloches et les sifflets. L'auteur dit ceci à propos de wdb -
"Il existe des IDE comme PyCharm qui ont leurs propres débogueurs. Ils offrent un ensemble de fonctionnalités similaires ou égales ... Cependant, pour les utiliser, vous devez utiliser ces IDE spécifiques (et certains d'entre eux ne sont pas gratuits ou peuvent ne pas être disponibles pour tous) Choisissez l'outil adapté à vos besoins. "
Je pensais que je le transmettrais.
Également un article très utile sur les débogueurs python: https://zapier.com/engineering/debugging-python-boss/
Enfin , si vous souhaitez voir une belle impression graphique de votre pile d'appels dans Django, consultez: https://github.com/joerick/pyinstrument . Ajoutez simplement pyinstrument.middleware.ProfilerMiddleware à MIDDLEWARE_CLASSES, puis ajoutez? Profile à la fin de l'URL de la demande pour activer le profileur.
Peut également exécuter pyinstrument à partir de la ligne de commande ou en l'important en tant que module.
la source
Ajoutez
import pdb; pdb.set_trace()
oubreakpoint()
(forme python3.7) à la ligne correspondante dans le code Python et exécutez-le. L'exécution s'arrêtera avec un shell interactif. Dans le shell, vous pouvez exécuter du code Python (c'est-à-dire imprimer des variables) ou utiliser des commandes telles que:c
continuer l'exécutionn
passer à la ligne suivante dans la même fonctions
passer à la ligne suivante dans cette fonction ou une fonction appeléeq
quitter le débogueur / exécutionVoir également: https://poweruser.blog/setting-a-breakpoint-in-python-438e23fe6b28
la source
L'une de vos meilleures options pour déboguer le code Django est via wdb: https://github.com/Kozea/wdb
Installez et exécutez le serveur, et dans votre code ajoutez:
Selon l'auteur, les principales différences en ce qui
pdb
concerne:Il a une excellente interface utilisateur basée sur un navigateur. Une joie à utiliser! :)
la source
J'utilise PyCharm et différents outils de débogage. Ayez également de beaux articles sur la configuration facile de ces choses pour les novices. Vous pouvez commencer ici. Il raconte le débogage PDB et GUI en général avec les projets Django. J'espère que quelqu'un en bénéficierait.
la source
Si vous utilisez Aptana pour le développement de django, regardez ceci: http://www.youtube.com/watch?v=qQh-UQFltJQ
Sinon, envisagez de l'utiliser.
la source
La plupart des options sont déjà mentionnées. Pour imprimer le contexte du modèle, j'ai créé une bibliothèque simple pour cela. Voir https://github.com/edoburu/django-debugtools
Vous pouvez l'utiliser pour imprimer le contexte du modèle sans aucune
{% load %}
construction:Il utilise un format d'impression personnalisé pour afficher les variables dans une
<pre>
balise.la source
Je trouve que Visual Studio Code est génial pour le débogage des applications Django. Les paramètres standard de launch.json de python s'exécutent
python manage.py
avec le débogueur attaché, vous pouvez donc définir des points d'arrêt et parcourir votre code comme vous le souhaitez.la source
Pour ceux qui peuvent accidentellement ajouter pdb dans des validations en direct, je peux suggérer cette extension de la réponse #Koobz:
la source
D'après ma propre expérience, il y a deux façons:
utilisez ipdb , qui est un débogueur amélioré comme pdb.
import ipdb;ipdb.set_trace()
oubreakpoint()
(à partir de python3.7)utilisez le shell django, utilisez simplement la commande ci-dessous. Ceci est très utile lorsque vous développez une nouvelle vue.
python manage.py shell
la source
je suggère fortement d'utiliser PDB.
Vous pouvez inspecter toutes les valeurs des variables, intervenir dans la fonction et bien plus encore. https://docs.python.org/2/library/pdb.html
pour vérifier tous les types de requêtes, de réponses et de hits sur la base de données. J'utilise django-debug-toolbar https://github.com/django-debug-toolbar/django-debug-toolbar
la source
Comme mentionné dans d'autres articles ici - définir des points d'arrêt dans votre code et parcourir le code pour voir s'il se comporte comme prévu est un excellent moyen d'apprendre quelque chose comme Django jusqu'à ce que vous ayez une bonne idée de la façon dont tout se comporte - et de ce que votre code fait.
Pour ce faire, je recommanderais d'utiliser WingIde. Tout comme les autres IDE mentionnés sont agréables et faciles à utiliser, une mise en page agréable et des points d'arrêt faciles à définir évaluent / modifient la pile, etc. Parfait pour visualiser ce que fait votre code lorsque vous le parcourez. J'en suis un grand fan.
J'utilise également PyCharm - il a une excellente analyse de code statique et peut parfois aider à repérer les problèmes avant de vous rendre compte qu'ils sont là.
Comme déjà mentionné, django-debug-toolbar est essentiel - https://github.com/django-debug-toolbar/django-debug-toolbar
Et bien qu'il ne soit pas explicitement un outil de débogage ou d'analyse - l'un de mes favoris est le middleware d'impression SQL disponible auprès de Django Snippets à https://djangosnippets.org/snippets/290/
Cela affichera les requêtes SQL que votre vue a générées. Cela vous donnera une bonne idée de ce que fait l'ORM et si vos requêtes sont efficaces ou si vous devez retravailler votre code (ou ajouter la mise en cache).
Je le trouve inestimable pour garder un œil sur les performances des requêtes lors du développement et du débogage de mon application.
Juste une autre astuce - je l'ai légèrement modifiée pour mon usage personnel afin d'afficher uniquement le résumé et non l'instruction SQL .... Je l'utilise donc toujours lors du développement et des tests. J'ai également ajouté que si le len (connection.queries) est supérieur à un seuil prédéfini, il affiche un avertissement supplémentaire.
Ensuite, si je constate que quelque chose de mauvais (du point de vue des performances ou du nombre de requêtes) se produit, je reviens à l'affichage complet des instructions SQL pour voir exactement ce qui se passe. Très pratique lorsque vous travaillez sur un grand projet Django avec plusieurs développeurs.
la source
utiliser
pdb
ouipdb
. La différence entre ces deux est que ipdb prend en charge la saisie semi-automatique.pour pdb
pour ipdb
Pour exécuter une nouvelle touche de ligne
n
, pour continuer la touche dec
touche. vérifier plus d'options en utilisanthelp(pdb)
la source
Une suggestion supplémentaire.
Vous pouvez tirer parti nosetests et pdb ensemble, plutôt injecter
pdb.set_trace()
dans vos vues manuellement. L'avantage est que vous pouvez observer les conditions d'erreur lors de leur premier démarrage, potentiellement dans du code tiers.Voici une erreur pour moi aujourd'hui.
Maintenant, je sais que cela signifie que j'ai gaffé le constructeur du formulaire, et j'ai même une bonne idée de quel champ est un problème. Mais, puis-je utiliser pdb pour voir de quoi se plaignent les formulaires croustillants dans un modèle ?
Oui je peux. Utilisation de la --pdb option sur nosetests:
tests$ nosetests test_urls_catalog.py --pdb
Dès que je frappe une exception (y compris celles gérées avec élégance), pdb s'arrête là où cela se produit et je peux regarder autour de moi.
Maintenant, il est clair que mon argument de choix pour le constructeur de champ croustillant était comme s'il s'agissait d'une liste dans une liste, plutôt que d'une liste / d'un tuple de tuples.
La chose intéressante est que ce pdb se déroule dans le code de crispy, pas le mien et je n'ai pas eu besoin de l'insérer manuellement.
la source
Pendant le développement, l'ajout d'un
peut aider à diagnostiquer les problèmes dans les vues ou ailleurs, sans avoir besoin d'utiliser un débogueur.
la source