d bogage en python - projet-plume.org · lien avec le windows de microsoft !) ... une extension...

8
Débogage en Python Konrad HINSEN Centre de Biophysique Moléculaire (Orléans) et Synchrotron Soleil (St Aubin)

Upload: haliem

Post on 01-Jul-2018

217 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: D bogage en Python - projet-plume.org · lien avec le Windows de Microsoft !) ... une extension pour Eclipse WingIDE ( ... Le script simulateur.py contient un simulateur

Débogage en Python

Konrad HINSEN

Centre de Biophysique Moléculaire (Orléans)et

Synchrotron Soleil (St Aubin)

Page 2: D bogage en Python - projet-plume.org · lien avec le Windows de Microsoft !) ... une extension pour Eclipse WingIDE ( ... Le script simulateur.py contient un simulateur

Outils de débogage Python

Module pdb dans la bibliothèque Python.

Winpdb (http://winpdb.org/), un débogueur graphique (aucun lien avec le Windows de Microsoft !)

PuDB (http://pypi.python.org/pypi/pudb), un débogueur sémi-graphique.

pydbgr (http://code.google.com/p/pydbgr/), une version améliorée de pdb.

IDLE (fait partie de la distribution Python)

PyDev (http://pydev.org/), une extension pour Eclipse

WingIDE (http://wingware.com/)

Komodo IDE (http://www.activestate.com/komodo/features/)

Environnements de développement avec débogueur :

Page 3: D bogage en Python - projet-plume.org · lien avec le Windows de Microsoft !) ... une extension pour Eclipse WingIDE ( ... Le script simulateur.py contient un simulateur

Débogage post-mortem

Situation fréquente: votre code se plante avec une exception et vous voulez savoir pourquoi.

Options :

1) Faites tourner votre programme sous contrôle d’un débogueur et attendez l’exception :

python -m pdb mon_script.py

2) Faites tourner votre programme dans un environnement interactif (python -i, ipython, IDLE, ...) et démarrez pdb après l’exception:

import pdb pdb.pm()

En Python, le débogage post-mortem est beaucoup plus utile quedans un langage compilé.

Page 4: D bogage en Python - projet-plume.org · lien avec le Windows de Microsoft !) ... une extension pour Eclipse WingIDE ( ... Le script simulateur.py contient un simulateur

Astuce

def info(type, value, tb): import sys if hasattr(sys, 'ps1') or not sys.stderr.isatty(): sys.__excepthook__(type, value, tb) else: import traceback, pdb traceback.print_exception(type, value, tb) print pdb.pm()

import syssys.excepthook = infodel infodel sys

Créez le fichier $HOME/.local/lib/python2.6/site-packages/sitecustomize.pyavec le contenu suivant :

Python lance alors automatiquement pdb à chaque exception non traitée.

Attention : cette astuce ne marche pas sous Ubuntu !!!Il faut modifier /usr/lib/python2.6/sitecustomize.py

Page 5: D bogage en Python - projet-plume.org · lien avec le Windows de Microsoft !) ... une extension pour Eclipse WingIDE ( ... Le script simulateur.py contient un simulateur

Points de suspension

Situation fréquente : votre code produit des résultats suspects.

- Démarrez votre programme sous contrôle d’un débogueur (pdb: lancez avec “python -m pdb”, IDLE: menu “debugger”)

- Mettez un point de suspension (pdb: b, IDLE: clic droit) au début de la partie suspecte

- Continuez l’exécution (pdb: c, IDLE: Go) jusqu’au point de suspension, puis exécuter ligne par ligne

Exécution ligne par ligne :

- “Step” (pdb: s) s’arrête à la prochaine occasion, ce qui est le plus souvent le début d’une fonction qu’on appelle.

- “Over” (pdb: n) exécute une commande et s’arrête après.

- “Out” (pdb: r) s’arrête à la fin de la fonction.

Page 6: D bogage en Python - projet-plume.org · lien avec le Windows de Microsoft !) ... une extension pour Eclipse WingIDE ( ... Le script simulateur.py contient un simulateur

Suspension conditionnelle

Situation fréquente : un point de suspension doit être passé des centaines de fois avant qu’on arrive au point intéressant. Pour ne pas devoir taper “c” des centaines de fois...

Points de suspensions conditionnels (pdb) :

condition <numéro> <condition>

Si au point de suspension la condition n’est pas remplie, l’exécution reprend tout de suite.

Compteur de passage (pdb) :

ignore <numéro> <n>

Le point de suspension est ignoré n fois avant de devenir actif.

Page 7: D bogage en Python - projet-plume.org · lien avec le Windows de Microsoft !) ... une extension pour Eclipse WingIDE ( ... Le script simulateur.py contient un simulateur

PDB: analyser l’état du programme

Se retrouver dans le code source :

- (w)here affiche une trace de la pile

- (l)ist affiche 11 lignes de code centrées sur la ligne visée

- (u)p et (d)own montent et descendent dans la trace de pile

Valeurs des variables :

- (p)rint affiche la valeur d’une expression Python quelconque

Tracer des expressions aux points de suspension :

- command <numéro> print <expression> end

Page 8: D bogage en Python - projet-plume.org · lien avec le Windows de Microsoft !) ... une extension pour Eclipse WingIDE ( ... Le script simulateur.py contient un simulateur

Exercice: Trouvez les bogues !

Le script simulateur.py contient un simulateur (très basique, pas du tout optimisé) du système solaire. Un grand méchant y a introduit trois erreurs. Corrigez-les en utilisant l’outil de votre choix (pdb et/ou IDLE) !

Pour vous aider un peu, le fichier simulateur.log contient un protocole d’exécution du simulateur avant l’intervention du grand méchant.