!H\DBUGAU23 FODT .XP 01/05/84! FODT --- FORTRAN IV ON-LINE DEBUGGING TOOL ------------------------------------------ ABSTRACT: -------- FORTRAN ON-LINE DEBUGGING TOOL (FODT) is a subroutine which allows the programmer to examine/modify memory contents and monitor program flow at run time. It provides the following facilities: examine/modify memory contents in octal, decimal or ASCII formats; set program break-points at entry or exit points of subprograms; set break-points at prescribed program lines; find addresses of main program and subprogram entry points; examine subprogram argument addresses and contents; trace subprogram callers on program break; and a HELP routine. FODT is composed of a set of relocatable modules which are loaded with the user program. It is invoked by a subroutine call at the beginning of the mainline program. SUMMARY OF FODT COMMANDS: ------------------------ 1. ADDRESS ------------- EXAMINE/MODIFY MEMORY CONTENTS. 2. ADDRESS[SUBSCRIPT] -- EXAMINE/MODIFY MEMORY CONTENTS. 3. AN ------------------ EXAMINE/MODIFY ADDRESS REGISTER N. 4. AN,OFFSET ----------- EXAMINE/MODIFY MEMORY CONTENTS. 5. BN ------------------ SET ROUTINE ENTRY BREAK-POINT N. 6. C ------------------- CONTINUE PROGRAM EXECUTION. 7. EN ------------------ SET ROUTINE EXIT BREAK-POINT N. 8. F ------------------- FIND ROUTINE ADDRESS & SAVE IN Q REGISTER(SEE 12). 9. FNAME --------------- SAME AS "F"; NAME = NAME OF ROUTINE. 10. H ------------------- HELP. 11. LN ------------------ SET LINE BREAK-POINT N. 12. Q ------------------- EXAMINE Q REGISTER. 13. R ------------------- RESET FODT AND CLEAR ALL BREAK-POINTS AND REGISTERS. 14. SF ------------------ SHOW FUNCTION ARGUMENTS. 15. SS ------------------ SHOW SUBROUTINE ARGUMENTS. 16. T ------------------- TRACE SUBPROGRAM CALLERS ON PROGRAM BREAK. WHERE ADDRESS = STARTING ADDRESS OF A ROUTINE OR VARIABLE (0 TO 77777 OCT). OFFSET = NO. OF MEMORY LOCATIONS FROM STARTING ADDRESS (OCTAL). SUBSCRIPT = FORTRAN ARRAY SUBSCRIPT (DECIMAL). N = 1 OR 2. USING THE COMMANDS: ------------------ 1. ADDRESS ------------- EXAMINE/MODIFY MEMORY CONTENTS. 2. ADDRESS[SUBSCRIPT] -- EXAMINE/MODIFY MEMORY CONTENTS. ENTER ADDRESS OF MEMORY TO BE ACCESSED IN THE FOLLOWING FORMAT: ADDRESS OR ADDRESS[SUBSCRIPT] CONTENTS OF THE EFFECTIVE ADDRESS & THE NEXT 2 LOCATIONS WILL THEN BE DISPLAYED: ADDRESS[SUBSCRIPT]/XXXX XXXX XXXX YYYYYYYYY 'ZZZZZZ' WHERE XXXX XXXX XXXX ARE THE OCTAL VALUES OF THE MEMORY LOCATIONS. YYYYYYYYY IS THE DECIMAL VALUE OF THE THREE-WORD F4 VARIABLE. IF THE ABSOLUTE VALUE IS NON-ZERO AND .LE. 1E-99 OR .GE. 1E+99, THEN "***************" IS DISPLAYED INSTEAD. ZZZZZZ IS THE ASCII VALUE OF THE THREE WORD F4 VARIABLE. THE MEMORY CONTENTS MAY BE CHANGED BY TYPING THE NEW VALUE IN ONE OF 3 FORMATS: I. DECIMAL FORMAT: INTEGER OR FLOATING POINT NUMBER II. ASCII FORMAT: EXACTLY 6 CHARACTERS FOLLOWED BY "A". III. OCTAL FORMAT: EXACTLY 12 OCTAL DIGITS FOLLOWED BY "O". IF NO CHANGE IS REQUIRED, TYPE "RETURN" TO CLOSE THE LOCATIONS OR TYPE "/" AND "RETURN" TO OPEN THE NEXT 3 LOCATIONS AND INCREMENT THE SUBSCRIPT. SIMILARLY TYPING "\" AND "RETURN" WILL OPEN THE PRECEEDING 3 LOCATIONS AND DECREMENT THE SUBSCRIPT. 3. AN ------------------ EXAMINE/MODIFY ADDRESS REGISTER N. 4. AN,OFFSET ----------- EXAMINE/MODIFY MEMORY CONTENTS. TWO ADDRESS REGISTER A1 AND A2 ARE PROVIDED. AN ADDRESS REG. MAY BE SET TO THE "STARTING ADDRESS" OR "ORIGIN" OF A SEGMENT OF CODE OR DATA. + ANY PART OF THE CODE OR DATA MAY THEN BE OPENED BY ENTERING: A1(OR A2),OFFSET WHERE OFFSET IS THE NO. OF LOCATIONS(IN OCTAL) FROM THE STARTING ADDRESS. MEMORY CONTENTS ARE DISPLAYED IN 3-WORD GROUPS IN THE FOLLOWING FORMAT: A1(OR A2),OFFSET/XXXX XXXX XXXX YYYYYYYYYY 'ZZZZZZ' WHERE XXXX XXXX XXXX ARE THE OCTAL VALUES OF THE MEMORY LOCATIONS. YYYYYYYYY IS THE DECIMAL VALUE OF THE THREE-WORD F4 VARIABLE. IF THE ABSOLUTE VALUE IS NON-ZERO AND .LE. 1E-99 OR .GE. 1E+99, THEN "***************" IS DISPLAYED INSTEAD. ZZZZZZ IS THE ASCII VALUE OF THE THREE WORD F4 VARIABLE. THE MEMORY CONTENTS MAY BE CHANGED BY TYPING THE NEW VALUE IN ONE OF 3 FORMATS: I. DECIMAL FORMAT: INTEGER OR FLOATING POINT NUMBER II. ASCII FORMAT: EXACTLY 6 CHARACTERS FOLLOWED BY "A". III. OCTAL FORMAT: EXACTLY 12 OCTAL DIGITS FOLLOWED BY "O". IF NO CHANGE IS REQUIRED, TYPE "RETURN" TO CLOSE THE LOCATIONS OR TYPE "/" AND "RETURN" TO OPEN THE NEXT 3 LOCATIONS AND INCREMENT THE SUBSCRIPT. SIMILARLY TYPING "\" AND "RETURN" WILL OPEN THE PRECEEDING 3 LOCATIONS AND DECREMENT THE SUBSCRIPT. 5. BN ------------------ SET ROUTINE ENTRY BREAK-POINT N. TO SET A BREAK POINT AT THE ENTRY OF A SUBPROGRAM, ENTER B1 OR B2. THEN TYPE: ADDR OR ADDR,COUNT WHERE ADDR IS THE STARTING ADDRESS OF THE SUBPROGRAM, AND COUNT IS THE NO. OF TIMES THE SUBPROGRAM IS ENTERED BEFORE BREAK. DEFAULT FOR COUNT IS 1. A BREAK POINT MAY BE REMOVED BY SETTING ADDR TO 0. IF COUNT IS SET TO 0, THE PROGRAM WILL CONTINUE EXECUTION AUTOMATICALLY AFTER BREAK. 6. C ------------------- CONTINUE PROGRAM EXECUTION. THE "C" COMMAND CAUSES PROGRAM EXECUTION TO CONTINUE. 7. EN ------------------ SET ROUTINE EXIT BREAK-POINT N. TO SET A BREAK POINT AT THE EXIT OF A SUBPROGRAM, ENTER E1 OR E2. THEN TYPE: ADDR OR ADDR,COUNT WHERE ADDR IS THE STARTING ADDRESS OF THE SUBPROGRAM, AND COUNT IS THE NO. OF TIMES THE SUBPROGRAM IS ENTERED BEFORE BREAK. DEFAULT FOR COUNT IS 1. A BREAK POINT MAY BE REMOVED BY SETTING ADDR TO 0. IF COUNT IS SET TO 0, THE PROGRAM WILL CONTINUE EXECUTION AUTOMATICALLY AFTER BREAK. 8. F ------------------- FIND ROUTINE ADDRESS & SAVE IN Q REGISTER(SEE 12). 9. FNAME --------------- SAME AS "F"; NAME = NAME OF ROUTINE. TO FIND THE STARTING ADDRESS OF A ROUTINE, ENTER F AND THE NAME OF THE ROUTINE(USE "MAIN" FOR THE MAIN PROGRAM). WHEN THE ADDRESS IS FOUND, IT IS DISPLAYED AND STORED IN THE Q REGISTER. Q MAY THEN BE USED AS AN INPUT ARGUMENT FOR SETTING BREAK-POINTS OR ADDRESS REGISTERS. THE CONTENTS OF THE Q REGISTER MAY BE DISPLAYED BY TYPING "Q" 10. H ------------------- HELP. SELF EXPLANATORY. 11. LN ------------------ SET LINE BREAK-POINT N. TO SET A BREAK POINT AT THE END OF LINE LL OF A ROUTINE, ENTER L1 OR L2. THEN ENTER: LL+1 OR LL+1,COUNT WHERE COUNT IS THE NO. OF TIMES LINE LL IS EXECUTED BEFORE BREAK. DEFAULT FOR COUNT IS 1. AND THEN ENTER THE STARTING ADDRESS OF THE ROUTINE. A BREAK POINT MAY BE REMOVED BY SETTING LL+1 OR STARTING ADDRESS TO 0. IF COUNT IS SET TO 0, THE PROGRAM WILL CONTINUE EXECUTION AUTOMATICALLY AFTER BREAK. IMPORTANT: THE ROUTINE BEING DEBUGGED MUST BE COMPILED WITHOUT THE '/N' OPTION. 12. Q ------------------- EXAMINE Q REGISTER. SEE THE 'F' COMMAND. 13. R ------------------- RESET FODT AND CLEAR ALL BREAK-POINTS AND REGISTERS. ENTER R TO REMOVE ALL BREAK-POINTS AND RESET FODT. 14. SF ------------------ SHOW FUNCTION ARGUMENTS. TO SHOW FUNCTION ARGUMENTS, ENTER "SF". THEN ENTER THE ROUTINE STARTING ADDRESS AND THE ARGUMENT NUMBER AS PROMPTED. THE ARGUMENT ADDRESS AND VALUE ARE DISPLAYED IN THE FOLLOWING FORMAT: ADDRESS/XXXXXXXXXX 'YYYYYY' WHERE XXXXXXXXXX IS THE F.POINT VALUE & YYYYYY IS THE ASCII VALUE IF THE ARGUMENT IS AN ARRAY VARIABLE, THEN THE SUCCEEDING ARRAY ELEMENTS MAY BE DISPLAYED BY ENTERING '/'. TYPING "RETURN" ALONE WILL CLOSE THE CURRENT ARGUMENT AND ANOTHER ARGUMENT MAY THEN BE REQUESTED. A SECOND "RETURN" WILL TERMINATE THE COMMAND. 15. SS ------------------ SHOW SUBROUTINE ARGUMENTS. TO SHOW SUBROUTINE ARGUMENTS, ENTER "SS". THEN ENTER THE ROUTINE STARTING ADDRESS AND THE ARGUMENT NUMBER AS PROMPTED. THE ARGUMENT ADDRESS AND VALUE ARE DISPLAYED IN THE FOLLOWING FORMAT: ADDRESS/XXXXXXXXXX 'YYYYYY' WHERE XXXXXXXXXX IS THE F.POINT VALUE & YYYYYY IS THE ASCII VALUE IF THE ARGUMENT IS AN ARRAY VARIABLE, THEN THE SUCCEEDING ARRAY ELEMENTS MAY BE DISPLAYED BY ENTERING '/'. TYPING "RETURN" ALONE WILL CLOSE THE CURRENT ARGUMENT AND ANOTHER ARGUMENT MAY THEN BE REQUESTED. A SECOND "RETURN" WILL TERMINATE THE COMMAND. 16. T ------------------- TRACE SUBPROGRAM CALLERS ON PROGRAM BREAK. COMMAND "T" DISPLAYS ALL THE SUBPROGRAM CALLERS LEADING TO THE CURRENT SUBPROGRAM. USING FODT: ---------- INSERT THE FOLLOWING LINE AT THE BEGINNING OF THE MAIN PROGRAM. CALL FODT LOADING A PROGRAM WITH FODT MODULES: ----------------------------------- THE USUAL RULES FOR USING THE OS/8 FORTRAN IV LOADER SHOULD BE APPLIED TO SATISFY THE FOLLOWING CALLING SEQUENCES: FODT IS CALLED BY THE MAINLINE PROGRAM. FODT1 THRU FODT11 ARE CALLED BY FODT. FODT0 IS CALL BY ALL OTHER FODT ROUTINES. IN ADDITION, FODT.RL MUST BE LOADED IN LEVEL 0. RECOMMENDED CONFIGURATION: FODT.RL AND FODT0.RL LOADED IN LEVEL 0, AND FODT1.RL THRU FODT11.RL LOADED IN SEPARATE OVERLAYS IN A HIGHER LEVEL. EXAMPLE: $JOB .R LOAD *TFODT.LD,TFODT.MP