GNU/Linux >> Tutoriels Linux >  >> Linux

Script Perl fonctionnant à l'infini - comment déboguer ce qui s'est passé ?

Essayez de suivre ces étapes :- trouvez le processus pid du shell, vous pouvez utiliser une commande comme :

  ps -ef | grep <your_script_name> 
  • Définissons ce pid dans la variable shell $PID. Trouvez tous les processus enfants de ce $PID en exécutant la commande :

    ps --ppid $PID
    

Vous pouvez en trouver un ou plusieurs (si, par exemple, il est bloqué dans une série de commandes en pipeline). Répétez cette commande plusieurs fois. S'il ne change pas, cela signifie que le script est bloqué dans certaines commandes. Dans ce cas, vous pouvez attacher la commande trace au processus enfant en cours d'exécution :

    sudo strace -p $PID

Cela vous montrera ce qui est en cours d'exécution, soit une boucle indéfinie (comme la lecture d'un tube), soit l'attente d'un événement qui ne se produit jamais.

Si vous trouvez ps --ppid $PID changements, cela indique que votre script avance mais qu'il est bloqué quelque part, par ex. boucle locale dans le script. À partir des commandes changeantes, il peut vous donner un indice où dans le script il est en boucle.

Enfin, une méthode très simple pour déboguer un perl est d'utiliser le débogueur perl :

perl -d script.pl

Plus :1, 2, 3, 4, 5


Pour les prochaines exécutions de votre script, vous pouvez essayer le package Devel::Trace.

De la description :"Ce module affichera un message d'erreur standard juste avant l'exécution de chaque ligne."

Exécutez soit avec

perl -d:Trace program

ou utiliser dans votre script avec

import Devel::Trace 'trace';

trace 'on';                 # Enable
trace 'off';                # Disable

Linux
  1. Vérifier qu'un script est en cours d'exécution ?

  2. Que sont les scripts shell ? Comment créer des scripts shell ?

  3. Comment tester un script PHP

  4. Comment puis-je exécuter un script Perl en tant que démon système sous Linux ?

  5. Comment savoir quelle version de Linux j'utilise ?

Quelle version de Linux est-ce que j'utilise ?

Comment vérifier quelle version du noyau Linux suis-je en cours d'exécution

Comment exécuter un script bash

Comment vérifier la syntaxe d'un script Bash sans l'exécuter ?

Comment tracer un programme Java ?

Comment puis-je savoir quelle version de Linux est en cours d'exécution ?