Différences entre versions de « Pi-Python-PuDB »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
Ligne 90 : Ligne 90 :
  
 
Il est capital d'utiliser un '''sudo''' parce que le débuggeur doit pouvoir accéder à la mémoire du processus (dans /dev/mem ).
 
Il est capital d'utiliser un '''sudo''' parce que le débuggeur doit pouvoir accéder à la mémoire du processus (dans /dev/mem ).
 +
 +
Au premier démarrage du débugger, vous serez invité à préciser vos préférences. Vous pouvez simplement vous déplacer sur le bouton [Ok] à l'aide de la flèche sur le clavier et accepter les paramètre en pressent la touche Entrée/Enter
  
 
Et voila!
 
Et voila!
 +
 +
[[Fichier:pudb-en-action.jpg]]
  
 
Notez au passage la déclaration des variables (et leurs valeurs) en haut à droite.
 
Notez au passage la déclaration des variables (et leurs valeurs) en haut à droite.
 
[[Fichier:pudb-en-action.jpg]]
 
  
 
== Raccourcis clavier ==
 
== Raccourcis clavier ==

Version du 27 janvier 2013 à 12:35

Introduction

Programmer en Python c'est bien... pouvoir le faire en SSH c'est pratique mais que faire lorsque l'on a besoin de faire du débogage pour trouver d'où vient l'erreur?

Il y a deux techniques:

  1. Utiliser la fonction print() pour afficher des message dans la console (fonctionne aussi en ssh) se faire une idée de ce qui se passe dans le programme.
  2. Utiliser un programme de débogage (appelé debugger en anglais, débugger en français) qui permettra de suivre le programme pas à pas dans une interfacer aussi conviviale que possible.

Utilité d'un débugger

Le débugger est un programme spéciale qui peu prendre le contrôle de votre programme.

C'est pratique car cela permet d'exécuter votre programme ligne par ligne... et donc de le suivre à la trace tout en permettant d'explorer la valeur des variables et la pile d'appels (toutes les fonctions appelées avant celle que vous déboguez).

Il est également possible de placer des point d'arrêt (breakpoint en anglais) sur lesquels le débuggeur s'arrêtera avant l'exécution de cette ligne.

Une des particularité du débuggeur, c'est qu'il peut aussi resté en "veille" tant que votre programme fonctionne normalement et revenir en premier plan juste au moment ou l'erreur se produit (ou un breakpoint/point d'arrêt atteint).

C'est généralement le moment idéal pour investiguer un problème :-)

PuDB un débugger texte

Il y a probablement bon nombre de débuggeur sur le marché, tous avec leurs avantages et leurs inconvénients.

PuDB est plus intéressant dans le sens où il fonctionne en mode texte et en SSH! De surcroît il est facile a installer sur un Raspberry.

Vous pouvez donc prendre le contrôle un programme à distance et le débugger assez facilement avec un interface offrant une convivialité honorable (ce qui est loin d'être négligeable).

Pudb-screenshot.png

Vous pouvez également consulter ce screencast.

Installer PuDB

Si vous avez déjà préparé votre environnement Python (voir cet article), l'installation de PuDB sera une simple formalité.

sudo easy_install pudb

Faire du deboggage

Voici un petit exemple, pas à pas, expliquant comment faire du débogage.

Préparation de l'exemple

Pour illuster l'utilisation de PuDB, nous allons débogger le programme "raspi-button2.py" issu de ce tutoriel.

Comme l'utilisation de PuDB requière une petite modification du script, nous allons d'abord en faire une copie :-)

cp raspi-button2.py raspi-pudb.py

Ajouter set_trace()

Nous allons ensuite éditer le contenu de raspi-pudb.py pour activer de débogage.

nano raspi-pudb.py

Ci-dessous, nous avons repris les première lignes du programme Python.

#!/usr/bin/env python
# -*- coding: latin-1 -*-

# Exemple de debbogage basé sur raspi-button2.py en 
#   utilisant le debuggeur PuDB.
# http://pypi.python.org/pypi/pudb
#

import RPi.GPIO as GPIO, time
from pudb import set_trace

set_trace()

GPIO.setmode(GPIO.BCM)
GREEN_LED = 18
RED_LED = 23

BUTTON1 = 24
# Dernier état connu du bouton
# Par defaut: le bouton n'est pas considéré comme activé
BUTTON1_STATE = False

GPIO.setup(GREEN_LED, GPIO.OUT)
GPIO.setup(RED_LED, GPIO.OUT)
GPIO.setup(BUTTON1, GPIO.IN)
...

Démarrer le débuggeur

Pour commencer le débogage de votre programme, il faut démarrer votre script Python avec la commande suivante:

sudo python -m pudb raspi-pudb.py

Il est capital d'utiliser un sudo parce que le débuggeur doit pouvoir accéder à la mémoire du processus (dans /dev/mem ).

Au premier démarrage du débugger, vous serez invité à préciser vos préférences. Vous pouvez simplement vous déplacer sur le bouton [Ok] à l'aide de la flèche sur le clavier et accepter les paramètre en pressent la touche Entrée/Enter

Et voila!

Pudb-en-action.jpg

Notez au passage la déclaration des variables (et leurs valeurs) en haut à droite.

Raccourcis clavier

Ctrl-p - edit preferences │

n - step over ("next") s - step into c - continue r/f - finish current function t - run to cursor e - show traceback [post-mortem or in exception state]

H - move to current line (bottom of stack) u - move up one stack frame d - move down one stack frame

! - invoke python shell in current environment o - show console/output screen

b - toggle breakpoint m - open module

j/k - up/down ctrl-u/d - page up/down h/l - scroll left/right

Ressources

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.