Aller au contenu

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
* Cette option est similaire à 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

📘 Github: Kshdb


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 puis break 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 ou next 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.