Zkuste postupovat podle těchto kroků:- najděte procesní pid shellu, můžete použít příkaz jako:
ps -ef | grep <your_script_name>
-
Nastavíme tento pid v proměnné shellu $PID. Najděte všechny podřízené procesy tohoto $PID spuštěním příkazu:
ps --ppid $PID
Můžete najít jeden nebo více (pokud je například zaseknutý ve zřetězené řadě příkazů). Opakujte tento příkaz několikrát. Pokud se to nezmění, znamená to, že se skript zasekl v určitém příkazu. V tomto případě můžete ke spuštěnému podřízenému procesu připojit příkaz trace:
sudo strace -p $PID
To vám ukáže, co se provádí, buď neurčitou smyčku (jako čtení z roury), nebo čekání na nějakou událost, která se nikdy nestane.
V případě, že najdete ps --ppid $PID
změny, to znamená, že váš skript postupuje, ale někde se zasekl, např. místní smyčka ve skriptu. Z měnících se příkazů vám může napovědět, kde se ve skriptu zacyklí.
A konečně, velmi jednoduchou metodou pro ladění perlu je použití perlu debugger:
perl -d script.pl
Více:1, 2, 3, 4, 5
Pro další spuštění vašeho skriptu můžete vyzkoušet balíček Devel::Trace.
Z popisu:"Tento modul vypíše zprávu se standardní chybou těsně před provedením každého řádku."
Spusťte buď pomocí
perl -d:Trace program
nebo použijte ve svém skriptu s
import Devel::Trace 'trace';
trace 'on'; # Enable
trace 'off'; # Disable