2010-10-04 3 views
25

J'ai un script système en Perl. J'ai besoin d'un équivalent de bash -x pour déterminer ce qui ne va pas avec le script. Y at-il quelque chose d'équivalent?Existe-t-il un moyen d'activer le traçage dans perl (équivalent à bash -x)?

EDIT: Ce que bash -x fait est qu'il imprime chaque ligne lors de son évaluation. Cela rend le code de débogage qui manque juste une variable de chemin ou un fichier très facile.

+1

Expliquez ce que vous voulez faire en termes de ce que vous êtes désireux de le faire. Pas en termes de shell arbitraire spécifique. –

+1

duplication possible de [Comment puis-je faire Perl et Python imprimer chaque ligne du programme en cours d'exécution?] (Http://stackoverflow.com/questions/2872089/how-can-i-make-perl-and-python-print -each-line-of-the-programme-being-execute) – daxim

+0

duplication possible de [Quelles sont les bonnes méthodes de débogage Perl?] (http://stackoverflow.com/questions/1037583/what-are-some-good- perl-debugging-methods) – Ether

Répondre

32

Jetez un oeil à Devel::Trace ou Devel::ebug.

Donné ce programme nommé w.pl:

#!/usr/bin/perl 

use strict; 
use warnings; 

my $answer = 42; 

if ($answer == 6 * 9) { 
    print "everything is running fine.\n"; 
} else { 
    warn "there must be a bug somewhere...\n"; 
} 

Vous pouvez utiliser Devel::Trace pour assister à l'exécution:

perl -d:Trace w.pl 

qui produit la sortie suivante:

>> w.pl:6: my $answer = 42; 
>> w.pl:8: if ($answer == 6 * 9) { 
>> w.pl:11:  warn "there must be a bug somewhere...\n"; 
there must be a bug somewhere... 
+2

Erreur Perl thew: Impossible de localiser Devel/Trace.pm dans @INC (.... – AjayKumarBasuthkar

+3

Cela a fonctionné: PERLDB_OPTS = "AutoStruct NonStop" perl -d ./trial.pl – AjayKumarBasuthkar

2

Toujours inclure ces déclarations dans vos scripts Perl:

use strict; 
use warnings; 

Si vous voulez déboguer, utilisez le commutateur -d. Et voici les commandes: http://www.domainavenue.com/pl-debug.htm

Espérons que cela aide.

6

Vous devriez regarder "perl -d" (activer le débogueur) ou "perl -c" (vérifiez votre script avant l'ex ecuting

+3

Soyez averti, "avant d'exécuter" ne signifie pas que le code ne s'exécute pas.Tout code dans un bloc 'BEGIN' (ou dans un module qui a été inclus avec' use') sera exécuté même si vous utilisez l'option '-c':' perl - cle 'BEGIN {print "oups, ceci lance"} print "mais cela ne fonctionne pas"' '. –

3

Le module Devel::DumpTrace est disponible depuis 2011.

Exemple d'utilisation:

$ cat demo.pl 
# demo.pl 
# a demonstration of Devel::DumpTrace 
$a = 1; 
$b = 3; 
$c = 2 * $a + 7 * $b; 
@d = ($a, $b, $c + $b); 

$ perl -d:DumpTrace demo.pl 
>>>>> demo.pl:3:  $a:1 = 1; 
>>>>> demo.pl:4:  $b:3 = 3; 
>>>>> demo.pl:5:  $c:23 = 2 * $a:1 + 7 * $b:3; 
>>>>> demo.pl:6:  @d:(1,3,26) = ($a:1, $b:3, $c:23 + $b:3); 
Questions connexes