GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Perl-Skript läuft unendlich - wie kann man debuggen, was passiert ist?

Versuchen Sie, diesen Schritten zu folgen:- Finden Sie die Prozess-PID der Shell, Sie können einen Befehl wie diesen verwenden:

  ps -ef | grep <your_script_name> 
  • Lassen Sie uns diese PID in der Shell-Variablen $PID setzen. Finden Sie alle untergeordneten Prozesse dieser $PID, indem Sie den folgenden Befehl ausführen:

    ps --ppid $PID
    

Möglicherweise finden Sie einen oder mehrere (wenn er beispielsweise in einer Pipeline-Reihe von Befehlen steckt). Wiederholen Sie diesen Befehl einige Male. Wenn es sich nicht ändert, bedeutet dies, dass das Skript in einem bestimmten Befehl feststeckt. In diesem Fall können Sie den Trace-Befehl an den laufenden untergeordneten Prozess anhängen:

    sudo strace -p $PID

Dies zeigt Ihnen, was ausgeführt wird, entweder eine Endlosschleife (wie das Lesen aus einer Pipe) oder das Warten auf ein Ereignis, das nie eintritt.

Falls Sie ps --ppid $PID finden ändert, weist dies darauf hin, dass Ihr Skript voranschreitet, aber irgendwo hängen bleibt, z. lokale Schleife im Skript. Anhand der sich ändernden Befehle kann es Ihnen einen Hinweis geben, wo im Skript es sich in einer Schleife befindet.

Schließlich ist eine sehr einfache Methode zum Debuggen von Perl die Verwendung des Perl-Debuggers:

perl -d script.pl

Mehr:1, 2, 3, 4, 5


Für die nächsten Durchläufe Ihres Skripts können Sie das Paket Devel::Trace ausprobieren.

Aus der Beschreibung:"Dieses Modul gibt eine Nachricht als Standardfehler aus, kurz bevor jede Zeile ausgeführt wird."

Führen Sie entweder mit

aus
perl -d:Trace program

oder verwenden Sie es in Ihrem Skript mit

import Devel::Trace 'trace';

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

Linux
  1. Wie erkennt man Virtualisierung mit Sys::Detect::Virtualization Perl-Skript?

  2. Wie debuggt man ein Bash-Skript?

  3. Überprüfen, ob ein Skript ausgeführt wird?

  4. Wie kann ich ein Perl-Skript als System-Daemon unter Linux ausführen?

  5. Wie finde ich heraus, welche Version von Linux ich verwende?

Welche Version von Linux verwende ich?

So überprüfen Sie, welche Linux-Kernel-Version ich verwende

So führen Sie ein Bash-Skript aus

Wie überprüfe ich die Syntax eines Bash-Skripts, ohne es auszuführen?

Wie verfolgt man ein Java-Programm?

Wie finde ich heraus, welche Version von Linux ausgeführt wird?