2011-02-09 16 views

risposta

7

Se si utilizza un debugger interattivo è OK per voi, si può provare perldebug

10
perl -d your_script.pl args 

è come il debug Perl

+0

La risposta di Alex ha un collegamento alla documentazione per '-d' – DVK

+7

Passaggio 1: aggiungere' use strict; usa gli avvertimenti; 'all'inizio del tuo script. Se questo non aiuta, vai al passaggio 2: usa perl -d. –

4

Vorrei inoltre consiglia di utilizzare il Perl debugger.

Tuttavia, dal momento che hai chiesto qualcosa di simile allo -x della shell, dai uno sguardo al modulo Devel::Trace che fa qualcosa di simile.

3

Lo strumento di debug più efficace è ancora careful thought, accoppiato con istruzioni print giudiziosamente collocati. (Dichiarazioni e migliorando stampa con Data::Dumper)

Brian Kernighan, "Unix for Beginners" (1979)

+0

Bel dibattito qui sul perl debugger anche http://www.perlmonks.org/?node_id=48579 –

+0

link is dead. Si prega di rivedere la risposta –

+2

Quindi, in breve, Perl vuole che tu codi come se fosse il 1979? –

3

Usa Eclipse con EPIC: Gli dà un bel IDE con possibilità di debug, tra cui la possibilità di posizionare i punti di interruzione e la Perl Expression View per ispezionare la valore delle variabili.

0

Se si vuole fare debug remoto (per cgi o se non si desidera attivare pasticciare con riga di comando di debug) utilizzare questo:

dato test:

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

avviare un listener su qualunque host e la porta sul morsetto 1 (qui localhost: 12345):

$ nc -v -l localhost -p 12345 

per l'uso sostegno readline rlwrap (è possibile utilizzare sul perl -d troppo):

$ rlwrap nc -v -l localhost -p 12345 

E iniziare il test su un altro terminale (dicono morsetto 2):

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

Input/Output sul morsetto 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> 

uscita sul terminale 2:

1 

Si noti la frase se si desidera l'output sul terminale di debug Al

select $DB::OUT 

Se sei un utente vim, installare questo plugin: dbg.vim che fornisce il supporto di base per perl

6

Per eseguire lo script con debugger Perl si dovrebbe usare -d interruttore:

perl -d script.pl 

Ma perl è flessibile. Esso fornisce alcuni ganci e si può costringere debugger per lavorare come si desidera

Quindi, per utilizzare diverse debugger si può fare:

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

Guardate questi moduli here e here

ci sono parecchi più interessanti perl moduli che agganciano in perl interni debugger: Devel::NYTProf, Devel::Cover

E many others

+1

Ho trovato Devel :: NYTProf inestimabile nell'identificare e velocizzare i punti lenti nel mio codice perl. –

+0

@MatthewLock Sì, [Devel :: NYTProf] (https://metacpan.org/pod/Devel::NYTProf) è una cosa incredibile –

Problemi correlati