Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/02/2022, à 22:19

Nuliel

debug du bash

Bonjour,
J'aurais besoin de debug un script en bash pour un challenge (je ne peux pas le mettre, mais c'est le même pb avec n'importe quel script bash). Actuellement pour debug, je mets des echo un peu partout, mais là c'est plus possible, le script est trop affreux. J'aimerais pouvoir voir les lignes exécutées, de voir les fonctions appelées, voire pouvoir m'arrêter dans le script et regarder les valeurs des variables (comme un vrai débogueur). J'ai essayé le plugin vscode utilisant bashdb en arrière plan, mais j'arrive pas à trouver l'entrée standard, et quand je mets le programme en pause, ça ne s'arrête pas sur une ligne du script, mais ça l'arrête dans le code de bashdb (autant dire que ça sert à rien, on voit rien avec). Et les set -x -v et compagnie ne me donnent pas d'info (hormis que j'ai lancé le script). Donc voilà, la question: comment on fait pour debug proprement un script bash?

Pour donner un exemple

nuliel@nuliel-Latitude-E7270:~/Téléchargements$ cat test.sh 
echo coucou
nuliel@nuliel-Latitude-E7270:~/Téléchargements$ set -x
nuliel@nuliel-Latitude-E7270:~/Téléchargements$ ./test.sh 
+ ./test.sh
coucou
nuliel@nuliel-Latitude-E7270:~/Téléchargements$

j'aimerais voir + echo coucou avant que la commande soit exécutée.

Merci d'avance,
Nuliel

Dernière modification par Nuliel (Le 27/02/2022, à 22:21)

Hors ligne

#2 Le 27/02/2022, à 22:50

Watael

Re : debug du bash

salut,

soit tu mets le set -x dans le script*,
soit tu appelles le script avec bash -x.

--
* tu peux aussi ajouter l'option xtrace (-x) au shebang.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 28/02/2022, à 16:27

erresse

Re : debug du bash

Bonjour Nuliel,
Tu devrais essayer d'étudier la fonction "trap ... DEBUG" qui peut permettre d'intercepter en bash une interruption. En l'utilisant pour [dés]activer la trace +x / -x, on peut faire une sorte de pas à pas rudimentaire dans le script.
J'avais créé une petite fonction pour activer ou désactiver le débogage :

# Gestion du mode DEBUG pour tracer en pas à pas
# this fonction is called for each iteration of "_read_dom()"
#
# Type: private
# Parameters:
#  * 1: keyword "ON" or "Off" for enable/disable of DEBUG mode
# Return: nothing
_switch_dbg() {
  case "$XML_DEBUG" in
    "ON")   #XML_DEBUG="NO"
            trap 'read -n1 -p "Go!"' DEBUG
            set -x
            ;;
    "OFF")  XML_DEBUG="NO"
            trap '' DEBUG
            set +x
            ;;
    *)      XML_DEBUG="NO"
            ;;
  esac
}

En positionnant XML_DEBUG à ON ou OFF et en appelant la fonction _switch_dbg() on peut avoir une trace ciblée du script en exécution.
Sous toutes réserves et à adapter selon les besoins évidemment...


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#4 Le 28/02/2022, à 23:06

Nuliel

Re : debug du bash

Merci à vous deux.
Effectivement set -x fonctionne dans le script, je vais essayer d'avancer avec cela. Avec les interruptions on se rapproche pas mal d'un débugueur, je vais creuser cette idée.

Hors ligne