<<< DISK$DATA:[NOTES$LIBRARY]VAX_VMS.NOTE;1 >>> -< SIG VAX/VMS >- ================================================================================ Note 1113.0 Modification du traceback VMS 1 reply DECUSF::FOUCHET_F "François FOUCHET - FMA" 98 lines 18-JAN-1991 12:57 -------------------------------------------------------------------------------- J'ai depose dans VMS: deux fichiers (TRACE.DOC et TRACE.BCK) qui aideront (je pense) les gens qui ont des problemes de trace des erreurs dans leur applicatif. Ces modules sont utilises chez moi depuis un certain temps, et sont encore succeptibles d'evolution. Ils n'ont pas etes testes avec tous les langages (seuls BASIC, PASCAL, COBOL et MACRO ont etes testes, avec TDMS, DECFORMS et RDB). Je suis pret a faire les modifications qui s'imposeraient en cas de problemes, et a etudier toute amelioration sur ces modules. J'inclus a la suite de ce texte une partie du fichier TRACE.DOC decrivant les principales fonctions realises par les modules contenus dans TRACE.BCK. Page de pub gratuite : pour les gens que cela interresse (et sous reserve d'acceptation de la proposition par le COS), il y aura une presentation sur le principe de traceback sous VMS lors du prochain symposium. Ce package contiend 2 modules axes autour de la gestion des erreurs sous VMS : Le premier, TRACE_ROUTINES, implemente une gestion centralisee des messages emis par une application. Ces messages sont de deux types : messages applicatifs tels que "enregistrement xxx non trouve", "debut du traitement xxx", ou messages d'erreur d'une image qui "crashe". Dans ce dernier cas, l'utilisateur final ne verra pas le stack dump sur son ecran, mais seulement un message standard tel que "Erreur detectee - Contactez le responsable du systeme". Le traceback contiend les donnees presentes dans le traceback standard de DEC, plus : - le label precedent le PC. - le nom du bloc si le PC est dans un bloc. - le point d'entree de la routine. - les vecteurs de transferts - la valeur du parametre passe a une AST. - les symboles LIB$INITIALIZE et LIB$INITIALIZE_COROUTINE. - les informations contenues dans la GST (cas des images partageables sans DST). Voici un exemple de ce que peut contenir le fichier de trace : ==================================================================== PID 2040029C - User FF - Log_1 DEV - Log_2 FF - Log_3 FMA Node OMFS01 - Terminal LTA4023: - Default DISK$USER_S01:[FF.DECFORMS] Image OMFS01$DKB300:[FF.DECFORMS]TEST_DECFORMS.EXE;17 - Count 34 ----------------------- 5-NOV-1990 14:26:05.67 ------------------------ %SYSTEM-F-INTDIV, arithmetic trap, integer divide by zero at PC=000CEE4A ,PSL=03C00022 Symbolic stack dump follows Module name routine name line rel PC abs PC RTXS_MODULE DISPLAY_RATES_ON_SCREEN 190 000001C2 000CEE4A DATA_IN_MEMORY_CODE WATCH_LOCK1_GRANTED_AT_NL 4257 000000C8 00257CFE -- label EXECUTE_USER_ROUTINE 00000035 00257CFE ----- previous routine called as AST with parameter 00000005 DATA_IN_MEMORY_CODE WATCH_CHANGES_ON 4034 00000140 00257AAB RTXSDIVENV START_OPTIONS_LOCK 1290 00000076 000CEB06 RTXS_MODULE INIT_OPPS 343 00000095 000CF245 FORMS$MANAGER FORMS$CANCEL 00031F6D 001DD0E1 FORMS$MANAGER FORMS$CANCEL 00001550 001AC6C4 FORMS$MANAGER FORMS$CANCEL 0000146D 001AC5E1 FORMS$MANAGER FORMS$CANCEL 000013B8 001AC52C FORMS$MANAGER FORMS$CANCEL 00001176 001AC2EA FORMS$MANAGER FORMS$RECEIVE 00000186 001AADFB DOOR_PRG DOOR_PRG 666 0000023D 000C7C99 -- label HND_BREAK 000001F5 000C7C99 -- entred at DOOR_PROGRAM 55 00000000 000C7A5C DOOR_MAIN DOOR_MAIN 69 00000047 000C7A47 -- block CALL-DOOR-PROGRAM 0000002A 000C7A47 CALLED_FUNCTION CALLED_FUNCTION 72 0000003E 000E86CA -- block BEGIN 00000021 000E86CA ITVENV CALL_FUNCTION 464 000000B7 000FC937 ITVENV ITVPRG 571 0000023F 000FC55B VITPRC VITPRC 100 000000B1 0010C6E5 VITPRC LIB$INITIALIZE_COROUTINE 0011A40C 0011A60C TRACE_ROUTINES INIT_HANDLER 953 00000023 001188C3 VITPRC LIB$INITIALIZE 0011A3E7 0011A5E7 Pour etre actives, ces routines doivent simplement etre linkees avec le code utilisateur. Aucune modification du code source utilisateur n'est a prevoir. Le second module, TRACEBACK, permet de redefinir le code execute par VMS pour realiser le traceback. Il permet d'activer TRACE_ROUTINES (ou tout autre image capable de realiser le traceback) lorsqu'une erreur non geree est detectee. Dans ce cas, il n'est pas necessaire de linker TRACE_ROUTINES avec le code utilisateur, puisque TRACEBACK active dynamiquement cette image. Cette facon de faire est utilisable pour les logiciels dont vous n'avez pas les sources (ou que vous ne souhaitez pas relinker). Pour plus de details, lire les fichiers .DOC inclus dans TRACE.BCK. ================================================================================ Note 1113.1 Modification du traceback VMS 1 of 1 DECUSF::FOUCHET_F "François FOUCHET" 2 lines 27-MAY-1991 14:33 -< Slides sous VMS: >- -------------------------------------------------------------------------------- Les slides de la presentation qui sera faite lors du symposium sont dans VMS: sous le nom de TRACE.PS.