Trailing-Edge
-
PDP-10 Archives
-
decuslib10-03
-
43,50312/mants5.rnd
There are no other files named mants5.rnd in the archive.
.PAPER SIZE 60 72
.LEFT MARGIN 4
.SPACING 1
.TAB STOPS 8 16 24 32 40 48 56
#
.NUMBER 1
.TITLE ^^MANTIS - U\\NIVERSITY OF ^OREGON ^^FORTRAN D\\EBUGGER\\
.SUBTITLE ^^MANTS5.RNT+MANTS5.RNH+MANTS5.RND\\ ^^L.K. S\\ALMONSON
.PAGE
^^MANTIS\\ GIVES THE USER AN INTERACTIVE DEBUGGING LANGUAGE THAT IS
SIMPLE AND A NATURAL EXTENSION OF ^^FORTRAN\\. ^^MANTIS\\ COMMANDS ARE
ENTERED FROM THE USER'S TELETYPE DURING EXECUTION OF THE ROUTINES TO BE
DEBUGGED. ^THE USER REFERS TO THE ROUTINES, VARIABLES AND STATEMENTS OF
HIS PROGRAM USING ONLY THE NAMES HE WROTE IN HIS SOURCE PROGRAM.
^THE OVERHEAD IS ABOUT 4 ^K. ^THE MACHINE CODE DURING DEBUGGING IS IDENTICAL
TO THAT DURING NORMAL EXECUTION. ^THE PROGRAM IS NOT EXECUTED
INTERPRETIVELY. ^THE
FOLLOWING EXAMPLE SHOWS A ^^FORTRAN\\ SOURCE PROGRAM AND ITS EXECUTION
WITH THE HELP OF ^^MANTIS\\.
.SKIP
.NOFILL
.LEFT MARGIN 0
^^_.TYPE SAMP1.F4\\ ^THE MONITOR COMMAND TO DISPLAY THE
^^ J=0\\ SAMPLE PROGRAM ^^SAMP1.F4\\.
^^ SUM=0
10 J=J+1
ACCEPT 50,X\\ ^THE 1ST EXECUTABLE STATEMENT AFTER 10.
^^50 FORMAT (F)\\ ^^FORMAT\\ STATEMENTS ARE NOT EXECUTABLE.
^^ SUM=SUM+X\\ 2ND EXECUTABLE STATEMENT AFTER 10.
^^ IF (X.NE.0) GO TO 10\\ 3RD EXECUTABLE STATEMENT AFTER 10.
^^ AVE=SUM/J\\ 4TH EXECUTABLE STATEMENT AFTER 10.
^^ TYPE 51,AVE\\ 5TH EXECUTABLE STATEMENT AFTER 10.
^^51 FORMAT (' AVERAGE =',F6.2) FORMAT\\ STMTS ARE NOT EXECUTABLE.
^^ STOP\\ 6TH EXECUTABLE STATEMENT AFTER 10.
^^ END
.SKIP
_.DEBUG/LOADER SAMP1.F4\\ 1. ^START ^^MANTIS\\.
^^FORTRAN: SAMP1.F4
LOADING
#MANTIS V5
CURRENT PROGRAM IS MAIN
.SKIP
* STOP AT 10+4\\ 2. ^ENTER A COMMAND TO STOP EXECUTION AT
THE 4TH EXECUTABLE STATEMENT AFTER
THE STATEMENT LABELED 10 WHICH IS THE
STATEMENT ^^AVE=SUM/J\\.
^^STORED\\ 3. ^^MANTIS\\ INDICATES ACCEPTANCE OF THE
AUTOMATIC ACTION COMMAND.
^^* GO\\ 4. ^BEGIN PROGRAM EXECUTION.
10.0 5. ^VALUES FOR ^X ARE ENTERED.
20.0
30.0
0.0
.SKIP
_<10 _>+ 4 6. ^EXECUTION IS HALTED AT THE STATEMENT
PREVIOUSLY SPECIFIED.
^^* TYPE J\\ 7. ^DISPLAY THE CURRENT VALUE OF ^J.
4
* ^J=3 8. ^J SHOULD NOT BE 4, SO IT IS CHANGED.
* ^G^O 9. ^CONTINUE EXECUTION FROM WHERE IT
STOPPED WITH THE STATEMENT ^^AVE=SUM/J\\.
^^AVERAGE = 20.00\\
.SUBTITLE ^FUNDAMENTAL ^CONCEPTS
^^EXIT AT MAIN/10 + 6\\ 10. ^THE ^^STOP\\ STATEMENT HAS EXECUTED.
.TEST PAGE 5
^^* EXIT\\ 11. ^THE ^^EXIT\\ CMD RETURNS TO THE MONITOR.
^^END OF EXECUTION
CPU TIME: 0.29 ELAPSED TIME: 2:32.72
EXIT
_.\\
.TEST PAGE 9
.FILL
.LEFT MARGIN 4
.SKIP
^^MANTIS\\ IS STARTED WITH THE MONITOR COMMANDS ^^DEBUG/LO\\ OR
^^LOAD/LO/MAN\\.
.FOOTNOTE 5
.SKIP
.LEFT MARGIN 0
------------------------
.BREAK
*#^SEE ^^FORTRAN(F40) P\\ROGRAMER'S ^MANUAL. ^THE ^^/LO\\ SWITCH MUST
BE USED TO SPECIFY THE ^^LOADER\\ INSTEAD OF ^^LINK-10\\.
^THE ^^/MAN\\ SWITCH MUST BE USED IF THE FIRST FILE HAS A STANDARD
EXTENSION THAT DOES NOT INDICATE ^^FORTRAN\\.
!
^THE FILENAMES OF THE SOURCE ROUTINES ARE TYPED
AS IN AN ^^EXECUTE\\ COMMAND. ^THE FIRST FILE SHOULD BE THE
^^FORTRAN\\ MAIN PROGRAM.*# ^IF YOU ARE CONCERNED ABOUT THE BUGS IN ONLY
CERTAIN ROUTINES OR IF YOUR PROGRAM IS LARGE,
THEN OVERHEAD CAN BE REDUCED BY GIVING THE
^^/NOMAN\\ SWITCH AFTER EACH FILE THAT YOU ARE UNCONCERNED ABOUT:
.NOFILL
.SKIP
^^_.DEB/LO MASTER, FILEG, ALPHA/NOMAN\\
.FILL
.SKIP 2
^^MANTIS\\ PROMPTS FOR COMMANDS WITH THE CHARACTER '*' AND READS EACH
COMMAND AFTER YOU TYPE CARRIAGE-RETURN. ^AT LEAST ONE BLANK MUST
SEPARATE COMMAND KEYWORDS FROM OTHER PARTS OF EACH COMMAND:
.NOFILL
^^* AT35\\ ^THIS COMMAND IS REJECTED.
^^?NOT A COMMAND\\
^^* AT 35\\ ^THE USER WILL BE NOTIFIED EACH TIME BEFORE THE
STATEMENT LABELED 35 IS EXECUTED.
.SKIP
.FILL
^AS A PROGRAM EXECUTES, CONTROL PASSES IN AND OUT OF THE VARIOUS ROUTINES
(MAIN PROGRAM AND SUBPROGRAMS) WHICH MAKE UP THAT PROGRAM. ^THE
CURRENT ROUTINE, AT ANY MOMENT DURING EXECUTION, IS THE MOST RECENTLY ENTERED
^^FORTRAN\\ ROUTINE FOR WHICH THE USER DID NOT GIVE THE ^^/NOMAN\\ SWITCH
IN HIS ^^DEBUG\\ COMMAND. ^WHEN THE USER REFERS TO A VARIABLE OR
STATEMENT LABEL BUT DOES NOT GIVE THE ROUTINE NAME THEN THE CURRENT
ROUTINE IS ASSUMED. ^FOR EXAMPLE, IF SUBROUTINE ^^SUBA\\ WAS JUST
EXECUTING THEN:
.NOFILL
^^AT 99\\ ^REFERS TO THE STATEMENT LABELED 99 IN
SUBROUTINE ^^SUBA\\, WHEREAS
^^AT SUBB/33\\ ^REFERS TO THE STATEMENT 33 IN SUBROUTINE ^^SUBB\\.
.FILL
.SKIP
^YOU MAY ONLY REFER TO EXECUTABLE STATEMENTS.
^STATEMENTS SUCH AS ^^FORMAT,
SUBROUTINE, DIMENSION, DATA\\ AND THE VARIOUS TYPE DECLARATIONS ARE NOT
EXECUTABLE AND CANNOT BE REFERENCED. ^A ^^CONTINUE\\ STATEMENT IS
EXECUTABLE IF AND ONLY IF IT IS THE LAST STATEMENT IN THE RANGE OF A
^^DO\\ STATEMENT. ^A ^^CONTINUE\\ STATEMENT IS NOT EXECUTABLE IF IT IS
USED ONLY AS A TARGET FOR A ^^GOTO\\.
.SKIP
^STATEMENTS WITHOUT LABELS ARE REFERENCED BY A PLUS OR MINUS COUNT OF
EXECUTABLE STATEMENTS FROM A LABELED STATEMENT OR FROM THE BEGINNING OF THE
ROUTINE:
.NOFILL
55-2 ^REFERS TO THE SECOND EXECUTABLE STATEMENT BEFORE
LABEL 55 IN THE CURRENT ROUTINE.
^^MAIN/+3\\ ^REFERS TO THE THIRD EXECUTABLE STATEMENT
IN THE MAIN PROGRAM.
.FILL
.TEST PAGE 6
.SKIP
^^MANTIS\\ WILL REPORT THE CLOSEST STATEMENT LABEL WHEN IT DISPLAYS
THE PROGRAM LOCATION:
.NOFILL
^^* AT MAIN/20 +5\\ ^THIS IS THE WAY THE USER REFERRED TO A STMT.
_<30 _>- 3 ^THIS WOULD BE DISPLAYED JUST BEFORE THE
STATEMENT IS LATER EXECUTED IF STATEMENT 30 IS
CLOSER THAN STATEMENT 20.
.TEST PAGE 10
.FILL
.SKIP
^EACH VARIABLE OR ARRAY MAY BE REFERRED TO IF IT IS USED IN AN EXECUTABLE
STATEMENT IN THE SPECIFIED ROUTINE AND THE USER DID NOT GIVE THE ^^/NOMAN\\
SWITCH FOR THE ROUTINE IN HIS ^^DEBUG\\ COMMAND:
.NOFILL
^^SUBA/IVAR\\ ^REFERS TO THE VARIABLE ^^IVAR\\ IN SUBROUTINE ^^SUBA\\.
^^MAIN/TEST(1,1)\\ ^REFERS TO THE FIRST ELEMENT IN MATRIX ^^TEST\\ IN
THE MAIN PROGRAM. ^SUBSCRIPTS MUST BE CONSTANTS.
* ^Y(*)=0 ^THIS COMMAND CLEARS ALL OF VECTOR ^Y IN THE
CURRENT ROUTINE. (^THIS STAR NOTATION CAN ONLY BE
USED BY ITSELF IN A SINGLE DISPLAY OR CHANGE.)
.FILL
.SKIP
^MANY AUTOMATIC ACTION COMMANDS MAY BE IN EFFECT AT THE SAME TIME.
^THESE COMMANDS MEAN THAT THE USER IS NOTIFIED OR EXECUTION IS HALTED
WHEN 1) A SPECIFIED EXECUTABLE STATEMENT IS REACHED; 2) OR WHEN A SUBROUTINE OR
FUNCTION IS CALLED; 3) OR BEFORE A ^^RETURN\\ STATEMENT IS EXECUTED; 4)
OR WHEN AN ASSIGNMENT OR INPUT STATEMENT MODIFIES A VARIABLE OR ARRAY.
^ONE OR MORE OTHER COMMANDS MAY BE ATTACHED TO ANY AUTOMATIC ACTION
COMMAND:
.NOFILL
^^ * AT MAIN/60; GO 60+2\\ ^THE TWO STATEMENTS AT 60 ARE NOT TO
BE EXECUTED.
^^ * ONCALL SUBA; OUTPUT T1\\ ^EACH TIME SUBROUTINE ^^SUBA\\ IS CALLED,
THE VALUE OF ITS VARIABLE ^T1 WILL BE DISPLAYED.
^^ * STOP BEFORE FUNE; KILL BEFORE FUNE\\ ^EXECUTION WILL HALT
BEFORE RETURN FROM FUNCTION ^^FUNE\\ BUT ONLY THE
FIRST TIME SINCE THE COMMAND ITSELF IS
AUTOMATICALLY REVOKED.
^^ * ON FLAG .LT. 0; FLAG=0\\ ^EACH VALUE ASSIGNED TO VARIABLE ^^FLAG\\
IN THE CURRENT ROUTINE THAT IS LESS THAN ZERO IS
DISPLAYED AND VARIABLE ^^FLAG\\ IS SET ZERO.
.FILL
.SKIP
^&^THE ^^ONCALL\\ COMMAND\& IS USED TO GIVE NOTIFICATION OR HALT
EXECUTION WHEN A SPECIFIED ^^FORTRAN\\ SUBPROGRAM IS CALLED (AT THE
^^SUBROUTINE\\ OR ^^FUNCTION\\ STATEMENT). ^THE USER SHOULD NOT HAVE
GIVEN THE ^^/NOMAN\\ SWITCH IN HIS ^^DEBUG\\ COMMAND FOR THE ROUTINE.
^AN EXAMPLE:
.NOFILL
^^ * STOP ONCALL FUNC\\ ^HALTS EXECUTION EACH TIME ^^FUNC\\ IS CALLED.
^^ FUNC CALLED FROM MAIN/607-1\\ ^THIS MIGHT BE DISPLAYED.
^^ * ON CALL SUBR; OUTPUT ARG:2 T\\HIS NOTATION MAY BE USED
TO LOOK AT AN ACTUAL ARGUMENT.
.FILL
.SKIP
^&^THE ^^BEFORE RETURN FROM\\ COMMAND\& IS USED TO GIVE NOTIFICATION OR HALT
EXECUTION BEFORE A ^^RETURN\\ STATEMENT IS EXECUTED INSIDE A SPECIFIED
^^FORTRAN\\ SUBPROGRAM:
.NOFILL
^^ * STOP BEFORE SUBR\\ ^WILL HALT AND DISPLAY ^^'BEFORE RETURN'\\.
^^ * BEFORE SUBR,2\\ ^WILL DISPLAY MESSAGE EVERY SECOND TIME.
.FILL
.SKIP 2
.SUBTITLE ^^ON\\ ASSIGNMENT ^COMMAND
^&^THE ^^ON\\ COMMAND\& IS USED TO GIVE NOTIFICATION OR HALT EXECUTION
WHEN AN ASSIGNMENT OR INPUT STATEMENT IN A SPECIFIED ^^FORTRAN\\
ROUTINE MODIFIES A VARIABLE OR ARRAY. ^THE COMMAND WILL NOT DETECT
CHANGES TO SUBPROGRAM ACTUAL ARGUMENTS OR ^^NAMELIST\\ VARIABLES.
^YOU CAN CAUSE EACH NEW VALUE TO BE COMPARED WITH A CONSTANT OR CAUSE
CHECKING AT ONLY ONE OR SEVERAL STATEMENTS. ^YOU CAN
SPECIFY A SCALAR, ARRAY ELEMENT, OR ENTIRE ARRAY (REGARDLESS
OF HOW IT MAY BE EQUIVALENCED).
.NOFILL
^^ * STOP ON MAIN/P\\ ^HALTS WHEN THE VARIABLE ^P IN THE MAIN PROGRAM
.TEST PAGE 3
^^ AT MAIN /890 \\IS CHANGED WITH THIS SORT OF MESSAGE.
^^ P = 34.4\\ ^IF A ROUTINE NAME IS OMITTED THEN ONLY THE
CURRENT PROGRAM IS ASSUMED.
^^ * ON P .GT. 40\\ ^CHECKS FOR A VALUE GREATER THAN THE CONSTANT.
^THE POSSIBLE CONDITIONS ARE ^^EQ,NE,LT,GT,LE,GE\\.
^^ * ON Y AT 60 \\ ^CHECKS THE ARRAY ^Y AT ONE STATEMENT ONLY.
^^ * ON MAIN/Y AT 60\\ ^IMPLIES THAT LABEL 60 IS IN THE MAIN
^^ AT MAIN/60\\ PROGRAM. ^CHECKING THE ENTIRE ARRAY GIVES
^^ Y ( 2)= 21.9 \\ THIS SORT OF MESSAGE.
^^ * ON I(3) BETWEEN 24 AND 25\\ ^CHECKS THE ARRAY ELEMENT IN THE
STATEMENTS FROM 24 UP TO (BUT NOT INCLUDING) 25.
.FILL
.SKIP
^EXECUTION ALWAYS HALTS WHEN A CHANGE IS MADE BY AN INPUT STATEMENT
^^(READ, ACCEPT, ENCODE, DECODE)\\. ^ANY COMMANDS ATTACHED TO THE ^^ON\\
COMMAND ARE IGNORED. ^IF AN ENTIRE ARRAY IS CHANGED BY A ^^FORTRAN\\
STATEMENT SUCH AS ^^'READ(1,4)#ARRAY'\\, THEN EXECUTION HALTS
REGARDLESS OF ANY COMPARISON SPECIFIED IN THE ^^ON\\ COMMAND.
.SKIP
^IF THE SAME VARIABLE APPEARS IN MORE THAN ONE AUTOMATIC ^^ON\\ COMMAND
AND THE STATEMENTS THAT ARE SPECIFIED OVERLAP, THEN ONLY THE MOST
RECENT COMMAND TAKES EFFECT (ALL OTHERS ARE REVOKED).
.NOFILL
^^ * ON P BETWEEN 34-1 AND 34+4\\ ^IF THESE TWO COMMANDS ARE GIVEN
^^ * ON P AT 34\\ THEN ONLY THE SECOND TAKES EFFECT.
.FILL
.SKIP
^VARIABLES THAT ARE EQUIVALENCED ARE TREATED BY ^^ON\\ COMMANDS AS
THO THEY WERE DIFFERENT VARIABLES; HENCE, ^^ON\\ COMMANDS CHECKING
EQUIVALENCED VARIABLES IN OVERLAPPING RANGES OF STATEMENTS WILL ALL BE
IN EFFECT. ^IF ^^TRY(5)\\ AND ^^COPY(5)\\ ARE EQUIVALENCED THEN:
.NOFILL
.SKIP
^^ * STOP ON COPY(3) .EQ. 100 AT 23\\ ^BOTH THESE ARE IN EFFECT EVEN
^^ * STOP ON TRY BETWEEN 23 AND 60\\ THO ^^COPY\\ AND ^^TRY\\ REFER TO THE
SAME MEMORY LOCATIONS.
.FILL
^SINCE EQUIVALENCED VARIABLES REALLY REFER TO THE SAME MEMORY LOCATIONS,
AN ^^ON\\ COMMAND EFFECTING ONE VARIABLE WILL EFFECT OTHERS ALSO.
.SKIP
^OVERHEAD FROM ^^ON\\ COMMANDS CAN BECOME HIGH UNLESS YOU TAKE CARE TO
RESTRICT THE RANGE OF STATEMENTS CHECKED:
.NOFILL
^^ * ON MAIN/Y BETWEEN MAIN/+1 AND MAIN/+4\\ ^THE FIRST IS CHEAPER
^^ * ON MAIN/Y\\ BECAUSE IT ONLY CHECKS A FEW STATEMENTS
INSTEAD OF THE WHOLE MAIN PROGRAM.
.FILL
.SKIP 2
^&^THE ^^KILL\\ COMMAND\& IS USED TO REVOKE ONE ^^AT\\ COMMAND, OR ONE
^^ONCALL\\ COMMAND, OR ONE ^^BEFORE RETURN\\ COMMAND, OR ONE OR
MORE ^^ON\\ ASSIGNMENT COMMANDS. ^ANY OTHER COMMANDS THAT ARE
ATTACHED ARE ALSO REVOKED:
.NOFILL
^^ * KILL AT MAIN/700\\ ^REVOKES THE AUTOMATIC ACTION AT LABEL
700 IN THE MAIN PROGRAM.
^^ * KILL ONCALL SUBR\\ ^ERASES DETECTION OF CALLS TO ^^SUBR\\.
^^ * KILL BEFORE SUBR\\ ^REVOKES DETECTION OF RETURNS FROM ^^SUBR\\.
^^ * KILL ON P\\ ^ERASES DETECTION OF ASSIGNMENT OR OF
INPUT MODIFICATION OF VARIABLE ^P IN THE
CURRENT PROGRAM.
^^ * KILL ON Y AT 7\\ ^REVOKES DETECTION OF MODIFICATION OF
ARRAY ^Y AT LABEL 7 AND AT ALL
OVERLAPPING RANGES OF STATEMENTS.
.FILL
.SUBTITLE ^^SUBCHECK\\ AND ^^TRACE\\ ^COMMANDS
.PAGE
^&^THE ^^SUBCHECK\\ COMMAND\& IS USED TO AUTOMATICALLY CHECK ARRAY SUBSCRIPTS
AND HALT EXECUTION WHENEVER A SUBSCRIPT GOES OUT OF ARRAY BOUNDS.
^YOU CAN CAUSE THE MONITORING OF A SPECIFIED ARRAY, ALL ARRAYS IN A
SPECIFIED ROUTINE, OR ALL ARRAYS IN ALL ROUTINES FOR WHICH YOU DID
NOT GIVE THE ^^/NOMAN\\ SWITCH IN YOUR ^^DEBUG\\ COMMAND.
^FOR EXAMPLE:
.NOFILL
^^ * SUBCHECK Y\\ ^MONITORS ARRAY ^Y IN THE CURRENT ROUTINE.
^^ * SUBCHECK SUBR/, BETWEEN 100 AND 230+1\\ ^MONITORS ALL ARRAYS
IN ROUTINE ^^SUBR\\ BUT ONLY FOR THE STATEMENTS
FROM 100 UP TO (INCLUDING) LABEL 230. ^ALL ARRAYS
IS HERE INDICATED BY THE COMMA.
^^ * STOP SUBCHECK MAIN/\\ ^STOPS MONITORING OF ALL ARRAYS
IN THE MAIN PROGRAM.
^^ * STOP SUBCHECK Y AT 80-1\\ ^STOPS MONITORING OF ARRAY ^Y AT THE
STATEMENT BEFORE LABEL 80.
.FILL
^IF AN ILLEGAL SUBSCRIPT IS DETECTED, THEN EXECUTION IS HALTED AND A
MESSAGE SUCH AS THIS IS DISPLAYED:
.NOFILL
^^ ?REFERENCE TO Y ILLEGAL AT MAIN /80 \\
^DO &N&O&T RESUME EXECUTION WITH:
^^ * GO\\ ^THE BAD SUBSCRIPT WILL BE USED!
^INSTEAD:
^^ * GO 80\\ ^GIVE THIS COMMAND AFTER THE SUBSCRIPTS
ARE CORRECTED.
^^ * GO 80+1\\ OR GIVE THIS TO SKIP OVER THE ERRONEOUS STMT.
.FILL
.SKIP
^SUBCHECKING OF A CERTAIN ARRAY IS DONE ONLY WITHIN THE SPECIFIED ROUTINE.
^IF YOU WISH TO CHECK AN ARRAY COMMON TO MORE THAN ONE ROUTINE, YOU
MUST GIVE A ^^SUBCHECK\\ COMMAND FOR EACH ROUTINE. ^MONITORING A
SPECIFIC ARRAY DOES NOT MEAN CHECKING OF ARRAYS EQUIVALENCED TO IT.
.SKIP
^IF AN ILLEGAL ARRAY REFERENCE OCCURS WITHIN AN INPUT STATEMENT ^^(READ,
ACCEPT)\\, THEN SOME INPUT DATA WILL BE THROWN AWAY. ^IF A BAD
REFERENCE OCCURS WITHIN AN OUTPUT STATEMENT (^^WRITE, TYPE)\\, THEN SOME
ZEROS WILL BE OUTPUT.
.SKIP 2
^&^THE ^^HISTORY\\ COMMAND\& IS USED TO DISPLAY A RECORD OF ROUTINE CALLS
AND ^^GOTO\\S (INCLUDING ^^MANTIS GO\\ COMMANDS) FOR ALL ROUTINES FOR
WHICH YOU DID NOT GIVE THE ^^/NOMAN\\ SWITCH IN YOUR ^^DEBUG\\ COMMAND.
^BEGINNING WITH THE MOST RECENT, THE LAST ONE HUNDRED DEPARTURES FROM
SEQUENTIAL EXECUTION ARE DISPLAYED:
.NOFILL
^^ * HISTORY\\ ^A ^^TRACE\\ COMMAND WAS NOT GIVEN BEFORE THIS.
^^ RETURNED TO MAIN/20+2\\ ^MOST RECENTLY WAS A RETURN
FROM SUBROUTINE ^^SUBA\\.
^^ CMD GO TO SUBA/5+1\\ ^THE USER GAVE A ^^GO\\ COMMAND DURING
EXECUTION OF THE SUBROUTINE ^^SUBA\\.
^^ SUBA CALLED\\ ^THE SUBROUTINE CALL WAS RECORDED.
.FILL
.SKIP
^&^THE ^^TRACE \\COMMAND\& IS USED TO INITIATE RECORDING OF ^^GOTO\\,
ARITHMETIC ^^IF\\, AND TRUE LOGICAL ^^IF\\ STATEMENTS. ^THE ENTRY AND
LOOPING OF A ^^DO\\ LOOP IS NOT RECORDED. ^YOU MIGHT WANT TO INITIATE
TRACING BEFORE OR DURING EXECUTION AND DISPLAY THE HISTORY AT THE VERY
END OF PROGRAM EXECUTION. ^IF YOU REQUEST TRACING FOR THE ENTIRE
EXECUTION OF A PROGRAM, THE TIME OVERHEAD MAY BE HIGH.
.SUBTITLE ^^USE C\\OMMAND
.PAGE
^THE ^^USE\\ COMMAND IS USED TO DIRECT ^^MANTIS\\ DISPLAYS TO A FILE
ON DISK FOR LATER LISTING. ^NO PROGRAM BEING DEBUGGED MAY USE UNIT 24
IF YOU GIVE THE ^^USE\\ COMMAND. ^FOR EXAMPLE:
.NOFILL
^^ * USE PART1\\ ^SENDS ^^MANTIS\\ DISPLAYS TO A DISK FILE NAMED
^^PART1.DAT\\.
^^ * USE TTY\\ ^AFTER EITHER ONE OF THESE TWO COMMANDS, ^^MANTIS\\
^^ * TYPE\\ X OUTPUT IS SENT TO YOUR TELETYPE.
^^ * USE PART1\\ ^APPEND ^^MANTIS\\ DISPLAYS TO INFORMATION
ALREADY IN THE FILE.
^^ * USE PART2\\ ^CLOSE FILE ^^PART1.DAT\\ AND BEGIN SENDING TO
FILE ^^PART2.DAT\\. ^FILE ^^PART1.DAT\\ CANNOT BE
USED OVER AGAIN WITHOUT OVER-WRITING IT.
.FILL
^THE ^^OUTPUT\\ COMMAND MUST ALWAYS BE USED INSTEAD OF THE ^^TYPE\\
COMMAND IF YOU WANT ^^MANTIS\\ DISPLAYS TO GO EITHER TO THE TELETYPE OR
TO THE DISK. ^THE ^^RESTART\\ OR ^^EXIT\\ COMMANDS ALSO CLOSE THE
^^USE\\ FILE.
.SUBTITLE ^RECOVERY FROM ^COMMON ^ERRORS
.SKIP 2
^&^MANY ^^FORTRAN\\ ERRORS\& CAN BE LOCATED QUICKLY USING THE ^^MANTIS\\
DEBUGGER. ^^MANTIS\\ TRAPS SEVERAL ERRORS WHICH WOULD OTHERWISE
TERMINATE EXECUTION, TELLING YOU WHERE THE ERROR OCCURRED IN THE
^^FORTRAN\\ PROGRAM AND GIVING YOU A CHANCE TO EXAMINE VARIABLES,
CHECK THE SEQUENCE OF EXECUTION (^^HISTORY\\ AND ^^TRACE\\ COMMANDS),
AND EVEN RE-EXECUTE ALL OR PART OF YOUR PROGRAM. ^INFINITE LOOPS
ARE ALSO EASIER TO LOCATE WITH ^^MANTIS\\ IN CONTROL.
.SKIP
^THE ^^DEC\\SYSTEM-10 MONITOR GENERATES A NUMBER OF ERROR MESSAGES WHICH
DO NOT GIVE THE ^^FORTRAN\\ PROGRAMER MUCH INSIGHT INTO THE NATURE OF THE
PROBLEM ENCOUNTERED. ^FOR EXAMPLE:
.NOFILL
^^ ?ILL MEM REF AT USER\\ X
^^ ?ILLEGAL UUO AT USER\\ X
^^ ?ILL INST AT USER\\ X
.FILL
.SKIP
^OTHER MESSAGES ARE CLEAR IN MEANING BUT DO NOT TELL YOU WHERE THE
ERROR OCCURRED IN YOUR ^^FORTRAN\\ PROGRAM. ^FOR EXAMPLE:
.NOFILL
^^ INTEGER DIVIDE CHECK PC = \\X
.FILL
.SKIP
^WITHOUT ^^MANTIS\\, ^^FORTRAN\\ EXECUTION ERRORS TERMINATE EXECUTION AND
RETURN CONTROL TO THE MONITOR; HOWEVER, WITH ^^MANTIS\\, MANY OF THESE
ERRORS RETURN CONTROL TO ^^MANTIS\\ INSTEAD OF THE MONITOR. ^THE
DEBUGGER DISPLAYS THE LOCATION OF THE ^^FORTRAN\\ STATEMENT
ABOUT TO BE EXECUTED AND PROMPTS '*' FOR MORE COMMANDS. ^YOU MAY
THEN EXAMINE CRITICAL VARIABLES AND THE ^^HISTORY\\ TO DETERMINE THE CAUSE OF THE ERROR.
.SKIP 2
^&^THE FOLLOWING ARITHMETIC ERRORS\& MAY OCCUR:
.NOFILL
^^ INTEGER OVERFLOW PC =\\ X
^^ INTEGER DIVIDE CHECK PC =\\ X
^^ FLOATING OVERFLOW PC =\\ X
^^ FLOATING UNDERFLOW PC =\\ X
^^ FLOATING DIVIDE CHECK PC =\\ X
^^ ATTEMPT TO TAKE SQRT OF NEGATIVE ARG\\
^^ ACOS OF ARG_>1.0 IN MAGNITUDE\\
^^ ASIN OF ARG_>1.0 IN MAGNITUDE\\
.FILL
.SKIP
^NORMALLY ONLY THE FIRST TWO OCCURRENCES OF ANY OF THESE
ARITHMETIC ERRORS IS REPORTED TO THE USER. ^A CALL IN YOUR PROGRAM TO THE LIBRARY
SUBROUTINE ^^ERRSET\\ CAN BE USED TO CHANGE THIS LIMIT. ^ALTERNATIVELY,
THE VARIABLE ^^'ERRMX.'\\ MAY BE GIVEN IN A DISPLAY OR VALUE-CHANGE COMMAND TO CONTROL WHETHER
YOU ARE TOLD ABOUT AN ARITHMETIC ERROR.
.NOFILL
.SKIP
^^ _.TYPE SAMP2.F4\\ ^THE EXAMPLE PROGRAM
^^ Y = 10.0
X = Y/A
STOP
END\\
.SKIP
GENERATES AN ERROR MESSAGE DURING EXECUTION:
^^ _.DEB/LO SAMP2
FORTRAN: SAMP2.F4
LOADING
MANTIS V5
CURRENT PROGRAM IS MAIN\\
^^ * GO\\
^^ ?FLOATING DIVIDE CHECK PC =002110
^^ PROGRAM AT MAIN / +2\\ ^THE ERROR IS IN THE SECOND
EXECUTABLE STATEMENT.
^^ * TYPE Y,A\\ ^THE USER COMMANDS DISPLAY OF ^Y AND ^A.
10.0
0.0
.FILL
^HOPEFULLY, YOU WILL BE ABLE TO CORRECT YOUR PROGRAM ONCE YOU KNOW WHICH
STATEMENT CAUSES THE ERROR AND WHAT VALUES EACH VARIABLE HAD. ^IN THIS
EXAMPLE, VARIABLE ^A WAS ZERO BECAUSE IT WAS NEVER INITIALIZED IN THE
PROGRAM. ^IF THE USER TYPES:
.NOFILL
^^ * A =2.0\\ ^THIS CHANGES THE VALUE OF VARIABLE ^A.
^^ * RESTART\\ ^RESTART EXECUTION AT THE BEGINNING.
^^ INITILIZE DATA AND GO\\
^^ * GO\\ ^THIS PROGRAM WILL NOW RUN WITHOUT ERROR.
.FILL
^THE USER CAN NOW EDIT HIS SOURCE PROGRAM TO INCLUDE INITIALIZATION OF
VARIABLE ^A. ^&^^MANTIS\\ DOES NOT MODIFY SOURCE PROGRAM FILES.\&
.SKIP 2
^^'^&ILL MEM REF AT USER\\ X\&' IS A MONITOR ERROR MESSAGE FREQUENTLY CAUSED
BY REFERENCING AN ARRAY ELEMENT WITH SUBSCRIPTS WHOSE VALUES ARE BEYOND
THE RANGE DIMENSIONED FOR THE ARRAY.
^THE SIMPLEST WAY TO CHECK FOR SUCH ERRORS IS TO USE THE ^^MANTIS\\
^^SUBCHECK\\ COMMAND.
.SKIP
.NOFILL
^^ _.TYPE SAMP3.F4\\ ^AN EXAMPLE PROGRAM.
^^ DIMENSION ARR(10)
I = 50
TEST = ARR(I)
STOP
END
.DEB/LO SAMP3
FORTRAN: SAMP3.F4
LOADING
MANTIS V5
CURRENT PROGRAM IS MAIN\\
^^ * SUBCHECK MAIN/ARR\\ ^SETUP SUBSCRIPT CHECKING.
^^ SETUP\\
.TEST PAGE 3
^^ * GO\\ ^BEGIN PROGRAM EXECUTION.
.SKIP
^^ ?REFERENCE TO ARR ILLEGAL AT MAIN / + 2\\
.FILL
.SKIP
^ONCE THE LOCATION OF THE ILLEGAL ARRAY REFERENCE IS KNOWN, YOU CAN
CHECK THE SOURCE PROGRAM TO FIND THE STATEMENT AND FURTHER CHECK THE
VARIABLE SUBSCRIPT(S) USED WITH THE ^^MANTIS\\ ^^TYPE\\ COMMAND. ^IF
THERE IS MORE THAN ONE SUBSCRIPTED ARRAY IN THE STATEMENT,
YOU MIGHT DISPLAY EACH SUBSCRIPT TO DETERMINE WHICH ONES ARE
OUT OF BOUNDS.
.SKIP 2
^&^AN INFINITE LOOP\& IS ANOTHER PROGRAMING ERROR. ^IT CAN BE HARD TO LOCATE
BECAUSE THERE IS NO ERROR MESSAGE FOR IT. ^ONE SUSPECTS AN INFINITE
LOOP WHEN 1) THE SAME OUTPUT IS TYPED OVER AND OVER ON YOUR TELETYPE OR
IN YOUR DATA FILE; 2) NOTHING IS TYPED ON YOUR TELETYPE AND SOMETHING
SHOULD HAVE BEEN. ^A WAYWARD LOOP MAY ALSO EVENTUALLY CAUSE A SUBSCRIPT
TO GO OUT OF RANGE (^^ILL MEM REF\\) OR CAUSE A VARIABLE VALUE TO
OVERFLOW OR UNDERFLOW. ^AN INFINITE LOOP IS FOUND USING THE ^^TRACE\\
AND ^^HISTORY\\ COMMANDS AND THE MONITOR COMMAND ^^'REENTER'\\.
.SKIP
^THE FOLLOWING PROGRAM CONTAINS TWO BUGS:
1) ^^ISTART\\ IS INITIALIZED TO ZERO, SO THE FIRST REFERENCE TO
^^IARRAY\\ IS ILLEGAL; 2) ^^INC\\ IS INITIALIZED TO ZERO (BY DEFAULT),
SO THE VALUE OF ^I NEVER CHANGES, THUS CAUSING AN INFINITE LOOP.
.NOFILL
.SKIP
^^_.TY SAMP4.F4\\ ^THE EXAMPLE PROGRAM.
^^ DIMENSION IDUMMY(2), IARRAY(5)
DATA IEND/5/
I=ISTART
10 IARRAY(I)=10*I
I=I+INC
IF(I.LE.IEND) GO TO 10
STOP
END
.SKIP
_.DEB/LO SAMP4\\ ^USE ^^MANTIS\\ TO FIND THESE TWO BUGS.
^^FORTRAN: SAMP4.F4
LOADING
#MANTIS V5
CURRENT PROGRAM IS MAIN
* TRACE\\ ^FIRST, A ^^TRACE \\COMMAND IS ENTERED TO
MONITOR THE FLOW OF EXECUTION.
* ^^GO\\ ^AFTER ^^GO\\ HAS BEEN TYPED AND AN
_^^C INORDINATE AMOUNT OF TIME HAS ELAPSED
_^^C WITH NO PROGRAM RESPONSE, THE USER TYPES
_^^C_^^C TO LEAVE PROGRAM EXECUTION AND
RETURN TO THE MONITOR.
_.^^REE\\ ^EXECUTION IS ^^REENTER\\ED, ^^MANTIS\\
TELLS THE USER AT WHICH STATEMENT IN THE
^^PROGRAM AT MAIN / 10\\ PROGRAM EXECUTION WAS INTERRUPTED.
^^* USE TRCFL\\ ^SINCE THE ^^HISTORY\\ HOLDS 100 LINES OF
OUTPUT AND THE TELETYPE IS A SLOW
^^* HISTORY\\ DEVICE, THE USER DIRECTS OUTPUT TO THE
DISK FILE ^^TRCFL.DAT\\, WHICH CAN BE
EXAMINED LATER.
^^* USE TTY\\ ^THE USER NOW RE-DIRECTS ^^MANTIS\\ OUTPUT
TO HIS TELETYPE.
^^* OUTPUT INC\\ ^HE EXAMINES AND CORRECTS VARIABLE ^^INC\\.
0
^^* INC=1\\
^^* STOP TRACE\\ ^STOP ALL TRACING, AND
^^* SUBCHECK\\ SETUP SUBSCRIPT CHECKING FOR ALL ARRAYS.
^^SETUP\\
^^* GO MAIN/+1\\ ^RESUME EXECUTION AT BEGINNING.
.SKIP
^^?REFERENCE TO IARRAY ILLEGAL AT MAIN / 10\\
.SKIP
^^* OUTPUT I\\ ^A SUBSCRIPT ERROR WAS FOUND SO THE USER
0 EXAMINES THE SUBSCRIPT VARIABLE ^I.
^^* EXIT\\ ^EXIT TO THE MONITOR SO HE CAN
EDIT HIS PROGRAM SOURCE FILE.
^^END OF EXECUTION
CPU TIME: 5.40 ELAPSED TIME: 5:25.31
EXIT\\
.SKIP
^^_.TYP TRCFIL.DAT\\ ^THE INFINITE LOOP IS WELL REPRESENTED
BY THE SERIES OF ENTRIES IN THE ^^HISTORY\\
^^ MANTIS OUTPUT\\ OUTPUT WHICH WAS SENT TO THE FILE
^^TRCFL.DAT\\.
^^GO TO MAIN /10
GO TO MAIN /10
GO TO MAIN /10
GO TO MAIN /10
GO TO MAIN /10
GO TO MAIN /10
GO TO MAIN /10
GO TO MAI_^C\\
.FILL
.SUBTITLE ^COMMAND ^SYNTAX
.PAGE
^CAPITAL LETTERS INDICATE KEYWORDS; LOWER-CASE INDICATE SOURCE-PROGRAM
NAME OR NUMBER OR A CONSTRUCT NAME. [] INCLOSES OPTION; IF CONSECUTIVE
LINES THEN CHOOSE ONE OF THE LINES. ^CARRIAGE-RETURN IS USED TO END
A COMMAND LINE.
.NOFILL
.LEFT MARGIN 0
.SKIP
COMMAND: [ [^^STOP\\ ]STORED-COMMAND[ATTACHMENTS] ]
[ ^^GO\\ ]
[ CARRIAGE-RETURN ]
[ ATTACHABLE-COMMAND ]
[ ^^KILL\\ ]
[ [^^STOP ]SUBCHECK\\[SUBCHECK-ARGUMENTS] ]
[ ^^HISTORY\\ ]
[ [^^STOP ]TRACE[ OUTPUT][ PAUSE]\\ ]
[ CONTROL-^C[CONTROL-^C] ]
[ ^^RESTART\\ ]
[ ^^EXIT\\ ]
[ MAGTAPE-COMMAND ]
[ ^^USE\\ [FILENAME]
[^^TTY\\ ] ]
STORED-COMMAND: [ ^A^T LABEL[,POSITIVE-INTEGER] ]
[ ^^ON[ ]CALL\\ ROUTINE ]
[ ^^BEFORE[ RETURN][ FROM]\\ ROUTINE[,POSITIVE-INTEGER] ]
[ ^O^N VARIABLE[.RELATION.CONSTANT][ RANGE] ]
.SKIP
ATTACHMENTS: ; ATTACHABLE-COMMAND[ATTACHMENTS]
ATTACHABLE-COMMAND: [ ; COMMENT ENDED BY A CARRIAGE-RETURN ]
[ ^G^O LABEL ]
[ ^^TY[PE]\\ OUTPUT-LIST ]
[ ^^OU[TPUT]\\ OUTPUT-LIST ]
[ ELEMENT = CONSTANT ]
[ ^^KILL [AT\\ LABEL ]
[^^ONCALL\\ ROUTINE ]
[^^BEFORE\\ ROUTINE ]
[^O^N VARIABLE[ RANGE] ] ]
.SKIP
SUBCHECK-ARGUMENTS: [ [ROUTINE/]NAME[ RANGE] ]
[ ROUTINE/[,RANGE] ]
OUTPUT-LIST: ELEMENT[ ^^IN[]TEXT\\] [,OUTPUT-LIST]
[ ^^IN[]OCTAL\\]
ELEMENT: [ [ROUTINE/]SCALAR ]
[ [ROUTINE/]ARRAY(SUBSCRIPT-CONSTANTS) ]
[ [ROUTINE/]ARRAY(SUBSCRIPT-CONSTANTS-OR-*)]
[ ^^ARG:\\POSITIVE-INTEGER ]
VARIABLE: [ROUTINE/] NAME [(SUBSCRIPT-CONSTANTS)]
CONSTANT: [CONSTANT OF TYPE MATCHING VARIABLE]
[ 'TEXT-CHARACTERS' ]
[ "OCTAL-NUMBER ]
.SKIP
RANGE: [ ^A^T LABEL ]
[ ^^BETWEEN\\ LABEL ^^AND\\ LABEL]
.SKIP
MAGTAPE-COMMAND: [ ^^ENDFILE\\] _#POSITIVE-INTEGER
[ ^^REWIND\\]
[ ^^UNLOAD\\]
[ ^^BACKSP[ACE]\\]
[ ^^SKIPRE[CORD]\\]
.FILL
.LEFT MARGIN 4
.SUBTITLE
.PAGE
.CENTER
^SELECTED ^MESSAGES ^DISPLAYED BY ^^MANTIS\\
.SKIP 2
.LEFT MARGIN 12
.INDENT -8
^^?BAD POSITION\\: STATEMENT DOES NOT EXIST IN SPECIFIED (OR ASSUMED)
ROUTINE.
.SKIP
.INDENT -8
^^?BOUNDS UNDEFINED\\: THERE IS NO CALCULATED REFERENCE TO THE
VARIABLE-DIMENSIONED ARRAY IN SPECIFIED SUBROUTINE;
.BREAK
OR THE DEBUGGER DOES NOT KNOW WHAT THE ARRAY BOUNDS ARE.
.SKIP
.INDENT -8
^^?INVALID UNIT\\: THE LOGICAL UNIT NUMBER IS TOO SMALL OR LARGE;
.BREAK
OR THE NUMBER IS 24 BUT A ^^USE\\ COMMAND HAD BEEN GIVEN.
.SKIP
.INDENT -8
^^_%MISSED KILL\\: THE COMMAND TO BE REVOKED BY THE ATTACHED ^^KILL\\
WAS NOT FOUND.
.SKIP
.INDENT -8
^^?NAME UNDEFINED\\: THE LABEL OR VARIABLE IS NOT USED IN AN
EXECUTABLE STATEMENT IN THE SPECIFIED (OR ASSUMED) ROUTINE;
.BREAK
OR THE ROUTINE WAS GIVEN THE ^^/NOMAN\\ SWITCH IN THE ^^DEBUG\\ COMMAND.
.SKIP
.INDENT -8
^^#NO COMPUTED REFS\\: THERE IS NOTHING TO ^^SUBCHECK\\ IN THE SPECIFIED
STATEMENT(S).
.SKIP
.INDENT -8
^^?NOT VALID ATTACHED\\: THE ATTACHED COMMAND (AFTER A SEMICOLON) CAN BE
USED ONLY BY ITSELF.
.SKIP
.INDENT -8
^^#PROGRAM AT##?##\\##PROGRAM EXECUTION WAS INTERRUPTED
WHILE IN A NON-^^FORTRAN\\ ROUTINE OR WHILE IN A ROUTINE WHICH WAS GIVEN
THE ^^/NOMAN\\ SWITCH IN THE ^^DEBUG\\ COMMAND.
.SKIP
.INDENT -8
^^?RESET.#LUUO NOT ALLOWED\\: ^^MACRO-10\\ PROGRAMS MAY NOT BE DEBUGGED
WITH THE ^^MANTIS\\ PROGRAM.
.SKIP
.INDENT -8
^^?SPECIFY ELEMENT OR JUST NAME\\: IN THE ^^ON\\ COMMAND THE '*' NOTATION
IS NOT ALLOWED.
.SKIP
.INDENT -8
^^?SYNTAX ERROR\\: THE COMMAND HAS BEEN MISTYPED; BE SURE BLANKS ARE IN
PROPER PLACES;
.BREAK
OR A REAL CONSTANT ASSIGNED TO AN INTEGER VARIABLE;
.BREAK
OR '*' NOTATION NOT USED BY ITSELF IN A SINGLE DISPLAY OR VALUE-CHANGE COMMAND.
.SKIP
.INDENT -8
^^?TOO MANY COMMAND STRINGS\\: THE AREA THAT HOLDS AUTOMATIC ACTION
COMMANDS IS FULL.