IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

[DEBUGGER] Point d'arrêt à chaque itération d'une boucle


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mars 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 138
    Par défaut [DEBUGGER] Point d'arrêt à chaque itération d'une boucle
    Bonsoir,

    je rencontre un souci d'utilisation du debugger lors de l'utilisation d'un point d'arrêt au sein d'une boucle.

    Le code suivant ajoute un point d'arrêt dans une boucle si $_ modulo 10 vaut 0 et fonctionne bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
      DB<1> l 1-100
    1       #!/usr/bin/env perl
    2:      use strict;
    3:      use warnings;
    4:      use feature 'say';
    5
    6==>    foreach ( 10..100 ) {
    7:          my $dummy1;
    8:          my $dummy2;
    9       }
      DB<2> b 8 $_ % 10 == 0
      DB<3> L
    test-debugger.pl:
     8:         my $dummy2;
       break if ($_ % 10 == 0)
      DB<3> c
    main::(test-debugger.pl:8):         my $dummy2;
      DB<3> p $_
    10
      DB<4> c
    main::(test-debugger.pl:8):         my $dummy2;
      DB<4> p $_
    20
      DB<5> c
    main::(test-debugger.pl:8):         my $dummy2;
      DB<5> p $_
    30
    J'essaie d'utiliser un point d'arrêt dans une boucle qui lit un fichier, mais seul le premier arrêt va fonctionner et ensuite la commande c va terminer le programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    main::(./TECHD600.pl:151):      exit main(@ARGV);
      DB<1> l 20-40
    20
    21
    22      sub process0 {
    23:         my ( $calling_pid, $calling_script, $prop_file, $java_file ) = @_;
    24
    25:         my $perl_program = $ENV{'TMP_TECH'} . '/' . $calling_script . '_' . $calling_pid . '.pl';
    26:         my $i = 0; # compteur de ligne non commentaire
    27
    28:         unless ( open ( my $fh_r, '<',  $prop_file ) ) {
    29:             exit 20;
    30          } else {
    31:             while ( <$fh_r> ) {
    32:                 next if $_ =~ m{^ \s* ([#].*)* $}x; # lignes vides ou commentaires
    33:                 $i++;
    34:                 chomp ( my $record = $_);
    35:                 my $record_clear = process_record ( $i, $record );
    36:                 create_loadvars_prg ( $i, $perl_program, $java_file,  $record_clear );
    37              }
    38          }
    39
    40:         return 0;
      DB<2> b 35 defined $_
      DB<3> L
    ./TECHD600.pl:
     35:                my $record_clear = process_record ( $i, $record );
       break if (defined $_)
      DB<3> c
    main::process0(./TECHD600.pl:35):                   my $record_clear = process_record ( $i, $record );
      DB<3> p $record
    CT_depotDirectory=${PORT_PORTAIL_DATA}depot/
      DB<4> c
    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.
    Est-ce que j'utilise mal le debugger dans ce second exemple ?

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    la syntaxe:
    me paraît correcte et l'affichage de la commande L semble le confirmer.

    Cela dit, je ne comprends pas parfaitement pourquoi tu fais cela. Dans cette boucle, a priori, $_ est toujours défini (du moins tant que tu n'as pas fini de lire le fichier, mais quand tu as fini de le lire, tu sors de la boucle while). Donc, tu pourrais aussi bien mettre un point d'arrêt inconditionnel.

    Mais je ne comprends pas pourquoi ça ne fonctionne pas pour autant. Es-tu bien sûr que le fichier lu en entrée a bien plusieurs lignes? Là on a l'impression qu'il n'y a peut-être qu'une seule ligne.

    Manifestement, tu maîtrises plutôt bien le debugger, mais je me permets quand même de mettre un lien sur la FAQ sur le debogage en Perl que j'avais faite il y a 3 ou 4 ans. Tu y trouveras peut-être des informations intéressantes, voire une solution à ton problème.

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mars 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 138
    Par défaut
    En fait, j'avais une erreur me faisant sortir dans la fonction process_record appelée dans ma boucle.
    Cela m'a permis de découvrir une autre fonctionnalité intéressante du debugger, la commande w, commande permettant de surveiller par exemple l'évolution d'une variable.

    Le debugger et ses points d'arrêt fonctionnent bien comme prévu et je vais m'empresser de lire ton tuto.

    Désolé pour le bruit

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mars 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2015
    Messages : 138
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    la FAQ sur le debogage en Perl que j'avais faite il y a 3 ou 4 ans. Tu y trouveras peut-être des informations intéressantes, voire une solution à ton problème.
    Tuto lu : c'est super intéressant, comme d'habitude, et cela va me permettre d'être un meilleur débogueur
    Un grand

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Merci, ça fait plaisir.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. affichage a chaque itération d'une boucle
    Par moman dans le forum Débuter
    Réponses: 2
    Dernier message: 25/04/2012, 19h29
  2. Réponses: 6
    Dernier message: 27/05/2010, 10h48
  3. Réponses: 6
    Dernier message: 16/08/2007, 11h19
  4. Comment sauter une itération dans une boucle ?
    Par Kaeguri dans le forum Fortran
    Réponses: 3
    Dernier message: 20/04/2007, 12h30
  5. Réponses: 8
    Dernier message: 15/06/2006, 18h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo