GNU/Linux >> Znalost Linux >  >> Linux

Perl skript běží nekonečně - jak ladit, co se stalo?

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

Linux
  1. Jakou verzi Linuxu používám? Zde je návod, jak to zjistit

  2. Jak ladit Bash skript?

  3. Kontrola, zda skript běží?

  1. Jak zajistím, že bude současně spuštěna pouze jedna instance skriptu Ruby?

  2. Jak mohu spustit skript v Perlu jako systémový démon v linuxu?

  3. Jak zjistím, jakou verzi Linuxu používám?

  1. Jak odladím počáteční úlohu?

  2. Jak zjistím, který běžící proces používá javu?

  3. Jak ladit odeslaný požadavek HTTP, který čeká na odpověď?