Débogage des applications de thread
Dans ce chapitre, nous allons apprendre à déboguer des applications de thread. Nous apprendrons également l'importance du débogage.
Qu'est-ce que le débogage?
Dans la programmation informatique, le débogage est le processus de recherche et de suppression des bogues, erreurs et anomalies d'un programme informatique. Ce processus commence dès que le code est écrit et se poursuit par étapes successives lorsque le code est combiné avec d'autres unités de programmation pour former un produit logiciel. Le débogage fait partie du processus de test logiciel et fait partie intégrante de l'ensemble du cycle de vie du développement logiciel.
Débogueur Python
Le débogueur Python ou le pdbfait partie de la bibliothèque standard Python. C'est un bon outil de secours pour traquer les bogues difficiles à trouver et nous permet de corriger le code défectueux rapidement et de manière fiable. Les éléments suivants sont les deux tâches les plus importantes dupdp débogueur -
- Cela nous permet de vérifier les valeurs des variables lors de l'exécution.
- Nous pouvons également parcourir le code et définir des points d'arrêt.
Nous pouvons travailler avec pdb des deux manières suivantes -
- Par la ligne de commande; cela s'appelle également le débogage post-mortem.
- En exécutant pdb de manière interactive.
Travailler avec pdb
Pour travailler avec le débogueur Python, nous devons utiliser le code suivant à l'emplacement où nous voulons entrer dans le débogueur -
import pdb;
pdb.set_trace()
Considérez les commandes suivantes pour travailler avec pdb via la ligne de commande.
- h(help)
- d(down)
- u(up)
- b(break)
- cl(clear)
- l(list))
- n(next))
- c(continue)
- s(step)
- r(return))
- b(break)
Voici une démonstration de la commande h (help) du débogueur Python -
import pdb
pdb.set_trace()
--Call--
>d:\programdata\lib\site-packages\ipython\core\displayhook.py(247)__call__()
-> def __call__(self, result = None):
(Pdb) h
Documented commands (type help <topic>):
========================================
EOF c d h list q rv undisplay
a cl debug help ll quit s unt
alias clear disable ignore longlist r source until
args commands display interact n restart step up
b condition down j next return tbreak w
break cont enable jump p retval u whatis
bt continue exit l pp run unalias where
Miscellaneous help topics:
==========================
exec pdb
Exemple
Tout en travaillant avec le débogueur Python, nous pouvons définir le point d'arrêt n'importe où dans le script en utilisant les lignes suivantes -
import pdb;
pdb.set_trace()
Après avoir défini le point d'arrêt, nous pouvons exécuter le script normalement. Le script s'exécutera jusqu'à un certain point; jusqu'à l'endroit où une ligne a été définie. Prenons l'exemple suivant où nous exécuterons le script en utilisant les lignes mentionnées ci-dessus à différents endroits du script -
import pdb;
a = "aaa"
pdb.set_trace()
b = "bbb"
c = "ccc"
final = a + b + c
print (final)
Lorsque le script ci-dessus est exécuté, il exécutera le programme jusqu'à ce que a = «aaa», nous pouvons le vérifier dans la sortie suivante.
Production
--Return--
> <ipython-input-7-8a7d1b5cc854>(3)<module>()->None
-> pdb.set_trace()
(Pdb) p a
'aaa'
(Pdb) p b
*** NameError: name 'b' is not defined
(Pdb) p c
*** NameError: name 'c' is not defined
Après avoir utilisé la commande 'p (print)' dans pdb, ce script n'imprime que 'aaa'. Ceci est suivi d'une erreur car nous avons défini le point d'arrêt jusqu'à a = "aaa".
De même, nous pouvons exécuter le script en modifiant les points d'arrêt et voir la différence dans la sortie -
import pdb
a = "aaa"
b = "bbb"
c = "ccc"
pdb.set_trace()
final = a + b + c
print (final)
Production
--Return--
> <ipython-input-9-a59ef5caf723>(5)<module>()->None
-> pdb.set_trace()
(Pdb) p a
'aaa'
(Pdb) p b
'bbb'
(Pdb) p c
'ccc'
(Pdb) p final
*** NameError: name 'final' is not defined
(Pdb) exit
Dans le script suivant, nous définissons le point d'arrêt dans la dernière ligne du programme -
import pdb
a = "aaa"
b = "bbb"
c = "ccc"
final = a + b + c
pdb.set_trace()
print (final)
La sortie est la suivante -
--Return--
> <ipython-input-11-8019b029997d>(6)<module>()->None
-> pdb.set_trace()
(Pdb) p a
'aaa'
(Pdb) p b
'bbb'
(Pdb) p c
'ccc'
(Pdb) p final
'aaabbbccc'
(Pdb)