Aller au contenu principal
Bienvenue sur Forum Puppy Linux - Toutou Linux - Astuces - Aides !
Lorsque vous n'êtes pas connectés vous pouvez visiter la totalité du forum mais avec certaines restrictions : cf le règlement pour les visiteurs non connectés. Vous êtes chaleureusement conviés à vous inscrire afin de bénéficier de toutes les fonctionnalités du forum et de participer aux échanges.
Sujet: Comment déboguer un script (Lu 414 fois) sujet précédent - sujet suivant
0 Membres et 1 Invitédans ce sujet

Comment déboguer un script

Bonjour les curieuses et les curieux,

Comme la plupart de mes articles, celui-ci, sans prétention, constitue une introduction au débogage avec l'espoir qu'il pourra aider, un peu.

Pour commencer, en début de script, on insère ces deux lignes :
exec 2>[/chemin/nom_du_fichier.txt ou log]
set -x

et à la fin de la partie à déboguer ou du script, on ajoutera :
set +x


C'est le minimum.
Lorsque l'exécution du script s'achève, il reste à ouvrir [/chemin/nom_du_fichier.txt ou log] et à l'analyser pour modifier le programme afin qu'il fonctionnât comme il faut.

Cependant, vous aurez probablement envie de vous donner les moyens d'affiner le débogage.

Par exemple, vous aurez peut-être envie de connaître si une variable n'est pas définie.
Dans ce cas, à la suite du shebang, ajoutez -u, comme ceci :
#! /bin/bash -u

ou, il est possible de l'insérer au début du script :
set -u
set -o nounset

Pour vérifier les erreurs logiques du script, de la même manière que ci-dessus, on pourra ajouter à la suite du shebang :
#! /bin/bash -x

ou, insérer au début du script :
set -x
set -o xtrace

Lors du débogage, chaque ligne de la sortie est précédé d'un signe +.
Ceci peut être modifié au début du script en définissant la variable PS4 de cette manière, par exemple :
PS4=" ==> "

Il est également possible d'orienter la sortie vers un descripteur de fichier, par exemple 6, toujours en début de script.
Compte tenu de ce qui précède, on pourrait lire en début de script :
#! /bin/bash

exec 6> [/chemin/nom_du_fichier.txt ou log]
PS4=' ==> '
BASH_XTRACEFD="6"
set -x
set -u
set -o xtrace
set -o nounset

Pour afficher l'état de sortie tuyau (ou pipe en pas français), on peut encore ajouter une nouvelle ligne.
Par exemple, celle-ci :
set -o pipefail

Enfin, on voudra peut-être que le programme s'arrête lorsqu'un code de sortie non nul est renvoyé.
On insèrera les lignes suivantes :
set -e
ifs_old=$' \n\t' # voir ¹
IFS=$'\n\t'

En conclusion, un script à déboguer pourrait contenir avant le script lui-même ces quelques instructions :
#! /bin/bash

exec 6> [/chemin/nom_du_fichier.txt ou log] # sortie vers le descripteur de fichier 6
PS4=' ==> '                                 # modif. de PS4 de '+' en ' ==> '
BASH_XTRACEFD="6"                           # paramétrage de xtrace
set -x                                      # activation du mode xtrace
set -o xtrace                               # activation du mode xtrace
set -u                                      # erreur en cas de variable non définie
set -o nounset                              # variable non définie
set -e                                      # sortie du script si retour non nul
set -n                                      # vérification de la syntaxe
set -o noexec                               # vérification de la syntaxe
set -o pipefail                             # activation du mode pipefail si retour différent de zéro
ifs_old=$' \n\t'                            # stockage de la variable IFS d'origine ¹
IFS=$'\n\t'                                 # définition de la variable IFS pour le débogage

et, en fin de script :
set +x                                      # désactive le mode débogage
IFS=$ifs_old                                # rétablissement de la valeur initiale d'IFS ¹


Pour aller plus loin
On peut encore aller plus loin dans le débogage.
Vous pouvez utilement vous rapporter à la page qui a servie de support à cet article.
Vous la trouverez ici : https://fr.linux-terminal.com/?p=4505


Voilà !
C'est tout pour aujourd'hui.

Amusez-vous bien les p'tits loups.

¹ : pour vérifier la valeur initiale d'IFS, dans un terminal, saisir :
set | grep IFS
Vive Toutou Linux
"Tout le monde a le droit de vivre en paix !" dit une dame africaine.

 
Simple Audio Video Embedder