Python Language Le débogueur Python: débogage progressif avec _pdb_


Exemple

La bibliothèque standard Python comprend une bibliothèque de débogage interactive appelée pdb . pdb possède des capacités étendues, la plus couramment utilisée étant la possibilité de passer à travers un programme.

Pour entrer immédiatement dans le débogage, utilisez:

python -m pdb <my_file.py>

Cela démarrera le débogueur sur la première ligne du programme.

Généralement, vous voudrez cibler une section spécifique du code pour le débogage. Pour ce faire, nous importons la bibliothèque pdb et utilisons set_trace () pour interrompre le flux de cet exemple de code perturbé.

import pdb

def divide(a, b):
    pdb.set_trace()
    return a/b 
    # What's wrong with this? Hint: 2 != 3

print divide(1, 2)

L'exécution de ce programme lancera le débogueur interactif.

python foo.py 
> ~/scratch/foo.py(5)divide()
-> return a/b
(Pdb) 

Cette commande est souvent utilisée sur une seule ligne pour pouvoir être commentée avec un seul caractère.

 import pdf; pdb.set_trace()

À l'invite (Pdb), les commandes peuvent être entrées. Ces commandes peuvent être des commandes de débogueur ou python. Pour imprimer des variables que nous pouvons utiliser p du débogueur, ou l'impression de python.

(Pdb) p a
1
(Pdb) print a
1

Pour voir la liste de toutes les variables locales à utiliser

locals

fonction intégrée

Ce sont de bonnes commandes de débogueur à connaître:

b <n> | <f>: set breakpoint at line *n* or function named *f*.
# b 3
# b divide
b: show all breakpoints.
c: continue until the next breakpoint.
s: step through this line (will enter a function).
n: step over this line (jumps over a function).
r: continue until the current function returns.
l: list a window of code around this line.
p <var>: print variable named *var*.
# p x
q: quit debugger.
bt: print the traceback of the current execution call stack
up: move your scope up the function call stack to the caller of the current function
down: Move your scope back down the function call stack one level
step: Run the program until the next line of execution in the program, then return control back to the debugger
next: run the program until the next line of execution in the current function, then return control back to the debugger
return: run the program until the current function returns, then return control back to the debugger
continue: continue running the program until the next breakpoint (or set_trace si called again)

Le débogueur peut également évaluer de manière interactive python:

-> return a/b
(Pdb) p a+b
3
(Pdb) [ str(m) for m in [a,b]] 
['1', '2']
(Pdb) [ d for d in xrange(5)]
[0, 1, 2, 3, 4]

Remarque:

Si l'un de vos noms de variable coïncide avec les commandes du débogueur, utilisez un point d'exclamation ' ! 'avant le var pour faire explicitement référence à la variable et non à la commande du débogueur. Par exemple, il arrive souvent que vous utilisiez le nom de variable ' c ' pour un compteur et que vous souhaitiez l’imprimer dans le débogueur. une simple commande ' c ' continuerait l'exécution jusqu'au prochain point d'arrêt. Au lieu de cela, utilisez ' ! C ' pour imprimer la valeur de la variable comme suit:

(Pdb) !c
4