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.
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)
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
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.