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

Cobol Discussion :

[Unix] Problème de perform qui se termine mal


Sujet :

Cobol

  1. #1
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut [Unix] Problème de perform qui se termine mal
    bonjour,

    dans un programme cobol j'ai le plantage suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Object Code error : file '/apps/atlas/atlas2v0/sb2/site/binbtch/K1PZP2.int'
    error code: 153, pc=0, call=1, seg=0
    153     Subscript out of range (in K1PZP2.cbl, line 1158)
     
    JK1ZP2 - End of step   S020 - K1PZP2     - 17/09/08 23:55:59 - 00:00:00 - RC = 255
    en debugant je m'aperçois que le prog a un moment donné se perd dans son perform, c-à-d que pendant son exécution il passe dans un perform pour aller dans une fonction mais une fois celle ci terminée, il ne revient pas à la fin du perform mais continue d'une manière séquentielle la suite du programme ...

    et là c'est le gros foutoir ...

    quelqu'un a une idée svp ?

    je suis sous UNIX AIX5
    cobol V4.0

    par avance merci

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Points : 266
    Points
    266
    Par défaut
    Bonjour,

    Pourrais tu montrer le code (le perform et le bloc "performé") stp ?

  3. #3
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 058
    Points
    32 058
    Par défaut
    tiens, j'avais eu la même sous MVS.....

    depuis, je code tous mes blocs comme suis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     PERFORM S06-PRODIR  
        THRU S06-PRODIR-F.
    *                                                        
     S06-PRODIR.                                             
          blahblahblah       
         .                                                   
     S06-PRODIR-F.    EXIT.                                  
    *
    avec le perform thru plus le exit, y'a plus de lézard. Enfin sous MVS.
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  4. #4
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    vla le code:
    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
    IF W001-W1275K(WW-CPT-W001) NOT = 1
          *        MOVE DL33-A0230          TO W-CURR
          *        MOVE ZERO                TO W-RANK
          *        PERFORM SEARCHRANK
                  IF W-RANK = 2
                     COMPUTE W-N15V2 = DL33-CT-A9060 / 100
                     MOVE W-N15V2        TO ENR-QTYCRE
                  END-IF
                  IF W-RANK = 1
                     COMPUTE W-N16V1 = DL33-CT-A9060 / 10
                     MOVE W-N16V1        TO ENR-QTYCRE
                  END-IF
                  IF W-RANK = ZERO
                     MOVE DL33-CT-A9060
                                         TO W-N18
                     MOVE W-N18          TO ENR-QTYCRE
                  END-IF
          *        MOVE DL33-CT-A9060    TO ENR-QTYCRE
          * Operation Rate
                  MOVE 1                        TO W-N5V7
                  MOVE W-N5V7                   TO ENR-COURSE
               ELSE
          * recherche taux
                  PERFORM RECHERCHE-TAUX THRU FIN-RECHERCHE-TAUX
                  IF SQLCODE = ZERO

    le perform RECHERCHE-TAUX qui est concerné.

    la fonction appelée:
    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
    RECHERCHE-TAUX SECTION.
               MOVE 0 TO WW-NB-JOUR.
           ETIQ.
               PERFORM APPEL-SERVICE-S74A THRU FIN-APPEL-SERVICE-S74A.
               MOVE DL33-DT-A0230         TO DZ03-A0230.
               MOVE B84A-SDAT1            TO DZ03-A0830.
               PERFORM SELECT-DZ03 THRU FIN-SELECT-DZ03.
               IF SQLCODE NOT = 0 AND WW-NB-JOUR NOT < - 10
                  GO TO  ETIQ
               ELSE
                  IF SQLCODE NOT = 0 AND WW-NB-JOUR < - 10
                     DISPLAY 'PAS DE TAUX pour : ' DZ03-A0230
                     ' dans les 10 jours ouvres a partir du : '
                     DL33-DT-A9780
                  END-IF
               END-IF.
           FIN-RECHERCHE-TAUX.
               EXIT.
    sachant que l'etiquette a l interieur plus le go to ne sont responsable du disfonctionnement car meme sans ca ne fonctionne pas !!!

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Points : 266
    Points
    266
    Par défaut
    RECHERCHE-TAUX est une SECTION, et de mémoire (j'ai pas trop le temps de vérifier ... dsl) le PERFORM <section> n'est pas "compatible" avec le THRU.
    De plus FIN-RECHERCHE-TAUX est une étiquette simple donc dans ton exemple, tu fais un PERFORM <section> THRU <paragraphe> ... ce qui n'est pas super propre...

    Donc, je pense que pour résoudre ton problème, soit changer RECHERCHE-TAUX en étiquette simple, soit définir la fin de la section.

  6. #6
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 058
    Points
    32 058
    Par défaut
    Ah oui, les sections, je les avait oubliées, celles-là.....soit on en met partout, soit on en met nulle part. Mais le mélange des genres est hautement casse-gueule. Et ça se termine généralement en Fall through(c'est-à-dire qu'on continue à descendre le code là ou on devrait revenir au perform, ce qui t'est arrivé).

    Si c'est de la maintenance et qu'il y a des sections à certains endroits, et pas à d'autres, je te conseille vivement de refactoriser tout ça de manière standardisée(sections partout ou nulle part, c'est toi qui voit), parceque sinon tu n'as pas fini d'avoir ce genre d'effets désagréables - d'autant qu'ils surviennent parfois après une modification ailleurs dans le code.....
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  7. #7
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    oui tout a fait d accord avec vous ...

    je n arrivais pas a trouver le probleme, donc je me suis mis a essayer un tas de truc comme ajouter des sections, des thru, des fin etiquette + exit .... mais rien n y fait !

    neanmoins j ai reussi a eviter ce probleme en changeant un test au niveau d un tableau declaré en working puis charger depuis le fichier en entree ...

    pas compris pourquoi juste un if indice du table = X pose aucun probleme tandis que if indice > x pose probleme .... vraiment bizarre mais ca marche ...

    etant donne que ce n est pas mon prog j ai laissé tel quel ....

    en tous cas merci

    si j ai des news sur ce sujet je les posterai ...

    a+

  8. #8
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 058
    Points
    32 058
    Par défaut
    mouais. Le problème, c'est quand même que ça peut réapparaitre à la procheine modif. Toujours sur MVS, c'étaient des modifs qui n'avaient rien à voir qui provoquaient le Fall Through.....pareil pour toi, il semblerait. Rare, mais ennuyeux. Enfin, tu t'en est sorti, c'est toujours ça.

    Merci de nous avoir tenu au courant, en tous cas.
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  9. #9
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    Sous UNIX je ne sais pas.
    pour les z/OS ciens, en MVS j'ai déjà vu des trucs comme ça : généralement, écrasement de la TGT -> COBOL perd ses racines et est largué. La parade qui fonctionne le plus souvent (on est d'accord, uniquement chez les z/OS) :
    Recompiler et re-tester le pgm avec une CBL SSRANGE. Le plantage arrive normalement sur l'instruction qui provoque l'écrasement mémoire. Le plus souvent, après c'est trop tard pour s'y retrouver,
    Corriger puis supprimer cette option SSRANGE extrèmement consommatrice, totalement à proscrire en prod, mais dans des cas extrèmes redoutablement efficace.

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

Discussions similaires

  1. [C#] Probléme de performance avec IsDbNull
    Par jab dans le forum Windows Forms
    Réponses: 8
    Dernier message: 04/04/2005, 11h39
  2. [oracle 9i][Workbench]Problème de performance
    Par nuke_y dans le forum Oracle
    Réponses: 6
    Dernier message: 03/02/2005, 17h38
  3. menu qui se positionne mal
    Par peck dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/12/2004, 23h24
  4. [MFC]dialogues qui s'initialisent mal
    Par Tsunamis dans le forum MFC
    Réponses: 4
    Dernier message: 25/03/2004, 12h57
  5. [ POSTGRESQL ] Problème de performance
    Par Djouls64 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/05/2003, 16h18

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