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 ?