2011-02-09 19 views

Respuesta

7

Si se utiliza un depurador interactivo está bien para usted, usted puede intentar perldebug

10
perl -d your_script.pl args 

es cómo depurar Perl

+0

La respuesta de Alex tiene un enlace a la documentación de '-d' – DVK

+7

Paso 1: agregar' use strict; usa advertencias; 'en la parte superior de tu script. Si eso no ayuda, vaya al paso 2: use perl -d. –

4

También recomendaría el uso de la Perl debugger.

Sin embargo, ya que ha preguntado por algo como shell -x eche un vistazo al módulo Devel::Trace que hace algo similar.

3

La herramienta de depuración más eficaz sigue siendo careful thought, junto con las declaraciones de impresión juiciosamente colocadas. (Declaraciones y la mejora de impresión con Data::Dumper)

Brian Kernighan, "Unix for Beginners" (1979)

+0

Un pequeño y agradable debate aquí sobre el depurador de perl también http://www.perlmonks.org/?node_id=48579 –

+0

el enlace está muerto. Por favor, revise su respuesta –

+2

Entonces, en resumen, ¿Perl quiere que codifique como si fuera 1979? –

3

Uso Eclipse con EPIC: te da un buen IDE con posibilidades de depuración, incluyendo la capacidad de colocar puntos de interrupción y el Perl Expression View para inspeccionar la valor de las variables

0

Si usted quiere hacer de depuración remota (por cgi o si no quiere meterse con salida de línea de comandos de depuración) utilizar este:

prueba dada:

use v5.14; 
say 1; 
say 2; 
say 3; 

inicie un receptor de cualquiera que sea host y el puerto en el terminal 1 (aquí localhost: 12345):

$ nc -v -l localhost -p 12345 

apoyo para el uso de readline rlwrap (se puede utilizar en perl -d también):

$ rlwrap nc -v -l localhost -p 12345 

Y comenzar la prueba en otro terminal (dicen terminal 2): ​​

$ PERLDB_OPTS="RemotePort=localhost:12345" perl -d test 

de entrada/salida en el terminal 1:

Connection from 127.0.0.1:42994 

Loading DB routines from perl5db.pl version 1.49 
Editor support available. 

Enter h or 'h h' for help, or 'man perldebug' for more help. 

main::(test:2): say 1; 
    DB<1> n 
main::(test:3): say 2; 
    DB<1> select $DB::OUT 

    DB<2> n 
2 
main::(test:4): say 3; 
    DB<2> n 
3 
Debugged program terminated. Use q to quit or R to restart, 
use o inhibit_exit to avoid stopping after program termination, 
h q, h R or h o to get additional info. 
    DB<2> 

salida en el terminal 2:

1 

Tenga en cuenta la frase si desea salida en debug termin Al

select $DB::OUT 

Si eres usuario de vim, instalar este plugin: dbg.vim que proporciona soporte básico para Perl

6

Para ejecutar la secuencia de comandos bajo depurador Perl se debe utilizar -d interruptor:

perl -d script.pl 

Pero Perl es flexible. Se suministran algunos ganchos y puede forzar depurador para trabajar como desee

Así que utilizar diferentes depuradores puede hacer:

perl -d:DebugHooks::Terminal script.pl 
# OR 
perl -d:Trepan script.pl 

Mira estos módulos here y here

Hay varias Perl más interesante Los módulos que se enganchan en la parte interna del depurador de perl: Devel::NYTProf, Devel::Cover

Y many others

+1

Encontré Devel :: NYTProf invaluable para identificar y acelerar los puntos lentos en mi código perl. –

+0

@MatthewLock Sí, [Devel :: NYTProf] (https://metacpan.org/pod/Devel::NYTProf) es una cosa increíble –

Cuestiones relacionadas