Debug d'un script#
Concept#
- Le debugging est une étape essentielle pour assurer la qualité d'un script.
- Il permet d'identifier et de corriger les erreurs ou bugs dans le code.
- En Korn Shell et Bourne Again Shell, il existe plusieurs options et outils pour faciliter le debugging.
Erreurs courantes#
- Erreurs de syntaxe: fautes de frappe, erreurs de ponctuation.
- Erreurs logiques: erreurs dans la logique du script, entraînant un comportement imprévu.
- Erreurs de portabilité: problèmes liés à l'exécution du script sur différents systèmes ou shells.
- Les erreurs liées à l'espace de noms des variables: utiliser une variable non déclarée ou mal initialisée.
Aide basique au débugging#
Options avec set -o optionname
#
set -o optionname
est une commande utilisée dans les shells Unix, comme Bash et Korn Shell (ksh), pour contrôler divers paramètres et comportements du shell.
L'option que vous spécifiez après -o
détermine ce que vous modifiez.
Pour désactiver une option, vous pouvez utiliser set +o optionname
.
https://docstore.mik.ua/orelly/unix3/korn/ch09_01.htm
Aide basique au débugging (2)#
NoUnset#
set -o nounset
- Equivalent à
set -u
- Cela génère une erreur si vous essayez d'utiliser une variable qui n'a pas été définie.
NoExec#
set -o noexec
- Cette option est similaire à
set -n
. - N'exécute pas les commandes
- Vérifie seulement les erreurs de syntaxe
Aide basique au débugging (3)#
ErrExit#
set -o errexit
- Equivalent à
set -e
- Avec cette option, le shell arrêtera l'exécution du script si une commande se termine avec un statut non nul (c'est-à-dire une erreur).
Pipefail#
set -o pipefail
- Avec cette option un pipeline renvoie un statut de sortie non nul si l'une quelconque des commandes du pipeline échoue.
Aide basique au débugging (4)#
Xtrace#
set -o xtrace
- Cette option est identique à l'utilisation de la commande
set -x
. - Elle imprime chaque commande avant son exécution, ce qui est utile pour le débogage.
Verbose#
set -o verbose
set -v
.
* Comme xtrace
, elle imprime également les commandes avant leur exécution,
* Cependant elle n'imprime pas les valeurs des variables d'environnement et elle n'évalue pas les substitutions de commandes.
Trap DEBUG#
- En KSH et BASH, trap est une fonction qui permet de capturer des signaux et d'exécuter un bloc de code lorsqu'ils sont reçus.
- DEBUG est un signal particulier qui est émis avant chaque commande exécutée.
- L'utilisation de trap DEBUG permet de suivre l'exécution du script et d'injecter du code de débogage à la volée.
- Pour utiliser trap DEBUG, ajoutez une ligne comme
trap echo $BASH_COMMAND DEBUG
dans votre script. Cela affichera chaque commande avant qu'elle ne soit exécutée.
Outils avancé : Le Korn Shell Debugger#
Introduction au Korn Shell Debugger#
- Le Korn Shell Debugger (kshdb) est un outil de débugging dédié aux scripts écrits en Korn Shell.
- Il permet un contrôle plus précis de l'exécution des scripts par rapport aux outils de débogage de base.
- Il offre des fonctionnalités similaires à gdb (GNU Debugger), mais spécifiques à l'environnement ksh.
Il existe des outils équivalents pour Bash et pour Zsh.
O'Reilly - Korn Shell Chapter 9: Debugging
Outils avancé : Le Korn Shell Debugger (2)#
Installation et configuration du Korn Shell Debugger#
- Pour l'installation, utiliser la commande
git clone https://github.com/rocky/kshdb.git
pour cloner le dépôt GitHub de kshdb. - Pour configurer kshdb, définir un alias pour l'outil en ajoutant
alias kshdb='path_to_kshdb'
dans le fichier de configuration de votre shell (.kshrc
pour Korn Shell).
Outils avancé : Le Korn Shell Debugger (3)#
L'utilisation de breakpoints#
- Les breakpoints permettent de stopper l'exécution d'un script à des points spécifiques.
- Pour ajouter un breakpoint, utiliser la commande
kshdb script.ksh
puisbreak linenumber
pour définir un breakpoint à une ligne précise. - Pour lister les breakpoints actuels, utiliser la commande
info breakpoints
. - Pour supprimer un breakpoint, utiliser la commande
delete linenumber
.
Outils avancé : Le Korn Shell Debugger (4)#
L'inspection de variables et l'exécution pas à pas (step by step)#
- Pour inspecter la valeur d'une variable, utiliser la commande
print variable_name
. - Pour exécuter un script pas à pas, utiliser la commande
step
pour exécuter la ligne suivante ounext
pour exécuter la ligne suivante sans entrer dans les fonctions. - Pour continuer l'exécution jusqu'au prochain breakpoint, utiliser la commande
continue
.
Outils avancé : Le Korn Shell Debugger (5)#
Gestion des erreurs avec le Korn Shell Debugger#
- En cas d'erreur dans le script, le débogueur s'arrête et montre la ligne qui a causé l'erreur.
- Pour obtenir plus d'informations sur l'erreur, utiliser la commande
backtrace
. - Pour quitter le débogueur en cas d'erreur, utiliser la commande
quit
. - Pour reprendre l'exécution après correction de l'erreur, utiliser la commande
continue
.