Recherche…


Remarques

Pdb

Pdb peut également imprimer toutes les variables existantes au niveau global ou local, en tapant respectivement l' globals() ou locals() dans (Pdb).

Utilisation du débogueur Python (Pdb)

L'outil de débogage de base de Django est pdb , une partie de la bibliothèque standard Python.

Init view script

Examinons un simple script views.py :

from django.http import HttpResponse


def index(request):
    foo = 1
    bar = 0

    bug = foo/bar

    return HttpResponse("%d goes here." % bug)

Commande de la console pour exécuter le serveur:

python manage.py runserver

Il est évident que Django ZeroDivisionError une ZeroDivisionError lorsque vous essayez de charger une page d'index, mais si nous prétendons que le bogue est très profond dans le code, cela peut devenir vraiment désagréable.

Définition d'un point d'arrêt

Heureusement, nous pouvons définir un point d' arrêt pour tracer ce bogue:

from django.http import HttpResponse

# Pdb import
import pdb


def index(request):
    foo = 1
    bar = 0
    
    # This is our new breakpoint
    pdb.set_trace()
    
    bug = foo/bar
    
    return HttpResponse("%d goes here." % bug)

Commande de console pour exécuter le serveur avec pdb:

python -m pdb manage.py runserver

Désormais, le point d'arrêt de chargement de la page déclenchera l'invite (Pdb) dans le shell, ce qui bloquera également votre navigateur en attente.

Débogage avec le shell pdb

Il est temps de déboguer cette vue en interagissant avec le script via le shell:

> ../views.py(12)index()
-> bug = foo/bar
# input 'foo/bar' expression to see division results:
(Pdb) foo/bar
*** ZeroDivisionError: division by zero
# input variables names to check their values:
(Pdb) foo
1
(Pdb) bar
0
# 'bar' is a source of the problem, so if we set it's value > 0...
(Pdb) bar = 1
(Pdb) foo/bar
1.0
# exception gone, ask pdb to continue execution by typing 'c':
(Pdb) c
[03/Aug/2016 10:50:45] "GET / HTTP/1.1" 200 111

Dans la dernière ligne, nous voyons que notre vue a retourné une réponse OK et qu’elle s’exécutait comme il se doit.

Pour arrêter la boucle pdb, entrez simplement q dans un shell.

Utiliser la barre d'outils de débogage de Django

Tout d'abord, vous devez installer django-debug-toolbar :

pip install django-debug-toolbar

settings.py :

Ensuite, incluez-le aux applications installées du projet, mais faites attention: il est toujours recommandé d'utiliser un fichier settings.py différent pour les applications et les middlewares de développement uniquement comme barre d'outils de débogage:

# If environment is dev...
DEBUG = True

INSTALLED_APPS += [
    'debug_toolbar',
]

MIDDLEWARE += ['debug_toolbar.middleware.DebugToolbarMiddleware']

La barre d'outils de débogage repose également sur des fichiers statiques, de sorte que l'application appropriée devrait également être incluse:

INSTALLED_APPS = [
    # ...
    'django.contrib.staticfiles',
    # ...
]

STATIC_URL = '/static/'

# If environment is dev...
DEBUG = True

INSTALLED_APPS += [
    'debug_toolbar',
]

Dans certains cas, il est également nécessaire de définir INTERNAL_IPS dans settings.py :

INTERNAL_IPS = ('127.0.0.1', )

urls.py :

Dans urls.py , comme le suggère la documentation officielle, l'extrait suivant doit permettre le routage de la barre d'outils de débogage:

if settings.DEBUG and 'debug_toolbar' in settings.INSTALLED_APPS:
    import debug_toolbar
    urlpatterns += [
        url(r'^__debug__/', include(debug_toolbar.urls)),
    ]

Recueillir statique de la barre d'outils après l'installation:

python manage.py collectstatic

Ça y est, la barre d'outils de débogage apparaîtra sur les pages de votre projet, fournissant diverses informations utiles sur le temps d'exécution, SQL, les fichiers statiques, les signaux, etc.

HTML:

De plus, django-debug-toolbar nécessite un rendu correct des balises text/html , <html> et <body> de type Content .


Dans le cas où vous êtes sûr d'avoir tout configuré correctement, mais que la barre d'outils de débogage n'est toujours pas rendue: utilisez cette solution "nucléaire" pour essayer de la comprendre.

Utiliser "assert False"

En développant, en insérant la ligne suivante dans votre code:

assert False, value

django déclenchera une AssertionError avec la valeur fournie en tant que message d'erreur lorsque cette ligne est exécutée.

Si cela se produit dans une vue, ou dans tout code appelé depuis une vue et que DEBUG=True est défini, une pile complète et détaillée contenant beaucoup d'informations de débogage sera affichée dans le navigateur.

N'oubliez pas de supprimer la ligne lorsque vous avez terminé!

Envisagez d'écrire plus de documentation, de tests, de journalisation et d'assertions au lieu d'utiliser un débogueur

Le débogage demande du temps et des efforts.

Au lieu de chasser les bogues avec un débogueur, envisagez de passer plus de temps à améliorer votre code en:

  • Écrire et exécuter des tests . Python et Django ont d'excellentes structures de test intégrées - qui peuvent être utilisées pour tester votre code beaucoup plus rapidement qu'avec un débogueur manuel.
  • Rédaction de la documentation appropriée pour vos fonctions, classes et modules. PEP 257 et le guide de style Python de Google fournissent de bonnes pratiques pour écrire de bons documents.
  • Utilisez la journalisation pour générer une sortie de votre programme - pendant le développement et après le déploiement.
  • Ajouter assert ions à votre code dans des lieux importants: Réduire l' ambiguïté, attraper des problèmes car ils sont créés.

Bonus: Ecrivez des certificats pour combiner documentation et test!



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow