2012-01-19 11 views
17

programa Mi Perl parece:¿Cómo configurar un punto de interrupción en un archivo particular en el programa Perl?

foo/ 
foo/bar/ 
for/bar/test.pm 
foo.pm 
foo/bar.pm 
test.pl 

y utilizar perl test.pl para iniciar el programa. Quiero depurar un sub en foo/bar/test.pm. ¿Cómo establecer un punto de interrupción en ese sub?

¿Cómo puedo hacer esto?

Gracias.

+2

No estoy satisfecho con la respuesta proporcionada. ¿Qué es la sintaxis 'b [ln]' requerida para romper en una línea particular en un archivo en particular? – Adrian

Respuesta

22

Para depurar una secuencia de comandos de perl, use el modificador -d para invocar el depurador.

perl -d test.pl 

Dentro del depurador puede utilizar b <line no> para establecer un punto de interrupción en el archivo actual. A veces es una molestia para establecer un punto de interrupción en un archivo que no se ha cargado todavía o que se ha cargado hace mucho tiempo, por lo que también puede poner la línea

$DB::single = 1; 

en cualquier lugar en cualquier programa de Perl, y la el depurador se romperá inmediatamente después de ejecutar esa línea. Esta también es una buena forma (¿la única forma?) De establecer un punto de interrupción en el código que se ejecutará en tiempo de compilación.

+3

Merece la pena señalar que el comando 'f' en el depurador cambiará a la visualización de un nombre de archivo, como en 'f /Path/To/Module.pm'; el archivo debe estar ya cargado. Luego puede establecer un punto de interrupción, no solo en el punto de entrada de una subrutina, sino en cualquier línea válida en ese archivo. – amp108

+2

'$ DB :: single = 1;' línea de trabajo para cualquiera? No se detiene el control supongo que – Bathakarai

+0

@Bathakarai funcionó para mí. –

9

sólo tiene que utilizar el nombre completo de la sub como el argumento de b:

b foo::bar::test::subname 

Ejemplo:

$ perl -d -e'use CGI; CGI->new' 
... 
main::(-e:1): use CGI; CGI->new 
    DB<1> b CGI::new 
    DB<2> r 
CGI::new(.../CGI.pm:337): 
337:  my($class,@initializer) = @_; 
    DB<2> q 
+0

Esta es la respuesta real a la pregunta del OP. (Ya lo sabía, y de hecho estaba buscando la información proporcionada en las otras respuestas). –

Cuestiones relacionadas