Maison  >  Article  >  développement back-end  >  Comment déboguer Python à l'aide de la bibliothèque Pdb et des commandes couramment utilisées

Comment déboguer Python à l'aide de la bibliothèque Pdb et des commandes couramment utilisées

高洛峰
高洛峰original
2017-02-25 11:00:281294parcourir

Tout le monde sait que Python est livré avec sa propre bibliothèque Pdb, et il est très pratique d'utiliser Pdb pour déboguer les programmes Python. Cependant, le débogage à distance et le multithreading ne peuvent pas être gérés par Pdb. Voyons comment utiliser la bibliothèque Pdb pour déboguer Python et les commandes couramment utilisées.

Il existe de nombreuses façons d'utiliser Pdb pour déboguer

Les principales façons d'utiliser Pdb pour déboguer les programmes Python sont les trois suivantes ! Ce qui suit présente une par une la ligne de commande

plus le paramètre -m

la ligne de commande pour démarrer le programme cible, ajoutez le paramètre -m, pour que les points d'arrêt soient appelés lorsque testPdb.py est appelé C'est avant la première ligne d'exécution du programme

L'exemple d'affichage qui sera mis en évidence dans cet article débogue de cette manière !

python -m pdb testPdb.py

Débogage dans un environnement interactif Python

>>> import pdb
>>> import testPdb
>>> pdb.run('testPdb.test()')

Insérer un programme dans le code

Il est plus couramment utilisé pour insérer un programme au milieu du programme, plutôt que de mettre un point d'arrêt dans un IDE général et démarrage du débogage, mais cette méthode est hardcode

if __name__ == "__main__":
 a = 1
 import pdb
 pdb.set_trace()
 b = 2
 c = a + b
 print(c)

puis exécutez le script normalement : python testPdb.py Il sera réglé lorsque vous accédez à pdb.set_trace(), puis vous pouvez voir l'invite de débogage (Pdb)

La situation de débogage pour le petit programme ci-dessus est la suivante :

Préparez le programme de test

Ensuite, utilisez la première méthode présentée ci-dessus pour déboguer le programme Python afin d'introduire les commandes pdb couramment utilisées, mais avant de commencer, vous devez préparer le code du programme de test :

testFun.py

Il s'agit d'un sous-module qui sera appelé par le module principal. Il est utilisé pour tester si les points d'arrêt peuvent être démarrés à partir du module principal. module lors du débogage à l'aide de Pdb. Suivi dans les sous-modules (les explications suivent)

#!/usr/bin/python
# -*- coding: utf-8 -*-

def add(a, b):
 return a + b

testPdb.py

Voici le code du module principal en cours de débogage ci-dessous

#!/usr/bin/python
# -*- coding: utf-8 -*-

def sub(a, b):
 return a - b

if __name__ == "__main__":

 print ''
 import testFun
 i = 0
 a = 1
 while(i < 100):
  a = testFun.add(a, 1)
  i = i + 1
 print "累加结果:", a
 print ""

 for letter in &#39;Pdb&#39;:
  print "当前字母:", letter
 print ""

 fruits = [&#39;banana&#39;, &#39;apple&#39;, &#39;mango&#39;]
 for fruit in fruits:
  print "当前水果:", fruit
 print ""


 ret = 0
 for num in range(10, 12):
  ret = sub(ret, num)
 print &#39;循环结果:&#39;, ret
 print ""

 d = {&#39;abc&#39;: 123, 123: "abc"}
 for (k,v) in d.items():
  print "当前键值对:", k, &#39;-&#39;, v
 print ""

résume les commandes couramment utilisées

Commandes de base

commande h(elp) : imprimera les commandes disponibles dans la version actuelle de Pdb si vous souhaitez interroger un. commande, vous pouvez saisir h [command] , par exemple h l Afficher la commande liste

commande l(ist) : Vous pouvez lister les blocs de code actuellement à exécuter

Gestion des points d'arrêt

b(reak) : Définir un point d'arrêt

Par exemple, b 12 consiste à ajouter un point d'arrêt sur la ligne 9 du script actuel

Par exemple , b sub consiste à ajouter un point d'arrêt à la définition de sous-fonction du script actuel. En plus d'ajouter des points d'arrêt dans le script actuel, vous pouvez cliquer sur

pour définir des points d'arrêt dans d'autres scripts du script actuel. code utilisé ci-dessus à titre d'exemple, b testFun.add peut être implémenté dans testFun.py Ajoutez un point d'arrêt à la fonction d'ajout dans le script

Si vous utilisez uniquement b, tous les points d'arrêt existants seront affichés

condition bpnumber [condition] : Définir des points d'arrêt conditionnels, tels que la condition 2 a==0, consiste à ajouter la condition "a==0" au deuxième point d'arrêt

cl(ear ) : supprimez le point d'arrêt, s'il y a des paramètres après, il est clairement spécifié. Points d'arrêt ; si aucun paramètre n'est pris, tous les points d'arrêt seront effacés

désactiver/activer : désactiver/activer les points d'arrêt

Contrôle logique du programme

Pour les différentes commandes présentées ci-dessous, vous devez connaître le code et le numéro de ligne du script correspondant, voici donc une capture d'écran montrant les premières lignes de code nécessaire pour le test suivant

c(ont(inue)), let Le programme s'exécute normalement jusqu'à ce qu'il rencontre le prochain point d'arrêt

n(ext), permettant au programme d'exécuter la ligne suivante . Si l'instruction actuelle a un appel de fonction, l'utilisation de n n'entrera pas dans le corps de la fonction appelée

Comme le montre la figure ci-dessous, lorsque le point d'arrêt du script est débogué sur testFun.add(a, 1), n continuera à être exécuté et n'entrera pas dans la fonction de testFun.add(a, 1)

s(tep), suivi de n Similaire, mais s'il y a actuellement un appel de fonction, alors s entrera dans le corps de la fonction appelée

As. montré dans la figure ci-dessous, lors du débogage du point d'arrêt du script vers

, continuez à exécuter s et vous entrerez testFun.add(a, 1)La définition de la fonction correspondante est à l'intérieur, bien que testFun.add(a, 1) ne soit pas une fonction définie dans ce script testFun.add

j(ump), laissez le programme sauter au numéro de ligne spécifié

Si la ligne actuelle est 10. Remarque : si j 20 est exécuté, cela équivaut au programme sautant directement à la ligne 20. Le les lignes du milieu 11 à 19 sont en fait ignorées directement et ne sont pas exécutées du tout, donc s'il y a des déclarations de variables ou L'initialisation de l'objet doit être utilisée à la ligne 20 et ultérieure, cela peut donc provoquer une erreur lors de son utilisation !

Imprimer les informations importantes

a(rgs), imprimer les paramètres de la fonction actuelle. Par exemple, l'image ci-dessous montre qu'une fois le point d'arrêt entré à l'intérieur de

, le paramètre testFun.add testFun.addp de

est imprimé, une certaine variable

est imprimée et le le débogage est quitté

q, quittez le débogage directement ou utilisez Ctrl D pour quitter

Résumé

Le processus de débogage à l'aide de Pdb présenté ci-dessus est en fait très simple. L'article montre principalement l'effet en cours à travers des captures d'écran. Si vous lisez simplement l'article, vous n'en aurez aucune idée et vous pourriez même avoir l'impression que les commandes et les résultats dans les captures d'écran sont désordonnés. Cependant, si vous suivez le processus vous-même, cela ne prendra pas une heure, mais l'effet sera. absolument excellent ! Encore une chose, le débogueur de Python est Pdb, qui peut être utilisé pour apprendre le débogueur C gdb sous Linux. Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude et au travail de chacun.

Pour plus d'articles sur la façon d'utiliser la bibliothèque Pdb pour déboguer Python et les commandes couramment utilisées, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn