©óÓ~ DEBUG_DCL.BCKHÐ DEBUG_DCL.BCK:BACKUP DEBUG_DCL.*/EXCLUDE=*.BCK/LOG VMS:DEBUG_DCL.BCK/SAV QUIVOGNE_L ‹@€cJuw›”V5.3 _DECUSF::  _$1$DIA1: V5.3 ~ ð*[QUIVOGNE_L]DEBUG_DCL.COM;2+,-è. /‹@ 4L Vÿ-¨0ú123KÿPWO 56ÀzMRw›”7û¥Rw›”89G‹@HˆÿJÿ$!'f$verify(0)'$!++$! Procédure de DEBUG DCL...$!--!$ if f$mode() .nes. "INTERACTIVE"@$ then write sys$output "Utilisable uniquement en interactif..."$ exit$ endif$ set term/application;$ all = p1+" "+p2+" "+p3+" "+p4+" "+p5+" "+p6+" "+p7+" "+p8$ lec1:&$ if f$edit(all,"collapse") .eqs. "" ?$ then read/prompt="Fichiers et paramètres : " sys$command all $ goto lec1$ endif!$ com_file = f$element(0," ",all)!$ file = f$parse(com_file,".com")$ params = all - com_file$ esc[0,7] = 27$ bold = "''esc'[1m"$ reverse = "''esc'[7m"$ norm = "''esc'[0m"$!++$! Définition des keys...$!---$ define/key/Nolog/term/echo/erase kp0 "STEP"-$ define/key/Nolog/term/echo/erase comma "GO"$ close/nolog debug_w.$ open/write debug_w sys$scratch:debug_dcl.tmp$ close/nolog debug_p$ open debug_p 'file'$ buffer_debug = ""$ buffer_debug_1 = ""$ i = 0$ j = 0$ eof_flag = "FALSE" $ boucle:$ if eof_flag then goto fin$$ read/end_of_file=eof debug_p ligne $ goto no_eof$ eof:$ eof_flag = "TRUE" $ ligne = "$" $ no_eof: $ i = i + 1+$ ligne_bis = f$edit(ligne,"trim,compress")6$ ligne_ter = f$edit(ligne_bis - "$","trim,uncomment"))$ first_verb = f$element(0," ",ligne_ter)/$ at_sign = f$extract(0,1,first_verb) .eqs. "@"%$ label = f$element(0,":",first_verb)7$ next_one = f$extract(0,1,f$element(1,":",first_verb))@$ if label .eqs. first_verb .or. next_one .eqs. "=" .or. at_sign$ then label = ""$ else label = label + ":"$ endif1$ if f$extract(0,1,ligne_bis) .eqs. "$" .and. -, f$edit(first_verb,"upcase") .nes. "THEN"$ then&$ write debug_w "$ debug_line = ''j'"$ write debug_w "$ set verify"$ gosub ecriture_w"$ write debug_w "$!'f$verify(0)'"$$ write debug_w "$ gosub debug_sub" $ buffer_debug = buffer_debug_1$ gosub ecriture_w$ buffer_debug_1 = ""$ buffer_debug = ""$ j = i$ endif2$ if label .nes. "" then write debug_w "$''label'"%$ buffer_debug_1 = buffer_debug_1 + -4 f$fao("!5SL!AS",f$length(ligne-label),ligne-label)J$ ligne = "$!''reverse'''f$fao("!5SL",i)'''norm' > " + bold + ligne + normF$ buffer_debug = buffer_debug + f$fao("!5SL!AS",f$length(ligne),ligne)$! $ goto boucle$ fin:$ close debug_w$ close debug_pL$ convert sys$scratch:debug_dcl.tmp sys$scratch:debug_dcl.tmp/fdl=sys$input:RECORD( CARRIAGE_CONTROL carriage_return! FORMAT variableH$ append/nolog 'f$parse("debug_dcl.dat;0",f$environment("procedure"))' - sys$scratch:debug_dcl.tmp5$ delete/nolog/noconfirm sys$scratch:debug_dcl.tmp;-1$ define/nolog GO$DEBUG "0"$ define/nolog BREAK$DEBUG "/"4$ write sys$command "Tapez ? pour avoir une aide..."%$ @sys$scratch:debug_dcl.tmp 'params'&$ write sys$command f$message($status)$ exit $ ecriture_w:&$ if buffer_debug .eqs. "" then return($ longueur = f$extract(0,5,buffer_debug)($ buffer_debug = buffer_debug - longueur $ longueur = f$integer(longueur)$ if longueur .ne. 0$ then-$ enreg = f$extract(0,longueur,buffer_debug)&$ buffer_debug = buffer_debug - enreg$ write debug_w enreg$ endif$ goto ecriture_wÿÿð*[QUIVOGNE_L]DEBUG_DCL.DAT;1+,f,ˆ./‹@ 4M^-¨0ú123KÿPWO56` @Åâ”7`aOЖ”8`°'¯p9G‹@HˆÿJÿ $ exit $debug_sub:#$ if f$trnlnm("GO$DEBUG") .eqs. "1"G$ then if f$locate(f$fao("/!ZL/",debug_line),f$trnlnm("BREAK$DEBUG"))-* .ne. f$length(f$trnlnm("BREAK$DEBUG"))!$ then define/nolog GO$DEBUG "0"$ else return$ endif$ endif%$ inquire/nopunct debug_rep "DEBUG> "@$ debug_rep = f$edit(debug_rep,"trim,compress,upcase,uncomment")+$ if debug_rep .eqs. "" then goto debug_sub$ if debug_rep .eqs. "?" $ then type sys$input:$ deck? Aide$STEP ou KP0 Pas à pas?GO ou , (keypad) Dérouler la procédure sans pas à pas<BREAK num Pose une break sur la ligne 'num'9CANCEL num Ote le break de la ligne 'num'@EXIT Sort du debugger (équivalent à $exit)MTYPE Visualiser la procédure avec les numéros de lignes4$ commande Exécuter une commande DCL Exemple : DEBUG> $ show symbol dummy DUMMY = "GAG"$ eod$ goto debug_sub$ endif'$ if f$extract(0,1,debug_rep) .eqs. "$"#$ then debug_rep = debug_rep - "$"$ 'debug_rep'$ goto debug_sub$ endif&$ if f$locate(debug_rep,"TYPE") .eq. 0C$ then search 'f$environment("procedure")'/nohighlight/match=and - /format=passal - "$!", - ">"$ goto debug_sub$ endif2$ if f$locate(debug_rep,"STEP") .eq. 0 then return0$ if f$locate(debug_rep,"EXIT") .eq. 0 then exit$$ if f$locate(debug_rep,"GO") .eq. 0*$ then define/process/nolog "GO$DEBUG" "1" $ return$ endif8$ if f$locate(f$element(0," ",debug_rep),"BREAK") .eq. 08$ then debug_rep = f$integer(f$element(1," ",debug_rep))?$ debug_rep = f$trnlnm("BREAK$DEBUG")+f$fao("/!ZL/",debug_rep)*$ define/nolog BREAK$DEBUG "''debug_rep'"$ goto debug_sub$ endif9$ if f$locate(f$element(0," ",debug_rep),"CANCEL") .eq. 08$ then debug_rep = f$integer(f$element(1," ",debug_rep))?$ debug_rep = f$trnlnm("BREAK$DEBUG")-f$fao("/!ZL/",debug_rep)*$ define/nolog BREAK$DEBUG "''debug_rep'"$ goto debug_sub$ endif$ debug_rep = ""$ debug_rep[0,7] = 7$ write sys$command debug_rep$ goto debug_subð*[QUIVOGNE_L]DEBUG_DCL.TXT;1+,w,1. /‹@ 4H €-¨0ú123KÿPWO 56àÿiÏ–”7`qyOЖ”8`‚È'¯p9G‹@HˆÿJÿLaurent QUIVOGNE - @robas DEBUG DCL ~~~~~~~~~ I/ OBJET :+ Cet outil est constitué de deux fichiers : o - DEBUG_DCL.COM o - DEBUG_DCL.DATII/ UTILISATION : B Ce DEBUGGER reproduit quelques fonctionnalités de DEBUG, pour des+ procédures de commande. Il se lance par : 1 $ @DEBUG_DCL procedure_a_debugger p1 p2 ...< p1, p2, ... étant les paramètres de la procédure à débugger: Ensuite, vous devez patienter quelques secondes afin que $ l'initialisation puisse s'exécuter.' Puis vous voyez apparaître à l'écran : Tapez ? pour avoir une aide DEBUG>$ Les commandes sont les suivantes :  DEBUG> type0 Affiche la procédure avec les numéros de ligne.F Cette fonctionnalité est utile pour repérer les lignes sur lesquelles vous souhaitez poser un break. DEBUG> step, Exécute l'instruction visualisée à l'écran.C Un équivalent de cette fonction est la touche '0' du keypad (kp0). DEBUG> exit' Sort du debugger (Equivalent à $exit). DEBUG> go< Permet d'exécuter la procédure sans s'arrêter à chaque pas.G L'exécution ne stoppe qu'à la fin de la procédure ou lorsque vous avezG posé un breakpoint. Dans ce dernier cas, le mode repasse en pas-à-pas.? (Un équivalent de cette fonction est la toucke ',' du keypad). DEBUG> break num4 Permet de poser un break sur la ligne numéro 'num'.# (Voir le paragraphe restrictions). DEBUG> cancel num9 Supprime un break préalablement posé sur la ligne 'num'. DEBUG> $com1 Permet d'exécuter n'importe quelle commande DCL. III/ RESTRICTIONS : o - Symboles et noms logiques :? Le debugger utilise deux symboles et, pour cette raison, vous1 ne devez pas les employer dans votre procédure : DEBUG_LINE DEBUG_REP + Il utilise également deux noms logiques : GO$DEBUG BREAK$DEBUG+ que vous devez également ne pas utiliser. o - Numéros de ligne :> Les lignes sont numérotées telles qu'elles apparaissent dansF le fichier source. Une ligne de commande peut donc contenir plusieursH lignes de texte du fichier source. Dans ce cas, si vous souhaitez poserD un break sur cette ligne, il convient de spécifier le numéro de la  première ligne de texte. Exemple : $! 1 > i = - $! 2 > 10; Si vous souhaitez poser un break sur cette ligne, tapez : DEBUG> break 1  (Break 2 n'aura aucun effet)A o - Ne lancez pas d'images entre des define/user et des run. En B particulier, utilisez $SHOW TRANSLATION pour visualiser la valeurA du nom logique et non SHOW LOGICAL qui détruirait l'assignation.G NB : Vous ne devez pas utilisez le LABEL 'debug_sub' qui est également réservé au DEBUGGER. !IV/ PRINCIPES DE FONCTIONNEMENT :% Le debugger fonctionne comme suit : E o - Il crée une procédure de commande DEBUG_DCL.TMP dans SYS$SCRATCH (égal en principe à SYS$LOGIN) C o - Dans cette procédure, il inclut votre procédure de commande etE insère entre chaque ligne de cette procédure de commande des 'lignes de contrôle'.< o - Il ajoute en fin de cette nouvelle procédure le fichierB DEBUG_DCL.DAT qui contient le code d'une sous-routine qui va vous5 permettre d'entrer vos commandes et de les exécuter. o - Il exécute cette procédure.G NB: Les procédures générées par DEBUG_DCL ne sont pas détruites en casG de sortie anormale du DEBUGGER. Vous devez donc le faire manuellement.) Les lignes de contrôle sont de 4 types :; o - L'assignation de DEBUG_LINE au numéro de ligne courant< o - La ligne courante en commentaire et qui sera visualiséeD o - Des lignes de contrôle de visualisation (Set verify $ noverify)( o - Un appel à la sous-routine de DEBUG& Dans les noms logiques sont stockés : o - Le mode d'exécution :/ Mode en continue (Après GO) "GO$DEBUG" = "1"& Mode en pas-à-pas "GO$DEBUG" = "0"% o - Les breakpoints dans BREAK$DEBUG V/ EXEMPLE : Procédure à DEBUGGER: PROC.COM $ WRITE SYS$OUTPUT P1 $ I = 10 $ LOOP: $ WRITE SYS$OUTPUT I $ I = I - 1 $ IF I .LT. 1 THEN EXIT $ GOTO LOOP$ @DEBUG_DCL PROC BONJOURTapez ? pour avoir une aide... DEBUG> STEP$! 1 > $ WRITE SYS$OUTPUT P1 DEBUG> STEPBONJOUR$! 2 > $ I = 10DEBUG> BREAK 6 DEBUG> GO$! 3 > $ LOOP:$! 4 > $ WRITE SYS$OUTPUT I10$! 5 > $ I = I - 1!$! 6 > $ IF I .LT. 1 THEN EXITDEBUG> $SHOW SYMBOL I- I = 9 Hex = 00000009 Octal = 00000000011DEBUG> $GOTO LOOP$! 4 > $ WRITE SYS$OUTPUT I DEBUG> STEP9$! 5 > $ I = I - 1DEBUG> $ON ERROR THEN CONTINUE DEBUG> STEP!$! 6 > $ IF I .LT. 1 THEN EXIT DEBUG> $I = 0 DEBUG> GO+%CLI-S-NORMAL, normal successful completionàLúì ~ DEBUG_DCL.BCK¡Ð DEBUG_DCL.BCK:BACKUP DEBUG_DCL.*/EXCLUDE=*.BCK/LOG VMS:DEBUG_DCL.BCK/SAV QUIVOGNE_L ‹@€cJuw›”V5.3 _DECUSF::  _$1$DIA1: V5.3 ~ ð*[QUIVOGNE_L]DEBUG_DCL.COM;2+,-è. /‹@ 4L Vÿ-¨0ú123KÿPWO 56ÀzMRw›”7û¥Rw›”89G‹@HˆÿJÿ$!'f$verify(0)'$!++$! Procédure de DEBUG DCL...$!--!$ if f$mode() .nes. "INTERACTIVE"@$ then write sys$output "Utilisable uniquement en interactif..."$ exit$ endif$ set term/application;$ all = p1+" "+p2+" "+p3+" "+p4+" "+p5+" "+p6+" "+p7+" "+p8$ lec1:&$ if f$edit(all,"collapse") .eqs. "" ?$ then read/prompt="Fichiers et paramètres : " sys$command all $ goto lec1$ endif!$ com_file = f$element(0," ",all)!$ file = f$parse(com_file,".com")$ params = all - com_file$ esc[0,7] = 27$ bold = "''esc'[1m"$ reverse = "''esc'[7m"$ norm = "''esc'[0m"$!++$! Définition des keys...$!---$ define/key/Nolog/term/echo/erase kp0 "STEP"-$ define/key/Nolog/term/echo/erase comma "GO"$ close/nolog debug_w.$ open/write debug_w sys$scratch:debug_dcl.tmp$ close/nolog debug_p$ open debug_p 'file'$ buffer_debug = ""$ buffer_debug_1 = ""$ i = 0$ j = 0$ eof_flag = "FALSE" $ boucle:$ if eof_flag then goto fin$$ read/end_of_file=eof debug_p ligne $ goto no_eof$ eof:$ eof_flag = "TRUE" $ ligne = "$" $ no_eof: $ i = i + 1+$ ligne_bis = f$edit(ligne,"trim,compress")6$ ligne_ter = f$edit(ligne_bis - "$","trim,uncomment"))$ first_verb = f$element(0," ",ligne_ter)/$ at_sign = f$extract(0,1,first_verb) .eqs. "@"%$ label = f$element(0,":",first_verb)7$ next_one = f$extract(0,1,f$element(1,":",first_verb))@$ if label .eqs. first_verb .or. next_one .eqs. "=" .or. at_sign$ then label = ""$ else label = label + ":"$ endif1$ if f$extract(0,1,ligne_bis) .eqs. "$" .and. -, f$edit(first_verb,"upcase") .nes. "THEN"$ then&$ write debug_w "$ debug_line = ''j'"$ write debug_w "$ set verify"$ gosub ecriture_w"$ write debug_w "$!'f$verify(0)'"$$ write debug_w "$ gosub debug_sub" $ buffer_debug = buffer_debug_1$ gosub ecriture_w$ buffer_debug_1 = ""$ buffer_debug = ""$ j = i$ endif2$ if label .nes. "" then write debug_w "$''label'"%$ buffer_debug_1 = buffer_debug_1 + -4 f$fao("!5SL!AS",f$length(ligne-label),ligne-label)J$ ligne = "$!''reverse'''f$fao("!5SL",i)'''norm' > " + bold + ligne + normF$ buffer_debug = buffer_debug + f$fao("!5SL!AS",f$length(ligne),ligne)$! $ goto boucle$ fin:$ close debug_w$ close debug_pL$ convert sys$scratch:debug_dcl.tmp sys$scratch:debug_dcl.tmp/fdl=sys$input:RECORD( CARRIAGE_CONTROL carriage_return! FORMAT variableH$ append/nolog 'f$parse("debug_dcl.dat;0",f$environment("procedure"))' - sys$scratch:debug_dcl.tmp5$ delete/nolog/noconfirm sys$scratch:debug_dcl.tmp;-1$ define/nolog GO$DEBUG "0"$ define/nolog BREAK$DEBUG "/"4$ write sys$command "Tapez ? pour avoir une aide..."%$ @sys$scratch:debug_dcl.tmp 'params'&$ write sys$command f$message($status)$ exit $ ecriture_w:&$ if buffer_debug .eqs. "" then return($ longueur = f$extract(0,5,buffer_debug)($ buffer_debug = buffer_debug - longueur $ longueur = f$integer(longueur)$ if longueur .ne. 0$ then-$ enreg = f$extract(0,longueur,buffer_debug)&$ buffer_debug = buffer_debug - enreg$ write debug_w enreg$ endif$ goto ecriture_wÿÿð*[QUIVOGNE_L]DEBUG_DCL.DAT;1+,f,ˆ./‹@ 4M^-¨0ú123KÿPWO56` @Åâ”7`aOЖ”8`°'¯p9G‹@HˆÿJÿ $ exit $debug_sub:#$ if f$trnlnm("GO$DEBUG") .eqs. "1"G$ then if f$locate(f$fao("/!ZL/",debug_line),f$trnlnm("BREAK$DEBUG"))-* .ne. f$length(f$trnlnm("BREAK$DEBUG"))!$ then define/nolog GO$DEBUG "0"$ else return$ endif$ endif%$ inquire/nopunct debug_rep "DEBUG> "@$ debug_rep = f$edit(debug_rep,"trim,compress,upcase,uncomment")+$ if debug_rep .eqs. "" then goto debug_sub$ if debug_rep .eqs. "?" $ then type sys$input:$ deck? Aide$STEP ou KP0 Pas à pas?GO ou , (keypad) Dérouler la procédure sans pas à pas<BREAK num Pose une break sur la ligne 'num'9CANCEL num Ote le break de la ligne 'num'@EXIT Sort du debugger (équivalent à $exit)MTYPE Visualiser la procédure avec les numéros de lignes4$ commande Exécuter une commande DCL Exemple : DEBUG> $ show symbol dummy DUMMY = "GAG"$ eod$ goto debug_sub$ endif'$ if f$extract(0,1,debug_rep) .eqs. "$"#$ then debug_rep = debug_rep - "$"$ 'debug_rep'$ goto debug_sub$ endif&$ if f$locate(debug_rep,"TYPE") .eq. 0C$ then search 'f$environment("procedure")'/nohighlight/match=and - /format=passal - "$!", - ">"$ goto debug_sub$ endif2$ if f$locate(debug_rep,"STEP") .eq. 0 then return0$ if f$locate(debug_rep,"EXIT") .eq. 0 then exit$$ if f$locate(debug_rep,"GO") .eq. 0*$ then define/process/nolog "GO$DEBUG" "1" $ return$ endif8$ if f$locate(f$element(0," ",debug_rep),"BREAK") .eq. 08$ then debug_rep = f$integer(f$element(1," ",debug_rep))?$ debug_rep = f$trnlnm("BREAK$DEBUG")+f$fao("/!ZL/",debug_rep)*$ define/nolog BREAK$DEBUG "''debug_rep'"$ goto debug_sub$ endif9$ if f$locate(f$element(0," ",debug_rep),"CANCEL") .eq. 08$ then debug_rep = f$integer(f$element(1," ",debug_rep))?$ debug_rep = f$trnlnm("BREAK$DEBUG")-f$fao("/!ZL/",debug_rep)*$ define/nolog BREAK$DEBUG "''debug_rep'"$ goto debug_sub$ endif$ debug_rep = ""$ debug_rep[0,7] = 7$ write sys$command debug_rep$ goto debug_subð*[QUIVOGNE_L]DEBUG_DCL.TXT;1+,w,1. /‹@ 4H €-¨0ú123KÿPWO 56àÿiÏ–”7`qyOЖ”8`‚È'¯p9G‹@HˆÿJÿLaurent QUIVOGNE - @robas DEBUG DCL ~~~~~~~~~ I/ OBJET :+ Cet outil est constitué de deux fichiers : o - DEBUG_DCL.COM o - DEBUG_DCL.DATII/ UTILISATION : B Ce DEBUGGER reproduit quelques fonctionnalités de DEBUG, pour des+ procédures de commande. Il se lance par : 1 $ @DEBUG_DCL procedure_a_debugger p1 p2 ...< p1, p2, ... étant les paramètres de la procédure à débugger: Ensuite, vous devez patienter quelques secondes afin que $ l'initialisation puisse s'exécuter.' Puis vous voyez apparaître à l'écran : Tapez ? pour avoir une aide DEBUG>$ Les commandes sont les suivantes :  DEBUG> type0 Affiche la procédure avec les numéros de ligne.F Cette fonctionnalité est utile pour repérer les lignes sur lesquelles vous souhaitez poser un break. DEBUG> step, Exécute l'instruction visualisée à l'écran.C Un équivalent de cette fonction est la touche '0' du keypad (kp0). DEBUG> exit' Sort du debugger (Equivalent à $exit). DEBUG> go< Permet d'exécuter la procédure sans s'arrêter à chaque pas.G L'exécution ne stoppe qu'à la fin de la procédure ou lorsque vous avezG posé un breakpoint. Dans ce dernier cas, le mode repasse en pas-à-pas.? (Un équivalent de cette fonction est la toucke ',' du keypad). DEBUG> break num4 Permet de poser un break sur la ligne numéro 'num'.# (Voir le paragraphe restrictions). DEBUG> cancel num9 Supprime un break préalablement posé sur la ligne 'num'. DEBUG> $com1 Permet d'exécuter n'importe quelle commande DCL. III/ RESTRICTIONS : o - Symboles et noms logiques :? Le debugger utilise deux symboles et, pour cette raison, vous1 ne devez pas les employer dans votre procédure : DEBUG_LINE DEBUG_REP + Il utilise également deux noms logiques : GO$DEBUG BREAK$DEBUG+ que vous devez également ne pas utiliser. o - Numéros de ligne :> Les lignes sont numérotées telles qu'elles apparaissent dansF le fichier source. Une ligne de commande peut donc contenir plusieursH lignes de texte du fichier source. Dans ce cas, si vous souhaitez poserD un break sur cette ligne, il convient de spécifier le numéro de la  première ligne de texte. Exemple : $! 1 > i = - $! 2 > 10; Si vous souhaitez poser un break sur cette ligne, tapez : DEBUG> break 1  (Break 2 n'aura aucun effet)A o - Ne lancez pas d'images entre des define/user et des run. En B particulier, utilisez $SHOW TRANSLATION pour visualiser la valeurA du nom logique et non SHOW LOGICAL qui détruirait l'assignation.G NB : Vous ne devez pas utilisez le LABEL 'debug_sub' qui est également réservé au DEBUGGER. !IV/ PRINCIPES DE FONCTIONNEMENT :% Le debugger fonctionne comme suit : E o - Il crée une procédure de commande DEBUG_DCL.TMP dans SYS$SCRATCH (égal en principe à SYS$LOGIN) C o - Dans cette procédure, il inclut votre procédure de commande etE insère entre chaque ligne de cette procédure de commande des 'lignes de contrôle'.< o - Il ajoute en fin de cette nouvelle procédure le fichierB DEBUG_DCL.DAT qui contient le code d'une sous-routine qui va vous5 permettre d'entrer vos commandes et de les exécuter. o - Il exécute cette procédure.G NB: Les procédures générées par DEBUG_DCL ne sont pas détruites en casG de sortie anormale du DEBUGGER. Vous devez donc le faire manuellement.) Les lignes de contrôle sont de 4 types :; o - L'assignation de DEBUG_LINE au numéro de ligne courant< o - La ligne courante en commentaire et qui sera visualiséeD o - Des lignes de contrôle de visualisation (Set verify $ noverify)( o - Un appel à la sous-routine de DEBUG& Dans les noms logiques sont stockés : o - Le mode d'exécution :/ Mode en continue (Après GO) "GO$DEBUG" = "1"& Mode en pas-à-pas "GO$DEBUG" = "0"% o - Les breakpoints dans BREAK$DEBUG V/ EXEMPLE : Procédure à DEBUGGER: PROC.COM $ WRITE SYS$OUTPUT P1 $ I = 10 $ LOOP: $ WRITE SYS$OUTPUT I $ I = I - 1 $ IF I .LT. 1 THEN EXIT $ GOTO LOOP$ @DEBUG_DCL PROC BONJOURTapez ? pour avoir une aide... DEBUG> STEP$! 1 > $ WRITE SYS$OUTPUT P1 DEBUG> STEPBONJOUR$! 2 > $ I = 10DEBUG> BREAK 6 DEBUG> GO$! 3 > $ LOOP:$! 4 > $ WRITE SYS$OUTPUT I10$! 5 > $ I = I - 1!$! 6 > $ IF I .LT. 1 THEN EXITDEBUG> $SHOW SYMBOL I- I = 9 Hex = 00000009 Octal = 00000000011DEBUG> $GOTO LOOP$! 4 > $ WRITE SYS$OUTPUT I DEBUG> STEP9$! 5 > $ I = I - 1DEBUG> $ON ERROR THEN CONTINUE DEBUG> STEP!$! 6 > $ IF I .LT. 1 THEN EXIT DEBUG> $I = 0 DEBUG> GO+%CLI-S-NORMAL, normal successful completionàL