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)