ile
TRANSCRIPT
ILE
Architecture ILE
Donnez-vous des aILEs avec
ILE
2/69
Architecture ILE
1 – Les modules et les programmes
2 – Les modèles de génération
3 – Les programmes de service
4 – Le répertoire de liage
5 – Les sources de liage
6 – La gestion des groupes d’activation
7 – Le débogage en ILE
3/69
1 - Les modules et les programmes
•ILE : Integrated Language Environment.
•OPM : Original Program Model (antérieur à l’ILE) .
•L'ILE est un environnement de développement apportant :
- modularité et réutilisation du code objet : Unité indépendante, petite et limite des
effets de bord
- API spécifiques
- Possibilité de diviser le développement entre plusieurs ressources
- intégration multi-langages
- résolution dynamique ou statique des appels
4/69
OPM
C’était avant…A l’époque du GAP 3 et des
cartes perforées
La règle était simple:
1 membre source 1 programme
Pour appeler un autre code CALL
5/69
ILE
Concept ILE se compose de 4 unités:
La procédure est l’unité de fonction
Le module est l’unité de compilation
Le programme est l’unité d’exécution
Le programme de service est une réserve de
fonction
6/69
1 -Procédure
•Partie de code dans le contexte ILE.
•Appelée par :
- CALLB ou CALLP (RPGLE) :
* CALLB : appel d'une procédure non
prototypée (procédure principale)
* CALLP : appel d'une procédure prototypée
(sous-procédure) sauf en format libre ou
l’appel est direct (pas de CALLP)
- CALLPRC (CLLE)
CALL PROCEDURE (CBLLE)
Procédure A
H
F
D
I
C
O
QRPGLESRC
Source de type RPGLE
7/69
1 – Module (1)
Procédure A
H
F
D
I
C
O
Source de type RPGLE
Procédure A
H
F
D
I
C
O
MODULE A
CRTRPGMOD
8/69
1 - Module (2)
•Type d'objet *MODULE spécifique à ILE.
•Un module écrit en ILE CL ne peut comporter qu'une seule procédure.
•Un module écrit en ILE COBOL, ILE RPG ou ILE C peut se composer de
plusieurs procédures.
•Les modules ne sont pas directement exécutables mais doivent être liés
dans un programme (*PGM) ou un programme de service (*SRVPGM).
Commande de compilation : CRTxxxMOD (option 15 de la gestion des
membres de PDM). Exemple : CRTRPGMOD à partir d'un membre
source de type RPGLE
9/69
1 – Programme (1)
MODULE BProcédure B
H
F
D
I
O
MODULE A
Procédure A
H
F
D
I
C CALLB 'B'
C ...
C CALLB 'C'
O
MODULE C
Procédure C
H
F
D
I
O
Programme ABC
*PGM
*MODULE
*MODULE
*MODULE
10/69
1 - Programme (2)
•Un programme peut comporter un ou plusieurs modules
•Dans le cas d'un programme multi-modules, les modules sont liés entre eux etcopiés dans l'objet programme. Ce type de liage s'appelle liage statique parcopie.
•Les procédures sont appelées par le code-opération CALLB.
•Syntaxe de CALLB :
C callb 'Nom_de_la_procédure'
- attention à la distinction minuscules/majuscules dans le nom de laprocédure
- le passage de paramètres se fera par 'parm' ou par une 'plist'
- la réception des paramètres dans la procédure appelée se fera par *entryplist ou par une interface de procédure.
- le nom de la procédure appelée peut être une variable de type pointeur: sereporter à la fonction intégrée %PADDR.
11/69
1 - Pour la maintenance…
•DSPPGM PGM(...)
DETAIL(*BASIC/.../*MODULE/*SRVPGM/...)
•DSPSRVPGM SRVPGM(...)
DETAIL(*BASIC/.../*MODULE/*PROCEXP/...)
•DSPMOD MODULE(...)
DETAIL(*BASIC/.../*EXPORT/*IMPORT/*PROCLIST/...)
•En plus des dépendances fichier ↔ programme, il existe en ILE des dépendances
module ↔ programme et programme ↔ programme de service.
•Les commandes DSPPGM, DSPSRVPGM et DSPMOD sont accessibles par
l'option 5 de PDM devant les objets de type *PGM, *SRVPGM et *MODULE
respectivement.
12/69
1 – Conversion d’une application OPM en application ILE
1.Remplacer les CALL des par des CALLB
2.Compiler par l'option 15 de PDM tous les sources des modules appelés
3.Créer un programme de service pour lier tous les modules
4.Supprimer les objets *MODULE/A garder si on utilise des références croisées « maison »
5.Créer un répertoire de liage contenant un programme de service
6.Compiler le programme principal par l'option 14 de PDM après avoir indiqué :
H dftactgrp(*no) actgrp(*new) bnddir('repertoire_de_liage')
Il s'agit-là d'une méthode simplifiée. On pourra bien évidemment créerplusieurs programmes de service si l'on a plusieurs groupes de modules.
Cette méthode est pertinente lorsque les programmes appelés correspondent déjà à des « services applicatifs ».
13/69
Architecture ILE
1 – Les modules et les programmes
2 – Les modèles de génération
3 – Les programmes de service
4 – Le répertoire de liage
5 – Les sources de liage
6 – La gestion des groupes d’activation
7 – Le débogage en ILE
14/69
Les 3 modèles de génération
1 – Les programmes mono-module
2 – Les programmes multi-module
3 – Les programmes de service
15/69
2 - Création d’un programme mono-module
RPGLE
SOURCE
Mbr A
*PGM A*MODULE A
Procédure A*MODULE A
Procédure A
CRTBNDRPG
CRTBNDRPG
•L'option 14 de la gestion des membres de PDM lance la commande CRTBNDxxx (CRTBNDRPG si le source est de type RPGLE).
•Une fois le programme créé, le module stocké dans QTEMP est détruit.
16/69
2 - Création d’un programme multi-module
Il est nécessaire
d'indiquer un point d'entrée externe
appelé PEP (Program Entry
Procedure)
L'option 26 de PDM
devant les objets
module permet de
lancer l'opération
de liage sur ceux-ci
(CRTPGM).
RPGLE
SOURCE
Mbr A
*PGM ABC
*MODULE
A
Proc A
CRTRPGMOD
CRTPGM
*MODULE
CProc CCRTRPGMOD
CBLLE
SOURCE
Mbr B
*MODULE
B Proc BCRTRPGMOD
CLLE
SOURCE
Mbr C
CRTPGM...
MODULE(A B
C)
*MODULE
A
Proc A
*MODULE
B
Proc B
*MODULE
C
Proc C
17/69
2 - Commande CRTPGM (1)
18/69
2 - Commande CRTPGM (2)
Pensez à donner un texte descriptif au programme, sinon
c'est le texte associé au module point d'entrée qui sera pris
par défaut (*ENTMODTXT).
Les modules sont liés par copie dans le programme. Une fois le programme créé, les objets module ne sont plus nécessaires.
Si un module est commun à plusieurs programmes, il est recopié dans chacun de programmes.
Si l'on modifie le source d'un des modules, il faut :
- recompiler le source du module (PDM – Opt 15)
- mettre à jour TOUS les programmes concernés (UPDPGM)
19/69
2 - Commande CRTCLMOD
L'option 15 de PDM devant un membre source de type CLLE lance la commande CRTCLMOD.
20/69
2 - Commande CRTBNDCL
L'option 14 de PDM devant un membre source de type CLLE lance la commande CRTBNDCL (création d’un programme mono-module à partir d’un source CL).
21/69
Architecture ILE
1 – Les modules et les programmes
2 – Les modèles de compilation
3 – Les programmes de service
4 – Le répertoire de liage
5 – Les sources de liage
6 – La gestion des groupes d’activation
7 – Le débogage en ILE
22/69
3 – Les programmes de service (1)
Procédure A
H
F
D I
C CALLB 'B'
O
Procédure B
H
F
D I
C CALLB 'X'
O
MODULE XProcédure X
H
F
D I
C
O
MODULE YProcédure Y
H
F
D I
C
O
MODULE ZProcédure Z
H
F
D I
C
O
Programme AB
*PGM
Programme de
service XYZ
*SRVPGM
23/69
3 - Programme de service (2)
•Objet de type *SRVPGM spécifique à ILE servant à stocker
un ensemble de sous-procédures réparties en modules.
•Créé par CRTSRVPGM à partir de modules
•Cité dans la commande CRTPGM ou enregistré dans un
répertoire de liage.
•Permet l'appel de procédures résidant hors du programme
appelant.
•L'appel d'une procédure incluse dans un programme de service
s'appelle liage statique par référence.
24/69
3 - Création d’un programme de service
CRTRPGMOD
CRTRPGMOD
CRTSRVPGM ....
MODULE (X Y Z)
RPGLE
SRC
Mbr X
RPGLE
SRC
Mbr Y
RPGLE
SRC
Mbr Z
MODULE X
Procédure X
MODULE Y
Procédure Y
MODULE Z
Procédure ZCRTRPGMOD
MODULE X
Procédure X
MODULE Y
Procédure Y
MODULE Z
Procédure Z
*SRVPGM XYZ
•L'option 27 de PDM devant les objets module permet de lancer lacommande CRTSRVPGM sur ceux-ci.
25/69
3 - Utilisation d’un programme de service (1)
*PGM AB
MODULE A
Procédure A
MODULE B
Procédure BMODULE D
Procédure D
MODULE X
Procédure X
MODULE Y
Procédure Y
MODULE Z
Procédure Z
*SRVPGM XYZ
Lien statique
par copie
Lien statique
par référenceLien statique
par référence
26/69
3 - Utilisation d’un programme de service (2)
• Plusieurs scénarii d’utilisation sont possibles :
• le programme appelant fait référence directement au
programme de service.
• Le programme appelant fait référence au programme de
service par l’intermédiaire d’un répertoire de liage.
27/69
3 - Utilisation directe d’un programme de service (2)
•Lors de la création du programme (CRTPGM), on indique le nom du ou des programme(s) deservice concerné(s).
•Dans le cas d'une modification du code source des procédures X, Y ou Z, il faut :
- recompiler ces procédures (CRTxxxMOD – PDM, option 15)
- mettre à jour le programme de service (UPDSRVPGM)
28/69
3 - Commande CRTSRVPGM (1)
29/69
3 - Commande CRTSRVPGM (2)
•Une « signature » est générée, qui permettra de contrôler la cohérence avec leprogramme appelant.
•Dans le paramètre EXPORT (Exportation) :
- si on indique ALL, la signature est générée à partir de toutes les procédures
- si on indique *SRCFILE, la signature est générée à partir des procédures indiquéesdans un membre source d'exportation.
30/69
3 - Mise à jour des programmes et programme de service
•Mise à jour d'un programme :
- recompiler le(s) module(s) modifié(s) (CRTxxxMOD)
- mettre à jour le(s) programme(s) concerné(s) : UPDPGM
•Mise à jour d'un programme de service :
- recompiler le(s) module(s) modifié(s) (CRTxxxMOD)
- mettre à jour le programme concerné : UPDSRVPGM
•Après un UPDSRVPGM, il n'est pas nécessaire de mettre à jour les
programmes qui font référence au programme de service. La résolution
sera faite à l'exécution des programmes, mais uniquement si ceux-ci
s'exécutent dans un nouveau groupe d'activation.
31/69
3 - PDM avec option 27 : créer un programme de service
32/69
3 - PDM avec option 27 : créer un programme de service
33/69
Architecture ILE
1 – Les modules et les programmes
2 – Les modèles de compilation
3 – Les programmes de service
4 – Le répertoire de liage
5 – Les sources de liage
6 – La gestion des groupes d’activation
7 – Le débogage en ILE
34/69
4 – Le répertoire de liage (1)
Objet de type *BNDDIR (créé par CRTBNDDIR).
Liste des modules et/ou de programmes de service.
Gestion par WRKBNDDIRE. Exemple :
35/69
Répertoire de liage (2)
Lors de la création d'un programme (CRTPGM), le compilateur vérifie que l'ensemble des procédures (appelées par CALLB ou CALLP) fait bien partie, soit des modules indiqués au paramètre MODULE, soit des programmes de services indiqués au paramètre BNDSRVPGM :
Programme .................................... PGM________
Module .........................................MODULE ________ .....
Lier programme de service ............ BNDSRVPGM ________ .....
Répertoire de liage ........................ BNDDIR ________
Le répertoire de liage est examiné s'il reste des références non résolues une fois exploités les modules et programmes de service explicitement désignés par les paramètres MODULE et BNDSRVPGM de la commande CRTPGM.
On peut donc créer un programme ILE en respectant les étapes suivantes :
- création d'un répertoire de liage (CRTBNDDIR)
- ajout des modules et/ou programmes de service à ce répertoire de liage (ADDBNDDIRE)
- création du programme (CRTPGM en indiquant les modules liés, le point d'entrée et le nom du répertoire de liage - voir page suivante)
36/69
Utilisation d’un répertoire de liage (1)
*SRVPGM XYZ
CRTPGM PGM (AB)
MODULE(A)
BINDDIR(UTIL)
REPLIAGE
*MODULE X
Procédure X
*MODULE A
Proc A
CALL 'B'
*MODULE Y
Procédure Y
*MODULE Z
Procédure Z
*BNDDIR UTIL
B
Xyz
*MODULE
*SRVPGM
*PGM AB
*MODULE B
Proc B
CALL 'X'
37/69
Utilisation d’un répertoire de liage (2)
Le module indiqué dans la paramètre MODULE de la commande CRTPGM correspond au point d'entrée (PEP).
Le répertoire de liage peut être aussi renseigné dans la commande
CRTBNDRPG.
Le nom du répertoire de liage peut être indiqué en spécification H :
- dans le cas d'un module créé par CRTRPGMOD :
H | bnddir('UTIL')
- dans le cas d'un programme créé par CRTBNDRPG :
H | dftactgrp(*no) <actgrp(*new|*caller)> bnddir('UTIL')
(dftactgrp(*no) et actgrp(*new|*caller) seront détaillés dans la suite du
chapitre)
Exemple de répertoire de liage (les API ILE) : QUSAPIBD
38/69
Architecture ILE
1 – Les modules et les programmes
2 – Les modèles de compilation
3 – Les programmes de service
4 – Le répertoire de liage
5 – Les sources de liage
6 – La gestion des groupes d’activation
7 – Le débogage en ILE
39/69
5 – Les sources de liage (1)
Sans langage de liage – EXPORT(*ALL)
MODULE A
Procédure A
MODULE B
Procédure B
(000...2F5E03)
MODULE X
Procédure X
MODULE Y
Procédure Y
MODULE Z
Procédure Z
*SRVPGM XYZ
Signature : 000...2F5E03
*PGM AB
40/69
5 - Sans langage de liage – EXPORT(*ALL) (2)
•Toutes les procédures du programme de service sont accessibles.
•On visualise la signature :
- au niveau du programme de service par :
DSPSRVPGM SRVPGM(XYZ) DETAIL(*SIGNATURE)
- au niveau du programme par :
DSPPGM PGM(AB) DETAIL(*SRVPGM)
41/69
5 - Sans langage de liage – EXPORT(*ALL) (3)
Signature : 000...08D6C2
MODULE A
Procédure A
MODULE B
Procédure B
(000...2F5E03)
MODULE X
Procédure X
MODULE Y
Procédure Y
MODULE Z
Procédure Z
*SRVPGM XYZ
MODULE P
Procédure P
*PGM AB
42/69
5 - Sans langage de liage – EXPORT(*ALL) (4)
•Si l'on veut ajouter un nouveau module au programme de
service, il faut recréer ce programme de service : la signature
change si EXPORT(*ALL) a été indiquée.
•L'appel du programme AB se termine en erreur : MCH4431 –
Violation de signature de programme.
43/69
5 - Langage de liage
•Intérêt :
- diminuer la dépendance due à la signature, soit en gérant plusieurs signatures, soit
en en forçant la valeur.
- désigner explicitement les procédures accessibles pour en contrôler l’utilisation.
•Mise en oeuvre :
- saisir un membre-source de type BND
- l'indiquer dans SRCFILE/SRCMBR de la commande CRTSRVPGM
•Le nom par défaut du fichier source est QSRVSRC (à créer par CRTSRCPF –
longueur 92).
•Le nom par défaut du membre source est le nom du programme de service.
44/69
5 - Langage de liage – EXPORT(*SRCFILE) (1)
*PGM AB
MODULE A
Procédure A
MODULE B
Procédure B
(000...2F5E03)
Signature : 000...2F5E03
MODULE X
Procédure X
MODULE Y
Procédure Y
MODULE Z
Procédure Z
*SRVPGM XYZ
45/69
5 - Langage de liage – EXPORT(*SRCFILE) (2)
STRPGMEXP PGMLVL(*CURRENT)
EXPORT SYMBOL(X)
EXPORT SYMBOL (Y)
EXPORT SYMBOL (Z)
ENDPGMEXP
•Les symboles exportés peuvent être des procédures, des zones de données ou
un groupe d’activation.
•Remarque : La commande RTVBNDSRC permet de générer a posteriori, à
partir des objets *MODULE, le source en langage de liage.
46/69
5 - Langage de liage – EXPORT(*SRCFILE)
MODULE A
Procédure A
MODULE B
Procédure B
(000...2F5E03)
Signatures : 000...2F5E03
000...08D6C2
MODULE X
Procédure X
MODULE Y
Procédure Y
MODULE ZProcédure Z
*SRVPGM XYZ
STRPGMEXP PGMLVL(*CURRENT)
EXPORT SYMBOL(X)
EXPORT SYMBOL (Y)
EXPORT SYMBOL (Z)
EXPORT SYMBOL (P)
ENDPGMEXP
*PGM AB
STRPGMEXP PGMLVL(*PRV)
EXPORT SYMBOL(X)
EXPORT SYMBOL (Y)
EXPORT SYMBOL (Z)
ENDPGMEXP
MODULE PProcédure P
•La signature générée est visible par DSPSRVPGM ... DETAIL(*SIGNATURE)
47/69
5 - Zones d’import/export (1)
ZONEA IMPORT
callb 'PROCB'
ZONEA EXPORT
callb 'PROCC'
callb 'PROCD'ZONEA IMPORT
PROCA PROCB
PROCCPROCD
ZONEA
48/69
5 - Zones d’import/export (2)
•Ces mots-clés sont à préciser dans la spécification D :
D Zoneexp s 10 export
D Zoneimp s 5 0 import
•Le mot-clé EXPORT signifie que la zone est exportable et donc que son contenupourra être récupéré à partir d'autres modules.
•Une zone ne peut être définie qu'une seule fois en EXPORT et plusieurs fois enIMPORT. Les mots-clés IMPORT et INZ sont incompatibles.
•On peut donc indiquer le nom externe de la zone à importer ou exporter dans uneconstante.
PROC1
Dzone_A s 20 export(cte)
Dcte c 'Imp_Exp'
C callb 'PROC2'
PROC2
Dzone_B s 20 import('Imp_Exp')
49/69
5 - Zones d’import/export (3)
ZONEA IMPORT
callb 'PROCB'
ZONEA EXPORT
callb 'PROCC'
callb 'PROCD'ZONEA IMPORT
PROCA PROCB
PROCCPROCD
ZONEA
PGM1 *PGM
SRVPGM1 *SRVPGM
50/69
5 - Zones d’import/export (4)
•Une zone déclarée dans une procédure d'un programme de service estobligatoirement définie en EXPORT.
•Si l'on utilise le langage de liage, les zones d'import/export doivent être définies
comme symboles exportables. Exemple pour le programme de service
SRVPGM1 :
STRPGMEXP
EXPORT SYMBOL (PROCC)
EXPORT SYMBOL (PROCD)
EXPORT SYMBOL (ZONEA)
ENDPGMEXP
51/69
Architecture ILE
1 – Les modules et les programmes
2 – Les modèles de compilation
3 – Les programmes de service
4 – Le répertoire de liage
5 – Les sources de liage
6 – La gestion des groupes d’activation
7 – Le débogage en ILE
52/69
6 – La gestion des groupes d’activation (1)
Un groupe d’activation est une sous-structure d’un travail dans laquelle s’exécute un programme ou un ensemble de programmes.
Plusieurs groupes d’activation peuvent coexister au sein d’un travail, le but étant de pouvoir allouer des ressources différentes selon les programme (détails en annexe C).
Le groupe d’activation est créé à l’appel du programme ou du programme de service.
Le groupe d’activation permet d’allouer à un ou plusieurs programmes des ressources:
Mémoire,
ODP (open data path),
et de limiter le périmètre
des opérations de substitution,
du contrôle de validation.
53/69
C’est à la création du programme (CRTPGM) ou du programme de service (CRTSRVPGM) que l’on indique le groupe d’activation:
CRTPGM...CTGRP(*NEW│*CALLER│Nom)
CRTSRVPGM . . . ACTGRP(*CALLER│Nom)
NEW (valeur par défaut du CRTPGM) indique qu’à chaque CALL du programme, un nouveau groupe d’activation sera créé. Ce groupe d’activation sera détruit à la fin du programme. Conséquences:
à utiliser pour le premier programme appelant,
à ne pas utiliser pour les programmes appelés,
*CALLER indique que le programme s’exécutera dans le même groupe d’activation que celui dans lequel s’exécute le programme appelant. Conséquences :
à utiliser pour un programme appelé,
à utiliser pour les programmes de service.
6 – La gestion des groupes d’activation (2)
54/69
6 – La gestion des groupes d’activation (3)
NOM permet de nommer le groupe d’activation.
Un groupe d’activation nommé explicitement sera détruit par la commande
RCLACTGRP ou par la fin du travail, mais PAS par la fin de programme (détails
en annexe C).
Les programmes OPM s’exécutent dans un groupe d’activation particulier,
appelé *DFTACTGRP (groupe d’activation par défaut) ; des programmes ILE
peuvent aussi s’y dérouler (valeur par défaut des commandes CRTBNDxxx –
option 14 de PDM).
Pour qu’un programme compilé par la commande CRTBNDRPG (option 14 de
PDM) s’exécute dans un groupe d’activation autre que *DFTACTGRP :
H dftactgrp(*no) <actgrp(*new│*caller)>
L’option 18 du DSPJOB permet d’afficher les groupes d’activation du travail.
55/69
6 – Délimitation du périmètre des ouvertures, des substitutions et du contrôle de validation
Substitution :
OVRDBF … OPNSCOPE(*ACTGRPDFN│*JOB)+
OVRSCOPE(*CALLVL│*ACTGRPDFN│*JOB)
Ouverture :
OPNDBF …
OPNSCOPE(*ACTGRPDFN│*ACTGRP│*JOB)
Contrôle de validation :
STRCMTCTL CMTSCOPE(*ACTGRP│*JOB)
56/69
6 – Délimitation du périmètre des ouvertures, des substitutions et du contrôle de validation
*ACTGRPDFN permet une interprétation dépendante du contexte:
en OPM, limite le périmètre des opérations au niveau d’appel du
programme les effectuant.
en ILE, limite le périmètre des opérations au groupe d’activation
du programme les effectuant.
*CALLLVL limite le périmètre des opérations au programme les
effectuant et aux programmes de niveau d’appel supérieur.
*JOB étend le périmètre des opérations à l’ensemble du travail.
*ACTGRP a le même résultat que *ACTGRPDFN dans le contexte
ILE
57/69
6 - Exemples
MENU
1. Prise de commandes
2. Facturation
*DFTACTGRP
Fichier A : SHARE(*YES)
Entrée/Sortie
Groupe d'activation : CMD
A
PC_1 PC_2 PC_3
CMD
FAC
Fichier A : SHARE(*YES)
Entrée
Groupe d'activation : FAC
A
FAC_1 FAC_2
JOB
58/69
6 - Exemples
• Dans cet exemple, le fichier A est ouvert en SHARE(*YES) et
OPNSCORE(*ACTGRPDFN).
• Les programmes PC_1, PC_2 et PC_3 s’exécutent dans le groupe
d’activation FAC. Le fichier A est ouvert en ENTREE(I) et l’ODP est
partagé entre 2 programmes.
• Si les cinq programmes s’exécutaient dans le même groupe d’activation,
les programmes FAC_1 et FAC_2 devraient ouvrir le fichier A en
Entrée/Sortie.
59/69
6 - Gestion du groupe d’activation (1)
Le groupe d’activation est créé à l’appel d’un programme ou d’un programme de service.
Ce groupe d’activation est défini par les commandes suivantes :
CRTPGM . . . ACTGRP(*NEW│*CALLER│Nom)
CRTSRVPGM . . . ACTGRP(*CALLER│Nom)
1. Un groupe d’activation est détruit:
à la fin du travail si *DFTACTGRP
à la fin du dernier programme l’utilisant si *NEW
explicitement (pour un groupe d’activation nommé) par :
la commande RCLACTGRP (reclaim activation group)
un CALLB de l’API CEETREC ou CEE4ABN
la fin du travail
60/69
6 - Gestion du groupe d’activation (2)
Tant qu’un groupe d’activation nommé n’est pas détruit explicitement:
La commande UPDSRVPGM sera sans effet
Les variables locales déclarées avec STATIC ne seront pas réinitialisées
Les variables définies en IMPORT/EXPORT ne seront pas réinitialisées
Attention, un programme contenant :
H dftactdrp(*no)
Et compilé par la commande CRTBNDRPG(option 14 de PDM), s’exécutera dans le groupe d’activation QILE, qui ne sera détruit qu’explicitement, et non à la fin du programme.
Pour que le programme s’exécute dans un nouveau groupe d’activation à chaque appel il faut indiquer :
H dftactgrp(*no) actgrp(*new)
61/69
Architecture ILE
1 – Les modules et les programmes
2 – Les modèles de compilation
3 – Les programmes de service
4 – Le répertoire de liage
5 – Les sources de liage
6 – La gestion des groupes d’activation
7 – Le débogage en ILE
62/69
7 - Le débogueur ILE
Fonctionnalités.
Affichage du source ou de la liste de compilation
Points d’arrêt et/ou pas-à-pas
Affichage/modification de variables
Commandes de débogage
Marche à suivre
Compiler en choisissant le niveau de débogage
STRDBG
Ajouter des points d’arrêt ou choisir le mode pas-à-pas
Points d’arrêt : F6 ou commande BREAK, puis exécution du programme
Sortie du source (F3), puis CALL ou
Lignes de commande (F21), puis CALL
Mode pas-à-pas : F10, puis exécution du programme par CALL
ENDDBG
63/69
7 - Niveau de débogage
Par le mot-clé DBGVIEW
*NONE
*STMT(défaut)
*SOURCE
*COPY
*LIST
*ALL
Dans les commandes CRTBNDxxx (option 14 de PDM) et CRTxxxMod (opt 15 de PDM)
Le membre source devra être en ligne (au moment de débogage) pour *SOURCE, *COPY et *LIST.
64/69
7 - Appel du débogage
Pour les programmes OPM (RPG/400):
- STRDBG . . . OPMSRC(*yes), si les sources ont été compilés avec OPTION
(*LSTDBG ou *SRCDBG)
- STRISDB (option 34 de PDM devant l’objet programme)
65/69
7 - Panneau de débogage
66/69
7 - Panneau de débogage (suite)
F3=Arrêter programme
F5=Réafficher
F6=Ajouter/Effacer point d’arrêt
F9=Rappel
F10= Pas à pas
F11=Variable
F12=Reprendre
F13=Gérer points d’arrêt du module
F14=Gérer liste de modules
F15=Choisir vue
F16=Relancer FIND
F17=Guet de variable
F18=Gérer le guet
F19=Gauche
F20=Droite
F21=Entrée de commandes
F22=Pas à pas
F23=Afficher sortie(programmes en C/C++)
F24=Autres touches
Les touche de fonction disponibles sont :
67/69
7 - Choix de la vue
•Les possibilités de choix de vues dépendent du paramètre DBGVIEW de compilation.
•Le choix se fait par la touche de fonction F15.
•Le choix de la vue listage permettra d’obtenir l’affichage de la page suivante.
68/69
7 - Les principales commandes de débogage (1)
Break : définir un point d’arrêt
Clear : supprimer un point d’arrêt
Watch : point d’arrêt si variable modifiée
Attr : afficher les attributs d’une variable
Eval : afficher le contenu ou modifier une variable
Equate : définir des raccourcis
Display : affichage des raccourcis
Find : rechercher une chaîne ou un numéro de ligne
Help : aide des commandes
Set : modifier les options de débogage
Step : exécuter n lignes avant le prochain arrêt
69/69
7 - Les principales commandes de débogage (2)
Up : déplacement dans le source vers le haut
Down : déplacement dans le source dans le bas
Left : déplacement dans le source vers la gauche
Right : déplacement dans le source vers la droite
Top : déplacement au début du source
Bottom : déplacement à la fin du source
Next : se positionner sur le point d’arrêt suivant
Previous : se positionner sur le point d’arrêt précédent
Certaines commandes sont accessibles par des touches des fonctions.
70/69
7 - Exemple
BREAK 40
BREAK 40 WHEN *in02=‘1’
CLEAR 40
CLEAR PGM
STEP 10
EVAL datcmd
EVAL *in(1…9)
EVAL *in03=‘1’
EVAL datcmd=datsai
EVAL %substr(adrcli 15 10)
ATTR datcmd
EQUATE dat EVAL datcmd
FIND ‘*inzsr’
WATCH dpt
71/69
7 - Compléments sur le débogage
F10 (step over) : pas à pas, sans rentrer dans la procédure appelée
F22 (step into) : pas à pas, en rentrant dans la procédure appelée
F14 permet de gérer la liste des programmes de service accessible.