GNU/Linux >> Tutoriales Linux >  >> Linux

El script Perl se ejecuta infinitamente:¿cómo depurar lo que sucedió?

Intente seguir estos pasos:encuentre el pid del proceso del shell, puede usar un comando como:

  ps -ef | grep <your_script_name> 
  • Configuremos este pid en la variable de shell $PID. Encuentre todos los procesos secundarios de este $PID ejecutando el comando:

    ps --ppid $PID
    

Puede encontrar uno o más (si, por ejemplo, está atascado en una serie de comandos canalizados). Repita este comando un par de veces. Si no cambia, significa que el script está atascado en cierto comando. En este caso, puede adjuntar el comando de rastreo al proceso secundario en ejecución:

    sudo strace -p $PID

Esto le mostrará lo que se está ejecutando, ya sea un bucle indefinido (como leer de una tubería) o esperar algún evento que nunca sucede.

En caso de encontrar ps --ppid $PID cambia, esto indica que su secuencia de comandos está avanzando pero está atascada en algún lugar, p. bucle local en el script. A partir de los comandos cambiantes, puede darte una pista de en qué lugar del script se repite.

Finalmente, un método muy simple para depurar un perl es usar el depurador de perl:

perl -d script.pl

Más:1, 2, 3, 4, 5


Para las próximas ejecuciones de su script, puede probar el paquete Devel::Trace.

De la descripción:"Este módulo imprimirá un mensaje de error estándar justo antes de que se ejecute cada línea".

Ejecutar con

perl -d:Trace program

o úsalo en tu script con

import Devel::Trace 'trace';

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

Linux
  1. ¿Cómo ejecutar comandos bash de Linux en un script PERL?

  2. ¿Cómo detectar la virtualización usando Sys::Detect::Virtualization Perl script?

  3. ¿Cómo depurar un script Bash?

  4. ¿Comprobar que se está ejecutando un script?

  5. ¿Cómo me aseguro de que solo se esté ejecutando una instancia de un script de Ruby a la vez?

¿Qué versión de Linux estoy ejecutando?

Cómo comprobar qué versión del kernel de Linux estoy ejecutando

Cómo ejecutar un script Bash

¿Cómo verifico la sintaxis de un script Bash sin ejecutarlo?

¿Cómo rastrear un programa java?

¿Cómo puedo saber qué versión de Linux se está ejecutando?