Trucs de debugging pour python
(et django)

Presenter Notes

Étape 0

Utiliser pdb.

Qui ne connait pas pdb ?

Presenter Notes

Étape 1

  • arrêtez d'utiliser pdb
  • passez à ipdb

Comme pdb (mais tout en mieux):

1 from ipdb import set_trace
2 set_trace()

Installation:

pip install ipdb

https://github.com/gotcha/ipdb

Presenter Notes

Étape 2

Être paresseux.

pip install debug

import debug

Moins à retenir ! Import aussi "see".

Remarque: vous connaissez pprint ?

https://github.com/narfdotpl/debug

Presenter Notes

Étape 3

Être tout aussi paresseux:

ipython --pdb script.py

ipython --pdb script.py

Lance (i)pdb si le script rate.

(Qui ne connait pas ipython ?)

http://ipython.org/

Presenter Notes

Étape 4

Mieux vaut prévenir que guerrir:

1 from ipdb import launch_ipdb_on_exception
2 with launch_ipdb_on_exception():
3     ...

Presenter Notes

Étape 5

L'arme de destruction massive:

1 from IPython import embed; embed()

ATTENTON: ce n'est pas un debugger ! (démo)

Presenter Notes

Détails

Ipython a une fonction magique "%run".

%run -d script.py

%run -t script.py

Insère dans le contexte de ipython.

Lire le %quickref de ipython !!

Presenter Notes

Django

Presenter Notes

Django-Debug-Toolbar

  • indispensable !
  • requètes sql
  • templates + context
  • timing
  • et bien plus

Attention: intrusif !

Démo.

https://github.com/django-debug-toolbar/django-debug-toolbar

Presenter Notes

django-extensions

pip install django-extensions
pip install werkzeug

Ajouter 'django_extensions' aux INSTALLED_APPS.

python manage.py runserver_plus

Vous donne un shell de debug dans vos pages d'erreurs 500 ! (Le même que dans Flask).

Et aussi:

python manage.py shell_plus

Il y a plus de trucs cool mais je connais pas trop.

https://github.com/django-extensions/django-extensions

Presenter Notes

django-pdb

pip install django-pdb

'django_pdb' dans vos INSTALLED_APPS et 'django_pdb.middleware.PdbMiddleware' à la fin de vos middleware.

{% load pdb %}
{{ variable.truc.bidule|ipdb }}
{{ variable.truc.bidule|ipdb|un_filtre_a_debugger }}

Ou:

http://localhost:8000/ma_super_url?ipdb

Ou:

python manage.py runserver --ipdb
python manage.py runserver --pm
python manage.py test --ipdb

(Marche avec pdb aussi, mais on s'en fou)

https://github.com/tomchristie/django-pdb

Presenter Notes

Bonus

https://github.com/dcramer/django-devserver runserver de Django on steroïd. Peut testé, a l'air d'avoir beaucoup évolué depuis la dernière fois que j'ai regardé. Démo ?

https://github.com/dcramer/pdbinject Marche mais trop réussit à m'en servir de manière intéressante.

https://pypi.python.org/pypi/pudb Existe.

pudb

Presenter Notes

Conclusion

  • oubliez pdb, utilisez ipdb
  • pip install debug; import debug
  • ipython --pdb script.py
  • python manage.py runserver_plus

Presenter Notes

Questions / vos trucs ?

Presenter Notes