2011-02-09 2 views

Répondre

7

Si vous utilisez un débogueur interactif est OK pour vous, vous pouvez essayer perldebug

10
perl -d your_script.pl args 

comment vous déboguer Perl

+0

La réponse d'Alex a un lien vers la documentation pour '-d' – DVK

+7

Étape 1: ajouter' use strict; utiliser les avertissements; 'en haut de votre script. Si cela ne vous aide pas, passez à l'étape 2: utilisez perl -d. –

4

Je recommande également d'utiliser la Perl debugger.

Cependant, puisque vous avez demandé quelque chose comme -x du shell, jetez un oeil au module Devel::Trace qui fait quelque chose de similaire.

3

L'outil de débogage le plus efficace est encore careful thought, couplé avec des instructions d'impression judicieusement placés.

Brian Kernighan, "Unix for Beginners" (1979)

(et l'amélioration des déclarations d'impression avec Data::Dumper)

+0

Joli petit débat ici sur le débogueur perl aussi http://www.perlmonks.org/?node_id=48579 –

+0

link is dead. S'il vous plaît examiner votre réponse –

+2

Donc, en bref, Perl veut que vous codez comme c'est 1979? –

3

Utilisation Eclipse avec EPIC: Il vous donne un IDE agréable avec des possibilités de débogage, y compris la possibilité de placer des points d'arrêt et le Perl Expression View pour inspecter la valeur des variables.

0

Si vous voulez faire le débogage à distance (pour cgi ou si vous ne voulez pas la sortie du mess avec la ligne de commande de débogage), utilisez ceci:

test donné:

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

Démarrez un écouteur sur quel que soit l'hôte et le port sur la borne 1 (ici localhost: 12345):

$ nc -v -l localhost -p 12345 

pour le support readline utilisation rlwrap (vous pouvez utiliser sur perl -d aussi):

$ rlwrap nc -v -l localhost -p 12345 

et démarrer le test sur un autre terminal (par exemple la borne 2):

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

d'entrée/sortie sur la borne 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> 

sortie sur la borne 2:

1 

Notez la phrase si vous voulez une sortie à la fin du débogage al

select $DB::OUT 

Si vous êtes un utilisateur vim, installer ce plugin: dbg.vim qui fournit un support de base pour perl

6

Pour exécuter votre script sous débogueur de Perl, vous devez utiliser -d switch:

perl -d script.pl 

Mais Perl est flexible. Il fournir quelques crochets et vous pouvez forcer débogueur à travailler comme vous voulez

donc d'utiliser différents débogueurs vous pouvez le faire:

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

Regardez ces modules here et here

Il y a plusieurs perl plus intéressants modules crochet dans les internes débogueur perl: Devel::NYTProf, Devel::Cover

Et many others

+1

J'ai trouvé que Devel :: NYTProf était très utile pour identifier et accélérer les ralentissements de mon code Perl. –

+0

@MatthewLock Ouais, [Devel :: NYTProf] (https://metacpan.org/pod/Devel::NYTProf) est une chose incroyable –

Questions connexes