2012-01-19 11 views
17

programma Il mio Perl assomiglia:Come impostare il punto di interruzione su un particolare file nel programma Perl?

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

e utilizzare perl test.pl per avviare il programma. Voglio eseguire il debug di un sub in foo/bar/test.pm. Come impostare un punto di interruzione su quel sottotitolo?

Come posso fare questo?

Grazie.

+2

io non sono soddisfatto della risposta fornita. Qual è la sintassi 'b [ln]' necessaria per interrompere una particolare riga in un particolare file? – Adrian

risposta

22

Per eseguire il debug di uno script perl, utilizzare lo switch -d per richiamare il debugger.

perl -d test.pl 

All'interno del debugger è possibile utilizzare b <line no> per impostare un punto di interruzione nel file corrente. A volte è una seccatura per impostare un punto di interruzione in un file che non è stato ancora caricato o che è stato caricato molto tempo fa, in modo da poter anche mettere la linea

$DB::single = 1; 

ovunque in qualsiasi programma perl, e la il debugger si interromperà immediatamente dopo l'esecuzione di quella riga. Questo è anche un buon modo (l'unico modo?) Per impostare un punto di interruzione nel codice che verrà eseguito in fase di compilazione.

+3

Da notare, il comando 'f' nel debugger passerà alla visualizzazione di un nome file, come in 'f /Path/To/Module.pm'; il file deve essere già caricato. Quindi è possibile impostare un punto di interruzione, non solo nel punto di ingresso di una subroutine, ma su qualsiasi riga valida in quel file. – amp108

+2

'$ DB :: single = 1;' linea di lavoro per nessuno? Non si ferma il controllo credo che – Bathakarai

+0

@Bathakarai abbia funzionato per me. –

9

Basta usare il nome completo della sub come argomento b:

b foo::bar::test::subname 

Esempio:

$ 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

Questa è la risposta effettiva alla domanda dell'OP. (lo sapevo già, e in effetti stavo cercando le informazioni fornite nelle altre risposte). –

Problemi correlati