9.1 Commandes du Débogueur

Le débogueur reconnaît les commandes suivantes. La plupart peut être abrégée en une ou deux lettres, par exemple "h(elp)" indique que aussi bien "h" que "help" invoquent la commande d'aide (mais pas "he" ou "hel", ni "H", "Help" ou "HELP"). Les arguments passés aux commandes doivent être séparés par des espaces (ou tabulations). Les arguments optionnels sont donnés entre crochets ("[]") dans la description qui suit; les crochets ne doivent pas être saisis lors de l'usage. Les alternatives sont séparées par une barre verticale ("|").

Saisir une ligne vide répète la dernière commande. Exception: si la dernière commande était "list", ce seront les 11 lignes suivantes qui seront affichée.

Les commandes que le débogueur ne reconnaît pas sont traités comme des instructions Python et sont exécutées dans le contexte du programme qui est débogué. Les instructions Python peuvent aussi être préfixées d'un point d'exclamation ("!"). C'est une façon puissante d'inspecter le programme en cours de débogage; il est même possible de changer la valeur d'une variable ou d'appeler une fonction. Lorsqu'une exception est déclenchée par l'instruction, le nom de l'exception est affiché, mais l'état du débogueur est inchangé.

Des commandes multiples peuvent être saisies sur une même ligne, séparées par ";;". (Un point-virgule unique ";" ne peut pas être utilisé, puisque c'est le séparateur que Python utilise pour distinguer plusieurs instructions dans la même ligne.) Il n'y a pas d'essai d'interprétation pour la coupure: la ligne est coupée à la première occurrence de ";;", même si celle-ci a lieu au milieu d'une chaîne de caractères.

Le débogueur admet des alias. Les alias peuvent avoir des paramètres, qui permettent une certaine adaptation au contexte qui est examiné.

Si un fichier .pdbrcse trouve dans le répertoire principal de l'utilisateur, ou dans le répertoire actuel, il st lu et exécuté comme s'il avait été saisi à l'invite du débogueur. Ceci est utile en particulier pour les alias. Si les deux fichiers existent, celui du répertoire principal est lu en premier, et les alias qui y sont définis peuvent être redéfinis par le fichier du répertoire actuel.

h(elp) [commande]

Sans argument, affiche la liste des commandes disponibles. Avec une commande comme argument, affiche l'aide concernant cette commande. "help pdb" affiche en entier le fihcier de documentation; si la variable d'environnement $PAGER est définie, le fichier est passé à la commande qui s'y trouve. Il faut faire "help exec" pour avoir l'aide de la commande "!" (seuls les identificateurs peuvent être des arguments).

w(here)

Affiche une trace de pile, avec l'instance d'activation la plus récente en bas. Une flèche indique l'instance d'activation actuelle, qui détermine le contexte de la plupart des commandes.

d(own)

Change l'instance d'activation actuelle pour celle qui est un niveau plus bas dans la pile (et qui est plus récente).

u(p)

Change l'instance d'activation actuelle pour celle qui est un niveau plus haut dans la pile (et qui est plus ancienne).

b(reak) [[fichier:]nligne|fonction[, condition]]

Avec l'argument nligne, pose un point d'arrêt à la ligne nligne du fichier actuel. Avec un argument fonction, pose un point d'arrêt à la premiére instruction exécutable de cette fonction. Le numéro de ligne peut être préfixé avec un nom de fichier et un deux-points, pour spécifier un point d'arrêt dans un autre fichier (probablement un fichier qui n'a pas encore été chargé). Le fichier est cherché dans sys.path. Notez que chaque point d'arrêt portera un numéro, auquel font référence toutes les commandes qui se servent des points d'arrêt.

Si un second argument est donné, ce doit être une expression qui doit fournir une valeur vraie avant que le point d'arrêt ne soit respecté.

Sans argument, affiche tous les points d'arrêt, avec pour chacun le nombre de fois qu'il a été atteint, son décompte à ignorer (voir ignore ci-dessous), et la condition associée lorsqu'elle existe.

tbreak [[fichier:]nligne|fonction[, condition]]

Point d'arrêt temporaire, qui sera enlevé dès qu'il sera atteint pour la première fois. Les arguments sont les mêmes que pour break.

cl(ear) [numero_ptda [numero_ptda ...]]

Avec argument, enlève les points d'arrêt dont les numéros sont donnés séparés par des espaces. Sans argument, enlève tous les points d'arrêt (mais demande confirmation avant).

disable [numero_ptda [numero_ptda ...]]

Désactive la liste de points d'arrêt (séparés par des espaces) donnée en argument. Désactiver un point d'arrêt, contrairement a clear, ne l'efface pas de la liste des points d'arrêt existants; il pourra être réactivé par la suite.

enable [numero_ptda [numero_ptda ...]]

(Ré)active les points d'arrêt spécifiés.

ignore numero_ptda [count]

Change le décompte à ignorer du point d'arrêt spécifé. Si count n'est pas donné, le décompte à ignorer sera 0. Un point d'arrêt devient actif lorsque le décompte à ignorer devient nul. S'il ne l'est pas, il sera décrémenté à chaque passage par le point d'arrêt, si celui-ci n'est pas désactivé et sa condition est vraie.

condition numero_ptda [condition]

Condition est une expression qui doit valoir vrai pour que le point d'arrêt soit respecté. Si la condition n'est pas donnée, la condition précédente est enlevée: le point d'arrêt sera rendu inconditionnel.

s(tep)

Exécute la ligne actuelle, en s'arrêtant dès que possible (soit dans une fonction qui est appelée, soit à la prochaine ligne de la fonction courante).

n(ext)

Poursuit l'exécution jusqu'à ce que la ligne suivante de la fonction soit atteinte, ou jusqu'à ce que la fonction retourne. (La différence entre "next" et "step" est que "step" s'arrête dans une fonction appelée, alors que "next" exécute un appel de fonction à vitesse (presque) normale, et s'arrêtera à la ligne suivante de la fonction actuelle.)

r(eturn)

Continue l'exécution jusqu'à ce que la fonction actuelle retourne.

c(ont(inue))

Continue l'exécution et arrête uniquement sur un point d'arrêt.

l(ist) [debut[, fin]]

Affiche le code source du fichier actuel. Sans arguments, affiche 11 lignes autour de la ligne actuelle, ou continue l'affichage du list précédent. Avec un seul argument, affiche 11 lignes autour de celle-là. Avec deux arguments, affiche le source entre les numéros de ligne donnés; si le second argument est négatif, il est interprété comme un décompte de lignes (à partir de debut).

a(rgs)

Affiche la liste des arguments de la fonction actuelle.

p expression

Evalue l'expression dans le contexte actuel et affiche son résultat. (Note: "print" peut aussi être utilisé, mais ce n'est pas une commande du débogueur --- c'est l'instruction print de Python.)

alias [nom [commande]]

Crée un alias appelé nom qui exécute la commande. La commande ne doit pas être donnée entre guillemets. Les paramètres qui peuvent être remplacés sont indiqués par "%1", "%2", etc., "%*" est remplacé par tous les paramètres. Si aucune commande est donnée, tous les alias sont affichés.

Les alias peuvent être imbriqués, et contiennent tout ce qui peut être saisi à l'invite de pdb. Notez que les commandes interned de pdb peuvent être redéfinies par des alias. Une commande ainsi surchargée est cachée jusqu'à ce que son alias soit effacé. L'aliasage est apliqué de façon récursive au premier mot de la ligne de commande; tous les autres mots sont conservés.

En guise d'exemple, voici deux alias utiles (surtout placés dans le fichier .pdbrc:

#Affiche les variables d'instance (usage "pi classInst")
alias pi for k in %1.__dict__.keys(): print "%1.",k,"=",%1.__dict__[k]
#Affiche les variables d'instance de self
alias ps pi self
unalias nom

Efface un alias.

[!]instruction

Exécute l'instruction (d'une seule ligne) dans le contexte de l'instance d'activation courante. Le point d'exclamation peut être omis lorsque le premier mot ne ressemble pas à une commande du débogueur. Pour changer la valeur d'une variable globale, il faut préfixer l'affectation avec une instruction "global"dans la même ligne, par exemple:

(Pdb) global liste_options; liste_options = ['-l']
(Pdb)

q(uit)

Sort du débogueur. Le programme qui était exécuté est avorté.