Difference between revisions of "DDT"

From Computer History Wiki
Jump to: navigation, search
(Implementations: ODT from DEC.)
(+DEC details, new cat)
 
(8 intermediate revisions by 2 users not shown)
Line 1: Line 1:
'''DDT''' ('''Dynamic Debugging Technique''') is a family of [[debug]]gers with some common characteristics:
+
'''DDT''' ('''Dynamic Debugging Technique''' - the name is a 'backronym' on the insecticide) is a family of [[debugger]]s with some common characteristics:
  
 
* Most commands are invoked with a single key, plus modifiers.
 
* Most commands are invoked with a single key, plus modifiers.
Line 6: Line 6:
  
 
DDT was first implemented at MIT for a [[PDP-1]] computer.  It was then implemented for [[PDP-6]], [[PDP-10|-10]], and [[PDP-11|-11]] computers at MIT. It was also widely used at [[Digital Equipment Corporation|DEC]].
 
DDT was first implemented at MIT for a [[PDP-1]] computer.  It was then implemented for [[PDP-6]], [[PDP-10|-10]], and [[PDP-11|-11]] computers at MIT. It was also widely used at [[Digital Equipment Corporation|DEC]].
 
A version was written in [[portable]] [[C programming language|C]], and used with the [[MOS operating system]] on [[PDP-11]]'s, various [[Motorola M68000 Family]] machines, and [[AMD 29000]] machines, to replace the original MOS one, written in PDP-11 [[assembly language]].
 
  
 
== Implementations ==
 
== Implementations ==
Line 13: Line 11:
 
=== Implementations found on ITS ===
 
=== Implementations found on ITS ===
  
* Exec DDT, also known as NTS DDT, for the PDP-6 and 10.
+
* Exec DDT, also known as NTS DDT, for the [[kernel]] of the PDP-6 and 10.
* Timesharing DDT for the PDP-6 and 10.
+
* [[Time-sharing]] DDT, for [[user]]s' [[process]]es on the PDP-6 and 10.
 
* KLDDT specifically for the [[KL10]].
 
* KLDDT specifically for the [[KL10]].
 
* RUG for the PDP-11.
 
* RUG for the PDP-11.
Line 28: Line 26:
 
=== DEC implementations ===
 
=== DEC implementations ===
  
* [[ODT]]  
+
[[TENEX]] and its descendant [[TOPS-20]] both had several forms of DDT; one for the users, and another for debugging the kernel. Others included:
 +
 
 +
* [[ODT]]
 +
 
 +
('''''Note:''''' This does not refer to [[QBUS CPU ODT]], which has neither the capabilities of a true DDT, nor its command [[syntax]], although its extremely simple syntax is a sub-set of that of DDT.)
 +
 
 +
=== Implementations under MOS ===
 +
 
 +
The original debugger used with the [[MOS operating system]] was a DDT written in PDP-11 [[assembly language]] (like the [[operating system|OS]] itself); it is not known if that was written from scratch, or came from elsewhere.
 +
 
 +
Later, a version was written in [[portable]] [[C programming language|C]], and used with MOS (similarly re-written) on [[PDP-11]]'s, various [[Motorola M68000 Family]] machines, and [[AMD 29000]] machines.
 +
 
 +
== Command list for the MOS portable DDT ==
 +
 
 +
In the list below, '$' means the [[ASCII]] character 'ESCAPE' (i.e. CTRL-[). This command set was derived from, but not identical to, those of the originals.
 +
 
 +
<pre>
 +
          n/    Open loc n, type contents in current mode
 +
          /      Retype loc pointed to by last address
 +
          n<CR>  Modify currently opened loc to be n, close loc
 +
          <CR>  Reset modes, go to command level
 +
          n<LF>  Modify, close, open next loc
 +
          <LF>  Advance to next item and display
 +
          n^    Modify, close, open previous loc
 +
          ^      Reverse to previous item
 +
          n<TAB> Modify, close, open loc pointed to by last typed value
 +
          <TAB>  Open loc pointed to by last typed value
 +
          @      Synonym for <TAB>
 +
          n_    Open location n, type as instr
 +
          _      Set temporary mode to instr, retype location
 +
          n{    Open location n, type as a numeric
 +
          {      Set temporary mode to numeric, retype location
 +
          n[    Open location n, type as symbolic
 +
          [      Set temporary mode to symbolic, retype location
 +
          n!    Open location n, don't type
 +
          n=    Type value as numeric
 +
          =      Retype value as numeric
 +
          n\    Examine display block at n
 +
          \      Examine display block pointed to by last address
 +
 
 +
            $A    Addresses will be typed as absolute numbers
 +
            $R    Addresses will be typed relative to symbols
 +
            $I    Change current mode to instruction type out
 +
            $N    Change current mode to numeric type out
 +
            $S    Change current mode to symbolic type out
 +
            $T    Change current mode to ASCII text output
 +
            $Z    Change current mode/length to .ASCIZ
 +
            $H    Change to halfword (byte) mode
 +
            $W    Change to (short)word mode
 +
            $L    Change to longword mode
 +
            $mI  Change current input radix to m
 +
            $mO  Change current output radix to m
 +
            $mR  Change input and output radix
 +
            $mD  Change current display block size
 +
                  Note that the initial modes are $S and $W. These
 +
                  can be temporarily changed by the above commands and
 +
                  will return to the permanent setting by a carriage
 +
                  return.  The settings can be permanently changed by
 +
                  using two altmodes in the mode setting command
 +
                  (e.g. $$T sets permanent ASCII mode)
 +
 
 +
            $mS  Change maximum symbol offset
 +
                  This mode is 'permanent' i.e. once set, it
 +
                  stays at that value.
 +
 
 +
            n$iM  Set machine dependant mode i to n.
 +
                  The actual argument syntax may vary from machine to
 +
                  machine.
 +
 
 +
            n$iB  Set breakpoint i at address n (i from 0 to 7 or can
 +
                  be omitted)
 +
            $iB  Remove breakpoint i
 +
            $B    Remove all breakpoints
 +
            $V    List (view) all breakpoints
 +
                  Note that breakpoints should only be set at the start
 +
                  of extended instructions. Setting a breakpoint in the
 +
                  middle of an instruction will cause undefined randomness.
 +
 
 +
%          $P    Proceed from breakpoint
 +
%          m$P  Proceed from breakpoint m times (without halting)
 +
%          ^P    Single step the processor
 +
%          n^P  Single step n times (without halting)
 +
%          ^X    'Execute' step the processor - treats JSR as an atomic
 +
%          n^X  Execute step n times (without halting)
 +
%          $G    Start execution at address in JOBSA (start of program)
 +
%          n$G  Start executing program at location n.
 +
 
 +
 
 +
Commands marked with a '%' can be executed only in the hard-core
 +
debugger with the [operating system] halted.
 +
 
 +
Numbers 'm' may be typed either before or after the '$'; numbers 'n'
 +
or 'i' must be typed where shown.
 +
 
 +
Where a value is called for, if the value is typed before the
 +
'$' (if any), the value may be typed as a string of tokens, which may
 +
be either numbers or known symbols (i.e. findable in the DDT symbol
 +
table) separated by operators; the available operators are +, - and *.
 +
If the value is typed after the '$' only a single number may be used;
 +
these are read in decimal unless preceeded by a 0.
 +
</pre>
  
 
{{semi-stub}}
 
{{semi-stub}}
 +
 +
[[Category: Debuggers]]

Latest revision as of 13:21, 27 June 2022

DDT (Dynamic Debugging Technique - the name is a 'backronym' on the insecticide) is a family of debuggers with some common characteristics:

  • Most commands are invoked with a single key, plus modifiers.
  • Altmode or Escape is used as a prefix modifier.
  • Arguments are commonly prefixed to the command.

DDT was first implemented at MIT for a PDP-1 computer. It was then implemented for PDP-6, -10, and -11 computers at MIT. It was also widely used at DEC.

Implementations

Implementations found on ITS

  • Exec DDT, also known as NTS DDT, for the kernel of the PDP-6 and 10.
  • Time-sharing DDT, for users' processes on the PDP-6 and 10.
  • KLDDT specifically for the KL10.
  • RUG for the PDP-11.
  • URUG, or micro RUG, for the GT40.
  • KLRUG for the KL10 front end.
  • 11DDT for the PDP-11.
  • CARPET remote PDP-11 debugger hosted on a PDP-10.
  • HALI target resident counterpart to CARPET.
  • MAT resident debugger for PDP-11.
  • Timesharing DDT for SITS.
  • IMDDT for Imlac PDS-1.

DEC implementations

TENEX and its descendant TOPS-20 both had several forms of DDT; one for the users, and another for debugging the kernel. Others included:

(Note: This does not refer to QBUS CPU ODT, which has neither the capabilities of a true DDT, nor its command syntax, although its extremely simple syntax is a sub-set of that of DDT.)

Implementations under MOS

The original debugger used with the MOS operating system was a DDT written in PDP-11 assembly language (like the OS itself); it is not known if that was written from scratch, or came from elsewhere.

Later, a version was written in portable C, and used with MOS (similarly re-written) on PDP-11's, various Motorola M68000 Family machines, and AMD 29000 machines.

Command list for the MOS portable DDT

In the list below, '$' means the ASCII character 'ESCAPE' (i.e. CTRL-[). This command set was derived from, but not identical to, those of the originals.

           n/     Open loc n, type contents in current mode
           /      Retype loc pointed to by last address
           n<CR>  Modify currently opened loc to be n, close loc
           <CR>   Reset modes, go to command level
           n<LF>  Modify, close, open next loc
           <LF>   Advance to next item and display
           n^     Modify, close, open previous loc
           ^      Reverse to previous item
           n<TAB> Modify, close, open loc pointed to by last typed value
           <TAB>  Open loc pointed to by last typed value
           @      Synonym for <TAB>
           n_     Open location n, type as instr
           _      Set temporary mode to instr, retype location
           n{     Open location n, type as a numeric
           {      Set temporary mode to numeric, retype location
           n[     Open location n, type as symbolic
           [      Set temporary mode to symbolic, retype location
           n!     Open location n, don't type
           n=     Type value as numeric
           =      Retype value as numeric
           n\     Examine display block at n
           \      Examine display block pointed to by last address

            $A    Addresses will be typed as absolute numbers
            $R    Addresses will be typed relative to symbols
            $I    Change current mode to instruction type out
            $N    Change current mode to numeric type out
            $S    Change current mode to symbolic type out
            $T    Change current mode to ASCII text output
            $Z    Change current mode/length to .ASCIZ
            $H    Change to halfword (byte) mode
            $W    Change to (short)word mode
            $L    Change to longword mode
            $mI   Change current input radix to m
            $mO   Change current output radix to m
            $mR   Change input and output radix
            $mD   Change current display block size
                  Note that the initial modes are $S and $W. These
                  can be temporarily changed by the above commands and
                  will return to the permanent setting by a carriage
                  return.  The settings can be permanently changed by
                  using two altmodes in the mode setting command
                  (e.g. $$T sets permanent ASCII mode)

            $mS   Change maximum symbol offset
                  This mode is 'permanent' i.e. once set, it
                  stays at that value.

            n$iM  Set machine dependant mode i to n.
                  The actual argument syntax may vary from machine to
                  machine.

            n$iB  Set breakpoint i at address n (i from 0 to 7 or can
                  be omitted)
            $iB   Remove breakpoint i
            $B    Remove all breakpoints
            $V    List (view) all breakpoints
                  Note that breakpoints should only be set at the start
                  of extended instructions. Setting a breakpoint in the
                  middle of an instruction will cause undefined randomness.

%           $P    Proceed from breakpoint
%           m$P   Proceed from breakpoint m times (without halting)
%           ^P    Single step the processor
%           n^P   Single step n times (without halting)
%           ^X    'Execute' step the processor - treats JSR as an atomic
%           n^X   Execute step n times (without halting)
%           $G    Start execution at address in JOBSA (start of program)
%           n$G   Start executing program at location n.


Commands marked with a '%' can be executed only in the hard-core
debugger with the [operating system] halted.

Numbers 'm' may be typed either before or after the '$'; numbers 'n'
or 'i' must be typed where shown.

Where a value is called for, if the value is typed before the
'$' (if any), the value may be typed as a string of tokens, which may
be either numbers or known symbols (i.e. findable in the DDT symbol
table) separated by operators; the available operators are +, - and *.
If the value is typed after the '$' only a single number may be used;
these are read in decimal unless preceeded by a 0.