GNU/Linux >> Linux Esercitazione >  >> Linux

Script Perl in esecuzione all'infinito:come eseguire il debug di ciò che è accaduto?

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

Linux
  1. Quale versione di Linux sto eseguendo? Ecco come scoprirlo

  2. Come eseguire un comando bash Linux in uno script PERL?

  3. Come rilevare la virtualizzazione utilizzando lo script Sys::Detect::Virtualization Perl?

  4. Come testare uno script PHP

  5. Come posso assicurarmi che sia in esecuzione solo un'istanza di uno script Ruby alla volta?

Quale versione di Linux sto utilizzando?

Come verificare quale versione del kernel Linux sto utilizzando

Come eseguire uno script Bash

Come posso controllare la sintassi di uno script Bash senza eseguirlo?

Come posso determinare quale processo in esecuzione utilizza java?

Come rintracciare un programma Java?