RFC 643 UNKNOWN DEBUGGING · PROTOCOLS · DEVELOPMENT

Network Debugging Protocol

Remote debugging protocol for PDP-11 systems over the network

On rfc-editor.org ↗
PUBLISHED
July 1974
AUTHORS
E. Mader
STREAM
Legacy
PROTOCOL LEVEL
Level 2
DEBUGGER LINK
377 octal
OPERATION CODE SIZE
8 bits
PROCESS ID SIZE
8 bits
DOI
10.17487/RFC0643

RFC text

Original text · RFC Editor View on rfc-editor.org ↗
Network Debugging Protocol                          Eric Mader
RFC: 643                                             July 1974
NIC #30873


     This document describes a proposed protocol  to  be  used  in  an
implementation   of   a   PDP-11   network  Bootstrap  service  and  a
cross-network  debugger.   The  protocol  is  designed  for  debugging
processes  running under an operating system which can perform some of
the "lower level" debugging  tasks,  such  as  planting  and  removing
breakpoints  and  single  stepping.  A subset of the protocol could be
used if such a capability does not exist (a  stand-alone  program  for
example).

     The protocol is a level 2 protocol, which  bypasses  the  ARPANET
HOST-HOST  protocol.   (This  is  implemented  on  TENEX using special
privileged system calls which allow messages to be  sent  directly  to
and  received  directly  from the IMP).  Messages are sent between the
PDP-11 and the remote debugger on  one  link  (currently  377  octal).
Each  message from the remote debugger to the PDP-ll is a request that
the PDP-11 perform some action, and each message from  the  PDP-11  to
the remote debugger is either a reply to that request or an indication
that  a  process  has  stopped  running  (i.e.   has  trapped,  hit  a
breakpoint, etc).  The exact format of the messages is shown in Figure
1 below.

     Each  command  consists  of  an  8-bit  op-code,  and  an   8-bit
process-id,  two  16-bit  arguments,  and  an optional string of 8-bit
bytes.  The op-code field from the PDP-11 should be the same  as  that
sent  by  the  remote  host  to  indicate successful completion of the
request or be the same as that set by the remote host with the 200 bit
set  to  indicate  failure to complete the request.  Op-codes from the
PDP-11 which have the 100 bit set are asynchronous indication  that  a
process  has stopped for a reason other than a request from the remote
host.  (See description of asynchronous replies  below).   An  op-code
from  the  PDP-11  with  both  the 100 and 200 bit set is meaningless.
Thus, the 8-bit op-code field sent by the PDP-11 can be thought of  as
a CAN'T Flag, an Asynchronous STOP Flag, and a 6-bit op-code.

     In the description that follows the commands will be given as

   NAME (Process-ID, Argument 1, Argument 2, BYTE STRING)
with only as many of the fields present as are used.

Op-Code 0 - NOP_______ _ _ ___

     This command is intended to be used to determine if the PDP-11 is
operational.   It  has no effect on any process running in the PDP-11.
The response is NOP.

Op-Code 1 - DEBUG (Process)_______ _ _ _____ _________

     This command requests the ability to  debug  the  given  process.
The PDP-11 should respond with

                                                    Page   2



                     DEBUGGING (process)

(op-code 1) if no other remote host is currently doing so, and

                    CAN'T DEBUG (process)

(op-code 201) if another remote host  has  been  given  permission  to
debug the process, or the process doesn't exist.

Op-Code 2 - END DEBUG (Process)_______ _ _ ___ _____ _________

     This command relinquishes the ability to debug  a  process.   The
PDP-11 should reply

                     END DEBUG (Process)

(op-code 2) unless the remote host isn't  debugging  the  process,  in
which case it should respond

                  CAN'T END DEBUG (Process)

(op-code 202).  If the process isn't running when  the  END  DEBUG  is
done, then the effect should be the same as

                      RESUME (PROCESS)
                    END DEBUG (PROCESS)

Op-Code 3 - STOP (Process)_______ _ _ ____ _________

     This command requests the PDP-11 to stop the given  process  from
running.  The PDP-11 should respond

                      STOPPED (process)

(op-code 3) unless the process isn't  being  debugged  by  the  remote
host.  In this case it should reply

                    CAN'T STOP (process)

  (op-code 203).

Op-Code 4 - DEPOSIT (Process, Address, Count, Byte String)_______ _ _ _______ _________ ________ ______ ____ _______

     This instructs the PDP-11 to deposit  the  Count  bytes  in  Byte
String  into  the  given process's address space beginning at Address.
The PDP-11 should reply

             DEPOSITED (Process, Address, Count)

if successful or

           CAN'T DEPOSIT (Process, Address, Count)

                                                    Page   3



if the deposit doesn't succeed, or the remote host isn't debugging the
process.

Op-Code 5 - RESUME (Process)_______ _ _ ______ _________

     This instructs the PDP-11 to allow the given  process  to  resume
running.  The PDP-11 should reply

                     RESUMED (Process)

before it starts the process (in case it traps right away), or

                   CAN'T RESUME (Process)

if the process wasn't stopped, or the remote host isn't debugging  the
process.

Op-Code 6 - EXAMINE (Process, Address, Count)_______ _ _ _______ _________ ________ ______

     This instructs the PDP-11 to return Count bytes  from  the  given
process address space starting at Address.  The PDP-11 should reply

       CONTENTS (Process, Address, Count, Byte String)

if it can supply the bytes, or

           CAN'T EXAMINE (Process, Address, Count)

if all the bytes don't exist in the address space, or the remote  host
isn't debugging the process.

Op-Code 7 - DEPOSIT STATE VECTOR (Process, Index, Byte Count,_______ _ _ _______ _____ ______ _________ ______ ____ ______
            Byte String)            ____ _______

     This instructs the PDP-11 to deposit the Byte Count bytes in Byte
String  into the state vector for the given process starting with byte
Index.  See Figure 2 for the format of the state vector.   The  PDP-11
should reply

     DEPOSITED STATE VECTOR (Process, Index, Byte Count)

unless the bytes won't all fit in the state vector or the remote  host
isn't debugging the process.  In this case the reply should be

  CAN'T DEPOSIT STATE VECTOR (Process, Index, Byte Count)

Op-Code 10 - BREAK (Process, Address, Proceed Count)_______ __ _ _____ _________ ________ _______ ______

     This instructs the PDP-11 to place a breakpoint at Address in the
given  process's address space, with a proceed count of Proceed Count.
The proceed count can be changed by issuing another BREAK with a
different count.  The PDP-11 should reply

                                                    Page   4



           BROKE (Process, Address, Proceed Count)

if it was able to plant the breakpoint and

        CAN'T BREAK (Proceed, Address, Proceed Count)

if it was unable to plant the breakpoint because the breakpoint tables
for  the  process are full, or because the remote host isn't debugging
the process.  Note that the  PDP-11  must  keep  track  of  where  the
breakpoints are, the old contents of these locations etc.

Op-Code 11 - UNBREAK (Process, Address)_______ __ _ _______ _________ ________

     This instructs the PDP-11 to remove the breakpoint  from  Address
in the process's address space and release all storage associated with
it.  The PDP-11 should reply

                 UNBROKE (Process, Address)

when the breakpoint is removed, or

              CAN'T UNBREAK (Process, Address)

if the process doens't have a breakpoint at Address or the remote host
isn't debugging the process.

Op-Code 12 - SINGLE STEP (Process)_______ __ _ ______ ____ _________

     This instructs the PDP-11 to let the given  process  execute  one
instruction, using the Trace Trap feature.  The PDP-11 should reply

                  SINGLE STEPPING (Process)

before the process is started, or

                 CAN'T SINGLE STEP (Process)

if the process is already running or the remote host  isn't  debugging
the process.

Op-Code 13 - PROCEED BPT (Process)_______ __ _ _______ ___ _________

     This instructs the PDP-11 to allow the process to proceed from  a
break point trap (BPT, see below).  The PDP-11 should reply

                  PROCEEDING BPT (Process)

before allowing the process to proceed, or

                 CAN'T PROCEED BPT (Process)

if the process isn't stopped at a breakpoint or the remote host  isn't
debugging the process.

                                                    Page   5



Op-Code 14 - CREATE PROCESS_______ __ _ ______ _______

     This instructs the PDP-11 to  create  a  process  (with  its  own
virtual address space if the system will support such a feature).  The
PDP-11 should reply

                  CREATED PROCESS (Process)

if it could create a process, with the process-id in process.  If  the
process  creation  failed  or  the system cannot create processes, the
PDP-11 should reply

                    CAN'T CREATE PROCESS.

Once a remote host has created a process it is debugging it, that is a

                       DEBUG (process)

need not be done.

Op-Code 15 - DESTROY PROCESS (Process)_______ __ _ _______ _______ _________

     This instructs the PDP-11 to destroy the  given  process.   After
the  process  is destroyed the remote host cannot, of course, debug it
so there is no need to do an

                    END DEBUG (Process).

The PDP-11 should reply

                 DESTROYED PROCESS (Process)

if the process has been destroyed.  If the system  doesn't  support  a
multi-process structure or the remote host isn't debugging the process
the PDP-11 should reply

              CAN'T DESTROY PROCESS (Process).




                 Asynchronous Stop Replies                 ____________ ____ _______

     These replies (op-code between 100 and 177 octal) are sent by the
PDP-11  wherever a process being debugged stops running for any reason
other than in response to the

                       STOP (Process)

command.  Each of these replies includes the entire state  vector  for
the process.

                                                    Page   6



Op-Code 100 - TRAP (Process, Reason, 0, STATE VECTOR)_______ ___ _ ____ _________ _______ __ _____ _______

     This informs the remote host that a  process  has  "trapped",  or
terminated abnormally.  The reason is a system error code, or could be
a trap vector address in the stand-alone case.

Op-Code 101 - HALT (Process, 0,0, STATE VECTOR)_______ ___ _ ____ _________ ____ _____ _______

     This  informs  the  remote  host  that  the  given  process   has
terminated normally.

Op-Code 102 - BPT (Process, 0, 0, STATE VECTOR)_______ ___ _ ___ _________ __ __ _____ _______

     This informs the remote host that the given  process  has  hit  a
breakpoint trap.

Op-Code 103 - TTRAP (Process, 0, 0, STATE VECTOR)_______ ___ _ _____ _________ __ __ _____ _______

     This informs the remote host that the given  process  has  hit  a
trace trap, i.e.  has just executed one instruction in response to the

                    SINGLE STEP (Process)

command.

                                                    Page   7


                          Figure 1

             FORMAT OF NETWORK DEBUGGER MESSAGES


                    ----------------
                   | TYPE | HOST    |
                    ----------------
                   | LINK | STYPE   |
                    ----------------
                   | CMD  |  PID    |
                    ----------------
                   |    ARG1        |
                    ----------------
                   |    ARG2        |
                    ----------------

     TYPE -- The HOST-IMP/IMP-HOST message type, should
             always be zero.

     HOST -- The source host ID.

     LINK -- The debugger link.

    STYPE -- The message subtype, always zero.

      CMD -- The debugger command op-code, excess 100 for
             asynchronous reply's, excess 200 for "can't"
             reply's.

      PID -- Process ID of process being debugged.

     ARG1 -- The first argument of the command.

     ARG2 -- The second argument of the command.

                                                 Page 8




                          Figure 2

                  FORMAT OF STATE VECTORS

                      ------------
                     |    R0      |
                      ------------
                     |    R1      |
                      ------------
                     |    R2      |
                      ------------
                     |   ...      |
                      ------------
                     |    PC      |
                      ------------
                     |    PS      |
                      ------------

AI ELI5

On this page
PROBLEMSoftware developers need to debug and control PDP-11 processes running on distant computers without direct access to the machine.
MECHANISMThe Network Debugging Protocol defines a message format and command set that a remote host uses to instruct a PDP-11 to perform debugging operations: depositing memory, examining registers, setting breakpoints, resuming execution, and reporting process state changes.
ENABLES REMOTE DEBUGGINGThe protocol enables cross-network debugging, allowing a developer at one site to control execution of a process at another, including breakpoint management and memory examination.

§1Remote Debugging Over the Network

RFC 643 defines a protocol for debugging PDP-11 processes running on remote hosts via network commands. The protocol is designed for use with PDP-11 systems running an operating system capable of performing low-level debugging tasks like setting and removing breakpoints and single-stepping instructions. A subset can be used on standalone programs with fewer debugging capabilities.

The protocol operates as a level-2 protocol, bypassing the standard HOST-HOST protocol. Messages are exchanged on a single link (377 octal) between a remote debugger and the PDP-11. Commands from the remote host request actions like stopping a process or examining memory, and responses confirm success or indicate that a process has trapped or hit a breakpoint.

A programmer sends commands over the network to a distant computer telling it to pause, check memory, or start running again. The distant computer sends back what it finds.

§2Command Structure

Each command consists of an 8-bit operation code, an 8-bit process identifier, two 16-bit arguments, and an optional byte string. The operation code from the PDP-11 response mirrors the command code for successful completion, or has the 200 bit set to indicate failure (CAN'T reply). An operation code with the 100 bit set indicates an asynchronous event—a process has stopped for a reason other than a command from the remote host.

Commands include NOP (no operation), DEBUG (begin debugging a process), STOP (halt a running process), DEPOSIT (write bytes to memory), EXAMINE (read bytes from memory), BREAK (set a breakpoint), UNBREAK (remove a breakpoint), and SINGLE STEP. Asynchronous replies include TRAP (process terminated abnormally), HALT (process terminated normally), BPT (hit breakpoint), and TTRAP (trace trap from single step).

Commands are short messages with an operation number, process number, and data. Replies say whether the command worked or what happened to the process.

§3Debugging Workflow

A debugging session begins with a DEBUG command to claim control of a process; the PDP-11 responds DEBUGGING if successful or CAN'T DEBUG if another remote host is already debugging it. Once debugging, the remote host can issue commands to examine memory (EXAMINE), modify memory (DEPOSIT), set breakpoints (BREAK), or single-step execution (SINGLE STEP). When a breakpoint is hit or a process traps, the PDP-11 sends an asynchronous reply with the complete state vector for the process—the values of all registers and program counter. Process creation and destruction are also supported, allowing the remote host to create a fresh process for debugging.

The protocol assumes the PDP-11 can manage its own breakpoint tables, remember which remote host is debugging each process, and report process state changes. The remote host is responsible for maintaining the state of the debugging session and issuing appropriate follow-up commands.

The programmer asks to debug a program, then sends commands to pause it, check values, set traps, or step through code one line at a time. The computer reports back what it finds.