$A TAB=5, 10; CAPO=0; CAPSHO=0; INVERT=1; PAGENO=1 $A JUST=1; LINE=72; PAGE=59; TOP=3; BOTTOM=4; MARK=2 $L1CM DEBUGGING PROGRAM $B2 $L1C OBJECT: DBUG $A INDENT=1 $P2 @THIS PROGRAM IS USED AS AN AID TO DEBUGGING PROGRAMS, IT WILL MORMALLY BE 'LINKED' TO A RUNNING PROGRAM ON THE SYSTEM USING THE COMMAND .'T' (FOR DETAILS SEE LATER), ALL ACCESSES TO LOCATIONS WILL THEN BE MADE IN THAT PROGRAMS VIRTUAL MEMORY. $B0 @IT MAY BE USED TO:- $A INDENT=2 $B0 1) .SET AND .CLEAR BREAKPOINTS $B0 2) @DUMP OUT THE .PSECT, .REGISTERS AND/OR THE .IMP .STACK. $B0 3) .EXAMINE AND .CHANGE LOCATIONS IN CORE. $B0 4) .DUMP GENERAL AREAS OF CORE. $A INDENT=1 $P2 .DEBUG INDICATES ITS READINESS TO ACCEPT COMMANDS BY TYPING .'DEBUG:'. @THE FOLLOWING COMMANDS MAY BE USED. $A INDENT=2 $B1 $I-1 .T - $T+1 @SET @TASK NUMBER OF PROGRAM TO BE DEBUGGED. $I-1 .B - $T+1 @SET BREAKPOINT. $I-1 .C - $T+1 @CLEAR BREAKPOINT. $I-1 .N - $T+1 @SET A NEW PROGRAM CODE BASE. $I-1 .R - $T+1 @DUMP THE .REGISTERS. $I-1 .P - $T+1 @DUMP THE .PSECT. $I-1 .I - $T+1 @DUMP THE .IMP STACK. $I-1 .A - $T+1 @DO .'P', .'R', AND .'I'. $I-1 .D - $T+1 @DUMP AN AREA OF CORE. $I-1 .O - $T+1 @CHANGE THE OUTPUT DEVICE. $I-1 .W - $T+1 .WAIT .DEBUG. $I-1 .S - $T+1 @STOP .DEBUG. $I-1 .? - $T+1 @PRINT OPTIONS. $A INDENT=1 $P1 @IN ADDITION TO THESE COMMANDS, THERE IS AN IMPLIED COMMAND, ACTIVATED BY TYPING AN OCTAL DIGIT, THAT ENTERS THE LOCATION EXAMINATION/CHANGE PART OF .DEBUG. $P2 @A DETAILED DESCRIPTION OF EACH COMMAND FOLLOWS. $B3 $L1C T - SET TASK NUMBER $P1 @THE PROMPT .'TASK .ID:' IS OUTPUT AND THE (OCTAL) .ID OF THE PROGRAM TO BE DEBUGGED SHOULD BE ENTERED. @THE .TASK .ID OF A RUNNING PROGRAM MAY BE OBTAINED BY TYPING THE COMMAND .'TASKS' TO THE COMMAND LANGUAGE INTERPRETER. $B0 .NOTE: @ONLY THE COMMANDS .'T', .'N', .'O', .'S' AND .'W' MAY BE USED BEFORE .'T' IS USED FOR THE FIRST TIME. $V15 $B3 $L1C B - SET BREAKPOINT $P1 @THE PROMPT .'ADDR:' IS OUTPUT, THE REPLY IS THE .RELATIVE ADDRESS (WRT THE START OF THE PROGRAM) OF THE DESIRED BREAKPOINT. @DEBUG WILL REMEMBER THE CONTENTS AND PLACE A .'BR $.' IN THE LOCATION. @THIS WILL CAUSE THE PROGRAM TO LOOP WHEN IT EXECUTES THAT INSTRUCTION. $P1 @DEBUG REPLIES: $B0 .BP: N .ADDR: N2 .CONT= N3 - WHERE 'N' IS THE BREAKPOINT NUMBER (BETWEEN 0 AND 20), 'N2' IS THE VIRTUAL ADDRESS, AND 'N3' THE ORIGINAL CONTENTS. $P1 @THE MESSAGE .'BP .TABLE .FULL' IS OUTPUT IF MORE THAN 21 BREAKPOINTS ARE USED. @SEE THE COMMAND .'N' FOR SETTING BREAKPOINTS IN EXTERNAL ROUTINES. $B3 $L1C C - CLEAR BREAKPOINTS $P1 @PROMPTS .'NO?'. @THE BREAKPOINT NUMBER SHOULD BE TYPED. .'A' OR '-1' IS TYPED IF .ALL THE BREAKPOINTS ARE TO BE CLEARED. @IF THE SPECIFIC BREAKPOINT HAS NOT BEEN SET, THE MESSAGE '?' IS OUTPUT. @THE ORIGINAL CONTENTS ARE REPLACED. $B3 $L1C N - SET A NEW PROGRAM CODE BASE $P1 @PROMPTS .'NEW .PROGRAM .CODE:'. @REPLY GIVING THE NEW ADDRESS. @THIS COMMAND IS USEFUL FOR PROGRAMS USING EXTERNAL ROUTINES. @TO SET A BREAKPOINT IN AN EXTERNAL ROUTINE, THE CODE BASE IS SET TO THAT OF THE EXTERNAL ROUTINE, AS PRINTED OUT BY THE .LINKER, AND THE RELATIVE ADDRESS SPECIFIED. @THIS DOES NOT EFFECT ANY PREVIOUSLY SET BREAKPOINTS. $B3 $L1C R - PRINT REGISTERS. $P1 @THIS COMMAND PRINTS THE REGISTERS OF THE NOMINATED TASK. @THE .LOCAL .NAME .BASE .(LNB) FOR THE OUTER LEVEL IS ALSO PRINTED. $B3 $L1C P - PRINT THE PSECT $P1 @THE .PSECT (OWN SYSTEM VARIABLES) OF THE NOMINATED TASK IS PRINTED. $B0 @THE COMMAND :- $B0 $I+1 1) @PRINTS THE NAME OF THE TASK $B0 $I+1 2) @PRINTS THE STATE OF THE TASK. $B0 $I+1 3) @INDICATES WHETHER THERE ARE MESSAGES QUEUED. $B0 $I+1 4) @CALLS .'REGISTERS' TO DUMP THE REGISTERS OUT. $B0 $I+1 5) @PRINTS THE CONTENTS OF THE SEGMENTATION REGISTERS $B0 $I+1 $C+4 IN THE FORM:- $B0 .REGISTER NUMBER $C+3 .ADDRESS $C+3 .LENGTH. $V6 $V10 $B3 $L1C I - PRINT THE IMP STACK $P1 @THE ENTIRE .IMP .STACK IS PRINTED ON THE OUTPUT DEVICE. $B0 .NOTE: @THE .GLA OF THE PROGRAM IS HELD AT THE LOW ADDRESS END OF THE STACK, THE .IMP STACK (IE THE .SP STACK) STARTS AT THE HIGH ADDRESS END AND WORKS TOWARDS THE LOW ADDRESS END. IS NOT THE SAME AS THE START OF THE STACK. $B3 $L1C A - PRINT ALL $P1 @THE COMMAND EXECUTES A PRINT PSECT .(P), PRINT REGISTERS .(R) AND THE .IMP STACK .(I). @THIS COMMAND IS USEFUL FOR DUMPING ALL THE RELEVANT INFORMATION ABOUT A PROGRAM ONTO THE LINE PRINTER (SEE COMMAND .'O'). $B3 $L1C D - DUMP AN AREA OF CORE $P1 @PROMPTS .'FROM:' AND .'LENGTH:'. @BOTH NUMBERS SHOULD BE TYPED IN OCTAL AND THE AREA OF CORE FROM .'FROM' TO .'FROM+LENGTH' IS OUTPUT. $B1 .NOTE: 1) @ON ALL THE DUMPS .'ZEROES' IS OUPUT IF ONE OR MORE ENTIRE LINE CONTAINS ZERO. $B0 2) @AN .ISO EQUIVALENT IS PRINTED ON THE .RHS OF THE DUMP. $B3 $L1C O - CHANGE THE OUTPUT DEVICE $P1 @PROMPTS .'STREAM:'. @THE REPLY IS USED IN THE FORM .'SELECT .OUTPUT(N)' FOR THE OUTPUT OF COMMANDS .R,P,I,A AND .D. @BY CALLING .'DBUG' IN THE FORM:- $B0 .DBUG ./L $I+2 OR $B0 .DBUG ./.LP $I+2 ETC $B0 THE OUTPUT MAY BE DIRECTED TO THE FILE .'L' OR TO THE LINE PRINTER. $B3 $L1C W - WAIT DEBUG $P1 @THIS COMMAND IS USED TO SUSPEND .DEBUG IF IT IS NECESSARY TO INPUT TO A PROGRAM ON THE SAME TELETYPE. @IT IS RESTARTED BY $B0 .(ESCAPE) .FREE .DBUG $B3 $L1C S - STOP DEBUG $P1 @DEBUG HALTS. $B0 @NOTE: ALL BREAKPOINTS ARE CLEARED. $V10 $B3 $V15 $L1C IMPLIED COMMAND TO EXAMINE/CHANGE CORE ADDRESSES $P1 @THIS COMMAND ACCEPTS THE FOLLOWING INSTRUCTIONS:- $A INDENT=2 @NOTE .'N' AND .'M' REPRESENT NUMBERS INPUT IN OCTAL. $B0 .N $T4 : PRINTS CONTENTS OF .N. $B0 .N+C $T4 : PRINTS CONTENTS OF .(N+ PROGRAM BASE). $B0 .N+I $T4 : PRINTS CONTENTS OF .(N+ .IMP .STK BASE). $B0 .N+RM $T4 : PRINTS CONTENTS OF .(N+REGISTER .M) $B1 .N(+ OPTIONS)=M $T4 : PUTS .M INTO .N $A INDENT=1 $B2 EG: .DEBUG:100 (CR) - WILL PRINT CONTENTS OF LOCN 100. $B0 $C+4 .DEBUG:100+R5 (CR) - WILL PRINT CONTENTS OF 100 ON FROM REG. 5. $B0 $C+4 .DEBUG:100+R5=200 (CR) - DITTO, EXCEPT PLANTS 200. $B0 .NOTES $A INDENT=1 $B1 @AN .'*N' AT THE END OF THE COMMAND WILL CAUSE THE FOLLOWING .'N' LOCATIONS TO BE DUMPED OUT .('N' MAY BE NEGATIVE). $B1 '+' OR .'+=M' MAY BE ENTERED AS A NEW COMMAND, THIS TAKES THE LAST LOCATION USED AND STEPS IT UP BY 2 (-2 IF '-' IS USED). $N $E