Prova a seguire questi passaggi:- trova il pid del processo della shell, puoi usare un comando come:
ps -ef | grep <your_script_name>
-
Impostiamo questo pid nella variabile di shell $PID. Trova tutti i processi figli di questo $PID eseguendo il comando:
ps --ppid $PID
Potresti trovarne uno o più (se ad esempio è bloccato in una serie di comandi pipeline). Ripeti questo comando un paio di volte. Se non cambia, significa che lo script è bloccato in un determinato comando. In questo caso, puoi collegare il comando trace al processo figlio in esecuzione:
sudo strace -p $PID
Questo ti mostrerà cosa viene eseguito, un ciclo indefinito (come la lettura da una pipe) o l'attesa di qualche evento che non si verifica mai.
Nel caso in cui trovi ps --ppid $PID
modifiche, questo indica che il tuo script sta avanzando ma è bloccato da qualche parte, ad es. loop locale nello script. Dai comandi che cambiano, può darti un suggerimento dove nello script è in loop.
Infine, un metodo molto semplice per eseguire il debug di un perl è utilizzare il debugger perl:
perl -d script.pl
Altro:1, 2, 3, 4, 5
Per le prossime esecuzioni del tuo script puoi provare il pacchetto Devel::Trace.
Dalla descrizione:"Questo modulo stamperà un messaggio di errore standard appena prima che ogni riga venga eseguita."
Esegui con
perl -d:Trace program
o usalo nel tuo script con
import Devel::Trace 'trace';
trace 'on'; # Enable
trace 'off'; # Disable