2010-10-04 15 views
25

Tengo una secuencia de comandos del sistema en Perl. Necesito un equivalente de bash -x para determinar qué está pasando mal con el script. ¿Hay algo equivalente?¿Hay alguna manera de activar el rastreo en Perl (equivalente a bash -x)?

EDITAR: Lo que bash -x hace es que imprime cada línea a medida que se evalúa. Esto hace que el código de depuración que simplemente falta una variable de ruta o archivo sea muy fácil.

+1

explicar lo que quiere hacer en términos de lo que está queriendo hacer. No en términos de shell arbitrario específico. –

+1

posible duplicado de [¿Cómo puedo hacer que Perl y Python impriman cada línea del programa que se está ejecutando?] (Http://stackoverflow.com/questions/2872089/how-can-i-make-perl-and-python-print -each-line-of-the-program-being-execute) – daxim

+0

posible duplicado de [¿Cuáles son algunos buenos métodos de depuración de Perl?] (http://stackoverflow.com/questions/1037583/what-are-some-good- perl-debugging-methods) – Ether

Respuesta

32

Eche un vistazo a Devel::Trace o Devel::ebug.

Dado este programa denominado w.pl:

#!/usr/bin/perl 

use strict; 
use warnings; 

my $answer = 42; 

if ($answer == 6 * 9) { 
    print "everything is running fine.\n"; 
} else { 
    warn "there must be a bug somewhere...\n"; 
} 

Puede utilizar Devel::Trace a ver la ejecución:

perl -d:Trace w.pl 

que produce el siguiente resultado:

>> w.pl:6: my $answer = 42; 
>> w.pl:8: if ($answer == 6 * 9) { 
>> w.pl:11:  warn "there must be a bug somewhere...\n"; 
there must be a bug somewhere... 
+2

Perl thew error: No se puede encontrar Devel/Trace.pm en @INC (.... – AjayKumarBasuthkar

+3

Esto funcionó: PERLDB_OPTS = "NonStop AutoTrace" perl -d ./trial.pl – AjayKumarBasuthkar

2

siempre también las declaraciones en los scripts de Perl:

use strict; 
use warnings; 

Si desea depurar, utilice el interruptor -d. Y aquí están los comandos: http://www.domainavenue.com/pl-debug.htm

Espero que ayude.

6

Usted debe mirar "perl -d" (activa el depurador) o "perl -c" (revisa tu script antes de ecuting

+3

Tenga cuidado, "antes de ejecutar" no significa que no se ejecute ningún código. Cualquier código en un bloque 'BEGIN' (o en un módulo que se haya incluido con' use') se ejecutará incluso si usa la opción '-c':' perl - cle 'BEGIN {print "oops, esto ejecuta"} print "pero esto no"' '. –

3

El módulo Devel::DumpTrace ha estado disponible desde 2011.

uso

muestra:

$ cat demo.pl 
# demo.pl 
# a demonstration of Devel::DumpTrace 
$a = 1; 
$b = 3; 
$c = 2 * $a + 7 * $b; 
@d = ($a, $b, $c + $b); 

$ perl -d:DumpTrace demo.pl 
>>>>> demo.pl:3:  $a:1 = 1; 
>>>>> demo.pl:4:  $b:3 = 3; 
>>>>> demo.pl:5:  $c:23 = 2 * $a:1 + 7 * $b:3; 
>>>>> demo.pl:6:  @d:(1,3,26) = ($a:1, $b:3, $c:23 + $b:3); 
Cuestiones relacionadas