Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "PTP/designs/debugger protocol"

< PTP‎ | designs
(SET_WATCHPOINT)
 
(80 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
== Overview ==
 
== Overview ==
  
This document describes the debugger proxy communication protocol used by the PTP debugger. This protocol is used to communicate between the debugger front-end in Eclipse, and a lightweight debug server network running on a target system. The primary purpose of the protocol is for controlling application processes for debugging purposes.
+
This document describes the debugger proxy communication protocol used by the PTP debugger. This protocol is used to communicate between the debugger front-end in Eclipse, and a debug server running on a target system. The primary purpose of the protocol is for controlling application processes for debugging purposes.
  
 
== Terminiology ==
 
== Terminiology ==
Line 7: Line 7:
 
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [[ftp://ftp.rfc-editor.org/in-notes/rfc2119.txt RFC 2119]].
 
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [[ftp://ftp.rfc-editor.org/in-notes/rfc2119.txt RFC 2119]].
  
''PTP debugger'' refers collectively to the Java plugins and external components that implement the Eclipse parallel debugger.
+
"PTP debugger" refers collectively to the Java plugins and external components that implement the Eclipse parallel debugger.
  
''Front-end'' refers to the debug model, user interface and parallel debug interface (PDI) in Eclipse.
+
"Front-end" refers to the debug model, user interface and parallel debug interface (PDI) in Eclipse.
  
== Proxy Protocol  ==
+
"Debug server" (or just "server") refers to an external (from Eclipse) component that interacts with the target application being debugged. In the case of the SDM, the "server" is actually made up of many separate processes.
  
The communication protocol used between the RMS and the proxy agent is a simple text-based asynchronous command/event protocol. The RMS sends one or more commands to the proxy agent, which in turn will generate events that are returned to the RMS. One command may generate multiple events, but an event is always associated with a particular command. A command is not completed until either a corresponding ERROR or OK event is received.
+
== Protocol  Format ==
 +
 
 +
The communication protocol used between the front-end and the debug server is a simple text-based asynchronous command/event protocol. The front-end sends one or more commands to the server, which in turn will generate events that are returned to the front-end. One command may generate multiple events, but an event is always associated with a particular command. A command is not completed until either a corresponding event is received.
  
 
=== Transaction IDs ===
 
=== Transaction IDs ===
Line 21: Line 23:
 
TIDs are only unique for uncompleted commands, not necessarily for the whole session.  
 
TIDs are only unique for uncompleted commands, not necessarily for the whole session.  
  
Proxy agents SHOULD assume that a particular TID MAY be reused.
+
Servers SHOULD assume that a particular TID MAY be reused.
  
Proxy agents SHOULD NOT assume anything about the numbering or ordering of TIDs.
+
Servers SHOULD NOT assume anything about the numbering or ordering of TIDs.
  
 
Any events received with an invalid TID (i.e. with no corresponding command) SHALL be discarded.
 
Any events received with an invalid TID (i.e. with no corresponding command) SHALL be discarded.
  
=== Element IDs ===
+
=== Bitmaps ===
  
Element IDs are key to communcation between the RMS and the proxy agent. Every element in the model (queue, node, job, etc.) has a unique ID. <b>This ID is generated by the proxy agent.</b> In order to ensure the ID is unique, the RMS supplies a ''base ID'' as part of the initialization sequence. This ''base ID'' is guaranteed to be unique, and is used by the proxy agent to "uniquify" its generated IDs. The ''base ID'' is itself an element ID, so cannot be used by the proxy. It is possible to re-use an element ID, provided that the model element has been removed from the model. However this is not recommended.
+
Bitmaps are key to communcation between the front-end and the server. The protocol assumes that the debugger is controlling a multi-process application. Each process in the application is identified by a number in the interval [0, N-1], where N is the total number of processes. Each bit in the bitmap corresponds to one of the processes being debugged. Process n | 0 <= n < N corresponds to the bit with value 2^n in the bitmap. Any number of bits can be set in a bitmap.
  
Proxy agents have two choices for the types of ID's it generates: numeric or string. The RMS doesn't care which is used. There are advantages and disadvantages for each type. Numeric and string IDs can be mixed.
+
For example, processes 5,7,9-15 would be represented by the bitmap (assuming the right-most bit is 2^0):
  
==== Numeric Element IDs ====
+
<code>1  1  1  1  1  1  1  0  1  0  1  0  0  0  0  0</code>
  
Numeric IDs are typically used when the proxy agent is dealing with large numbers of objects (e.g. processes, nodes, etc.) They are more efficient to transmit, because the compact [[#Range Set Notation|Range Set Notation]] can be used. When using numeric IDs proxy agent should try and generate "blocks" of IDs to make the range sets more efficient. A proxy agent might, for example, reserve a range of IDs for nodes, a different range for processes, etc.
+
Bitmaps are transmitted as a hex character strings, so the above bitmap would actually be represented by the string <code>FEA0</code>.
  
Numeric IDs are computed using the ''base ID'' in such a way that the ID value will be unique. For example, one such computation would be to add the ''base ID'' to a monotonically increasing series of integers starting at 1.
+
Bitmaps are used in both commands and events. When a debug command is sent, it includes a bitmap specifying which processes the command is intended for. When an event is received, it contains a bitmap indicating which processes generated the event.
 
+
==== String Element IDs ====
+
 
+
String IDs are an easy way to generate IDs, but are less efficient because they prevent using the [[#Range Set Notation|Range Set Notation]]. These IDs are generated by creating a unique string and appending it to the ''base ID''. The new ID is then guaranteed to be unique across the mode.
+
 
+
=== Range Set Notation ===
+
 
+
This is a compact representation of sequences of numeric (unsigned integer) values. Ranges of consecutive values can be represented using the first and last values in the range, separated by a dash character (hex 2D). Ranges can then be grouped be separating them with commas (hex 2C). Spaces or other characters are not permitted in a range set.
+
 
+
For example, the range:
+
 
+
1,2,3,4,5,6,7,34,35,36,37,38,41,55,56,57
+
 
+
would be represented as:
+
 
+
1-7,34-38,55-57
+
 
+
Ranges in the set need not be in sorted order, and can be overlapping.
+
 
+
The range set:
+
 
+
1-10,4-12,3
+
 
+
represents the 12 consecutive numbers starting at 1.
+
  
 
=== Message Format ===
 
=== Message Format ===
Line 75: Line 53:
 
The ''COMMAND_OR_EVENT'' portion of the message contains a header part followed by a sequence of arguments separated by spaces. Each argument is a string formatted using the [[#String Format| String Format]] described below. The command format is described in more detail in the [[#Commands|Commands]] section. The event format is described in more detail in the [[#Events|Events]] section.  
 
The ''COMMAND_OR_EVENT'' portion of the message contains a header part followed by a sequence of arguments separated by spaces. Each argument is a string formatted using the [[#String Format| String Format]] described below. The command format is described in more detail in the [[#Commands|Commands]] section. The event format is described in more detail in the [[#Events|Events]] section.  
  
==== String Format ====
+
=== String Format ===
  
 
Strings are transmitted using the following format:
 
Strings are transmitted using the following format:
Line 91: Line 69:
 
  00000000:
 
  00000000:
  
== Attributes ==
+
== Commands ==
  
Attributes are used so that data sent between the RMS and proxy agent is self describing. Attributes are actually composed of two parts: an attribute definition ID, and the actual data. A unique attribute definition IDs is assigned to each [[#Attribute Definition|Attribute Definition]]. Attribute definitions are either pre-defined by the RMS, or generated by the proxy agent during the [[#DISCOVERY|DISCOVERY]] phase.
+
Commands are formatted as simple ASCII text strings. A command consists of a header and a body, separated by a space (hex 20), as follows:
  
=== Attribute Definition ===
+
''COMMAND'' &rArr; ''COMMAND_HEADER'' " " ''COMMAND_BODY''
  
An attribute definition contains meta-data about the attribute. This meta-data includes:
+
The command header consists of three fixed length hexadecimal numbers separated by colons (hex 3A), so it is itself fixed length. The format of the header is:
  
; ID : The attribute definition ID.
+
''COMMAND_HEADER'' &rArr; ''COMMAND_ID'' ":" ''TID'' ":" ''NUM_ARGS''
  
; TYPE : The type of the attribute. Currently supported types are ARRAY, BOOLEAN, DATE, DOUBLE, ENUMERATED, INTEGER, and STRING.
+
where
  
; NAME : The short name of the attribute. This is the name that is displayed in UI property views.
+
: ''COMMAND_ID'' is a 4 digit hexadecimal number containing the command to be performed
  
; DESCRIPTION : A description of the attribute that is displayed when more information about the attribute is requested (e.g. tooltip popups.)
+
: ''TID'' is an 8 digit hexadecimal number containing the transaction ID assigned to this command
  
; DEFAULT : The default value of the attribute.
+
: ''NUM_ARGS'' is an 8 digit hexadecimal number containing the number of space separated elements in the command body
  
The attribute definition is primarily used for data validation and displaying attributes in the user interface. There is currently no support for proxy agents to utilize the attribute definition information, although there is nothing to stop a proxy agent from validating against its own attribute definition information.
+
The command body consists of ''NUM_ARGS'' strings separated by spaces.
  
=== Attribute Value ===
+
''COMMAND_BODY'' &rArr; ''STRING'' { " " ''STRING'' }
  
An attribute value is always a key/value pair with an equals character (hex 3D) separating the key and value. The key is the attribute definition ID and the value is a string representation of the actual value of the attribute. All attributes support conversion to/from strings. It is assumed that once an attribute value is placed on the wire, it has been validated against the corresponding attribute definition.
+
The following sections describe the currently defined commands.
  
An example attribute value is:
+
=== BREAKPOINT_AFTER ===
  
machineState=ALERT
+
<b>Message Format</b>
  
In this example, the attribute definition ID is "machineState" and it's value is "ALERT". Because "machineState" is an enumerated attribute type, we know that ALERT must be a legal value, and that the string "ALERT" can be converted to the actual enumerated value.
+
''BREAKPOINT_AFTER_COMMAND'' &rArr; "0008:''TID'':00000003" " " ''BITMAP'' " " ''BREAKPOINT_ID'' " " ''COUNT''
  
Like any other arguments, the complete attribute value string is always converted to a ''STRING'' before being transmitted.
+
; Description : Causes breakpoint specified by ''BREAKPOINT_ID'' to be ignored for ''COUNT'' hits.
  
For example, the attribute value:
+
<b>Arguments</b>
  
progArgs=-a 2 -b 4
+
: ''BITMAP'' specifies the processes this command applies to.
  
would actually be transmitted as:
+
: ''BREAKPOINT_ID'' is the ID of the breakpoint.
  
00000012:progArgs=-a 2 -b 4
+
: ''COUNT'' is the number of times the breakpoint will be ignored.
  
== Protocol Phases ==
+
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
  
The proxy protocol is divided into a number of phases. A phase determines the legal commands that can be sent to the proxy agent. During a particular phase, illegal commands SHOULD be discarded. ''Note: this may be changed to SHOULD generate an ERROR event.''
+
=== BREAKPOINT_CONDITION ===
  
Phases follow a strict ordering. Transition from one phase to the next occur when an OK event is received in response to a ''phase initiation command''. A ''phase initiation command'' is a command that must be sent to initiate a particular phase. Once a phase has been initiated, any legal commands for that phase may be sent. The phase ordering is defined as follows:
+
<b>Message Format</b>
  
INITIALIZE -> MODEL_DEF -> {START_EVENTS -> STOP_EVENTS}
+
''BREAKPOINT_CONDITION_COMMAND'' &rArr; "0007:''TID'':00000003" " " ''BITMAP'' " " ''BREAKPOINT_ID'' " " ''EXPRESSION''
  
The phases are defined in more detail in the following sections.
+
; Description : Causes the breakpoint specified by ''BREAKPOINT_ID'' to only trigger if the expression specified by ''EXPRESSION'' evaluates to true.
  
=== INITIALIZE ===
+
<b>Arguments</b>
  
This is the first phase, and is used to initiate a communication session between the RMS and proxy agent, and agree on any protocol parameters that apply to this session.
+
: ''BITMAP'' specifies the processes this command applies to.
  
Phase initiation command:
+
: ''BREAKPOINT_ID'' is the ID of the breakpoint.
  
* [[#INIT|INIT]]
+
: ''EXPRESSION'' is an expression that will be evaluated to determine if the breakpoint event should be triggered.
  
Legal commands:
+
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
  
* none
+
=== BREAKPOINT_DELETE ===
  
=== DISCOVERY ===
+
<b>Message Format</b>
  
The discovery phase is used to allow the proxy agent to inform the RMS of any dynamic property information. This information currently consists of attribute definitions and filter definitions which are described in more detail below.
+
''BREAKPOINT_DELETE_COMMAND'' &rArr; "0004:''TID'':00000002" " " ''BITMAP'' " " ''BREAKPOINT_ID''
  
Phase initiation command:
+
; Description : Remove a breakpoint from the target processes.
  
* [[#MODEL_DEF|MODEL_DEF]]
+
<b>Arguments</b>
  
Legal commands:
+
: ''BITMAP'' specifies the processes this command applies to.
  
* none
+
: ''BREAKPOINT_ID'' is the ID of the breakpoint to delete.
+
=== NORMAL ===
+
  
The normal phase is entered once the initialize and discovery phases are completed. This is the normal command/event processing phase.
+
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
  
Phase initiation command:
+
=== BREAKPOINT_DISABLE ===
  
* [[#START_EVENTS|START_EVENTS]]
+
<b>Message Format</b>
  
Legal commands:
+
''BREAKPOINT_DISABLE_COMMAND'' &rArr; "0006:''TID'':00000002" " " ''BITMAP'' " " ''BREAKPOINT_ID''
  
* [[#SUBMIT_JOB|SUBMIT_JOB]]
+
; Description : Disable a breakpoint in the target processes. This prevents the breakpoint from firing, but does not remove it.
* [[#TERMINATE_JOB|TERMINATE_JOB]]
+
* [[#MOVE_JOB|MOVE_JOB]]
+
* [[#CHANGE_JOB|CHANGE_JOB]]
+
* [[#LIST_FILTERS|LIST_FILTERS]]
+
* [[#SET_FILTERS|SET_FILTERS]]
+
* [[#STOP_EVENTS|STOP_EVENTS]]
+
* [[#QUIT|QUIT]]
+
  
=== SUSPENDED ===
+
<b>Arguments</b>
  
The suspended phase is used when the RMS needs to prevent the proxy agent from sending additional events.
+
: ''BITMAP'' specifies the processes this command applies to.
  
Phase initiation command:
+
: ''BREAKPOINT_ID'' is the ID of the breakpoint to disable.
  
* [[#STOP_EVENTS|STOP_EVENTS]]
+
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
  
Legal commands:
+
=== BREAKPOINT_ENABLE ===
  
* [[#START_EVENTS|START_EVENTS]]
+
<b>Message Format</b>
* [[#QUIT|QUIT]]
+
  
=== Phase Example ===
+
''BREAKPOINT_ENABLE_COMMAND'' &rArr; "0005:''TID'':00000002" " " ''BITMAP'' " " ''BREAKPOINT_ID''
  
The following provides a simple example of phase transitions. Commands go from left to right, events from right to left. The command tid is shown in ()'s after the command or event name.
+
; Description : Enable a breakpoint that has been disabled in the target processes.
  
-- intialize phase --
+
<b>Arguments</b>
INIT(1)        ->
+
                <- OK(1)
+
-- definition phase --
+
MODEL_DEF(2)    ->
+
                <- ATTR_DEF(2)
+
                <- ATTR_DEF(2)
+
                <- OK(2)
+
-- normal phase --
+
START_EVENTS(3) ->
+
                <- NEW_MACHINE(3)
+
                <- NEW_NODE(3)
+
STOP_EVENTS(4)  ->
+
                <- OK(3)
+
-- suspended phase --
+
START_EVENTS(5) ->
+
                <- OK(4)
+
-- normal phase --
+
                <- NEW_QUEUE(5)
+
QUIT(6)        ->
+
                <- OK(5)
+
                <- OK(6)
+
  
Note that the first suspended phase is not entered until the OK event corresponding to the START_EVENTS command (tid 3) is received. Similarly, the second normal phase is not entered until after the OK event corresponding to the STOP_EVENTS command (tid 4) is received.
+
: ''BITMAP'' specifies the processes this command applies to.
  
== Commands ==
+
: ''BREAKPOINT_ID'' is the ID of the breakpoint to enable.
  
Commands are formatted as simple ASCII text strings. A proxy command consists of a header and a body, separated by a space (hex 20), as follows:
+
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
  
''COMMAND'' &rArr; ''COMMAND_HEADER'' " " ''COMMAND_BODY''
+
=== BREAKPOINT_SET_FUNCTION ===
  
The command header consists of three fixed length hexadecimal numbers separated by colons (hex 3A), so it is itself fixed length. The format of the header is:
+
<b>Message Format</b>
  
  ''COMMAND_HEADER'' &rArr; ''COMMAND_ID'' ":" ''TID'' ":" ''NUM_ARGS''
+
  ''BREAKPOINT_SET_FUNCTION_COMMAND'' &rArr; "0003:''TID'':00000009" " " ''BITMAP'' " " ''BREAKPOINT_ID'' " "
 +
                                    ''IS_TEMPORARY'' " " ''IS_HARDWARE'' " " ''FILE'' " " ''FUNCTION'' " " ''CONDITION'' " "
 +
                                    ''IGNORE_COUNT'' " " ''THREAD_ID''
  
where
+
; Description : Set a breakpoint on the function ''FUNCTION'' in source file ''FILE''.
  
: ''COMMAND_ID'' is a 4 digit hexadecimal number containing the command to be performed
+
<b>Arguments</b>
  
: ''TID'' is an 8 digit hexadecimal number containing the transaction ID assigned to this command
+
: ''BITMAP'' specifies the processes this command applies to.
  
: ''NUM_ARGS'' is an 8 digit hexadecimal number containing the number of space separated elements in the command body
+
: ''BREAKPOINT_ID'' is the ID used to reference this breakpoint.
  
The command body consists of ''NUM_ARGS'' strings separated by spaces.
+
: ''IS_TEMPORARY'' is a flag to indicate the breakpoint is temporary.
  
''COMMAND_BODY'' &rArr; ''STRING'' { " " ''STRING'' }
+
: ''IS_HARDWARE'' is a flag indicating that a hardware breakpoint should be set.
  
The following sections describe the currently defined commands.
+
: ''FILE'' is the file name of the source file containing the function.
  
=== QUIT ===
+
: ''FUNCTION'' is the name of the function on which the breakpoint will be set.
 +
 
 +
: ''CONDITION'' is a conditional expression.
 +
 
 +
: ''IGNORE_COUNT'' is an ignore count.
 +
 
 +
: ''THREAD_ID'' is not currently used.
 +
 
 +
; Events : [[#BREAKPOINT_SET | BREAKPOINT_SET]], [[#ERROR|ERROR]]
 +
 
 +
=== BREAKPOINT_SET_LINE ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''QUIT_COMMAND'' &rArr; "0000:''TID'':00000000"
+
  ''BREAKPOINT_SET_LINE_COMMAND'' &rArr; "0002:''TID'':00000009" " " ''BITMAP'' " " ''BREAKPOINT_ID'' " "
 +
                                ''IS_TEMPORARY'' " " ''IS_HARDWARE'' " " ''FILE'' " " ''LINE'' " " ''CONDITION'' " "
 +
                                ''IGNORE_COUNT'' " " ''THREAD_ID''
  
; Description : Terminate the proxy agent. This command will cause the proxy agent to terminate as soon as possible.
+
; Description : Set a breakpoint at line ''LINE'' of source file ''FILE''.
  
; Events : [[#SHUTDOWN|SHUTDOWN]]
+
<b>Arguments</b>
  
=== INIT ===
+
: ''BITMAP'' specifies the processes this command applies to.
 +
 
 +
: ''BREAKPOINT_ID'' is the ID used to reference this breakpoint.
 +
 
 +
: ''IS_TEMPORARY'' is a flag to indicate the breakpoint is temporary.
 +
 
 +
: ''IS_HARDWARE'' is a flag indicating that a hardware breakpoint should be set.
 +
 
 +
: ''FILE'' is the file name of the source file containing the function.
 +
 
 +
: ''LINE'' is the line number on which the breakpoint will be set.
 +
 
 +
: ''CONDITION'' is a conditional expression.
 +
 
 +
: ''IGNORE_COUNT'' is an ignore count.
 +
 
 +
: ''THREAD_ID'' is not currently used.
 +
 
 +
; Events : [[#BREAKPOINT_SET | BREAKPOINT_SET]], [[#ERROR|ERROR]]
 +
 
 +
=== CLI ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''INIT_COMMAND'' &rArr; "0001:''TID'':00000002" " " ''VERSION'' " " ''BASE_ID''
+
  ''CLI_COMMAND'' &rArr; "001C:''TID'':00000002" " " ''BITMAP'' " " ''COMMAND''
  
; Description : Initialize proxy communication. After this command has been received, the proxy is ready to receive and process other commands from the RMS.  Initialization data may be passed on the command line when the proxy is run.  
+
; Description : Execute an arbitrary backend-specific command.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''VERSION'' is the wire protocol version number.
+
: ''BITMAP'' specifies the processes this command applies to.
  
: ''BASE_ID'' is the base ID used by the proxy agent when allocating new element IDs.
+
: ''COMMAND'' is an arbitrary command that will be passed directly to the backend debug engine.  
  
 
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
 
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
  
=== MODEL_DEF ===
+
=== DATA_EXPRESSION ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''MODEL_DEF_COMMAND'' &rArr; "0002:''TID'':00000000"
+
  ''DATA_EXPRESSION_COMMAND'' &rArr; "0010:''TID'':00000002" " " ''BITMAP'' " " ''EXPRESSION''
  
; Description : Start the proxy discovery phase. The proxy agent responds with a series of [[#ATTR_DEF|ATTR_DEF]] and [[#FILTER_DEF|FILTER_DEF]] events.  Attributes (see [[#Attributes|Attributes]]) are meta-data describing data from the proxy agent that the RMS is expected to receive and possibly display in the UI.
+
; Description : Evaluate an arbitrary expression in the target processes.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: none
+
: ''BITMAP'' specifies the processes this command applies to.
  
; Events : [[#ATTR_DEF|ATTR_DEF]], [[#FILTER_DEF|FILTER_DEF]], [[#OK|OK]], [[#ERROR|ERROR]]
+
: ''EXPRESSION'' is the expression to evaluate.
  
=== START_EVENTS ===
+
; Events : [[#DATA|DATA]], [[#ERROR|ERROR]]
 +
 
 +
=== DATA_PARTIAL_AIF ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''START_EVENTS_COMMAND'' &rArr; "0003:''TID'':00000000"
+
  ''DATA_PARTIAL_AIF_COMMAND'' &rArr; "001E:''TID'':00000005" " " ''BITMAP'' " " ''EXPRESSION'' " "
 +
                            ''NAME'' " " ''LIST_CHILDREN'' " " ''EXPRESS''
  
; Description : Initiate normal event processing phase.
+
; Description : Evaluate an expression and return a partial value. This is used if the resulting value is very large (e.g. an array).
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: none
+
: ''BITMAP'' specifies the processes this command applies to.
  
; Events : [[#CHANGE_JOB|CHANGE_JOB]], [[#CHANGE_MACHINE|CHANGE_MACHINE]], [[#CHANGE_NODE|CHANGE_NODE]], [[#CHANGE_PROCESS|CHANGE_PROCESS]], [[#CHANGE_QUEUE|CHANGE_QUEUE]], [[#NEW_JOB|NEW_JOB]], [[#NEW_MACHINE|NEW_MACHINE]], [[#NEW_NODE|NEW_NODE]], [[#NEW_PROCESS|NEW_PROCESS]], [[#NEW_QUEUE|NEW_QUEUE]], [[#REMOVE_ALL|REMOVE_ALL]], [[#REMOVE_JOB|REMOVE_JOB]], [[#REMOVE_MACHINE|REMOVE_MACHINE]], [[#REMOVE_NODE|REMOVE_NODE]], [[#REMOVE_PROCESS|REMOVE_PROCESS]], [[#REMOVE_QUEUE|REMOVE_QUEUE]], [[#OK|OK]], [[#ERROR|ERROR]]
+
: ''EXPRESSION'' is the expression to evaluate.
  
=== STOP_EVENTS ===
+
: ''NAME'' specifies a name to use to refer to the expression. If the named expression already exists, this expression will be used instead of evaluating ''EXPRESSION''.
 +
 
 +
: ''LIST_CHILDREN'' specifies that full type traversal should be performed.
 +
 
 +
: ''EXPRESS'' indicates that the minimum amount of information should be returned.
 +
 
 +
; Events : [[#DATA_PARTIAL|DATA_PARTIAL]], [[#ERROR|ERROR]]
 +
 
 +
=== DATA_READ_MEMORY ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''STOP_EVENTS_COMMAND'' &rArr; "0004:''TID'':00000000"
+
  ''DATA_READ_MEMORY_COMMAND'' &rArr; "0018:''TID'':''NUM_ARGS''" " " ''BITMAP'' " " ''OFFSET'' " "
 +
                            ''ADDRESS'' " " ''FORMAT'' " " ''WORD_SIZE'' " " ''ROWS'' " " ''COLS'' " " [ ''AS_CHAR'' ]
  
; Description : Suspend normal event processing phase.
+
; Description : Read a block of memory from the target processes.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: none
+
: ''BITMAP'' specifies the processes this command applies to.
  
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
+
: ''OFFSET'' is an offset to add to ''ADDRESS'' before fetching memory
 +
 
 +
: ''ADDRESS'' is an expression specifying the address of the first memory word to read.
 +
 
 +
: ''FORMAT'' is the format used to print the memory words. See [http://sourceware.org/gdb/current/onlinedocs/gdb_9.html#SEC63 Output Formats]
 +
 
 +
: ''WORD_SIZE'' is the size of each memory word in bytes.
 +
 
 +
: ''ROWS'' is the number of rows in the output table.
 +
 
 +
: ''COLS'' is the number of columns in the output table.
 +
 
 +
: ''AS_CHAR'' optionally specifies that each row should include an ASCII dump with this character as a padding character.
 +
 
 +
; Events : [[#DATA_MEMORY| DATA_MEMORY]], [[#ERROR|ERROR]]
  
=== SUBMIT_JOB ===
+
=== DATA_WRITE_MEMORY ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''SUBMIT_JOB_COMMAND'' &rArr; "0005:''TID'':''NUM_ARGS''" { " " ''JOB_ATTR'' }
+
  ''DATA_WRITE_MEMORY_COMMAND'' &rArr; "00019:''TID'':00000006" " " ''BITMAP'' " " ''OFFSET'' " "
 +
                              ''ADDRESS'' " " ''FORMAT'' " " ''WORD_SIZE'' " " ''VALUE''
  
; Description : Submit a job to the resource manager for execution. The job submission ID is an RMS generated ID that is used to match the newly created job model element with the job submission. The proxy agent MUST include this attribute when the corresponding [[#NEW_JOB|NEW_JOB]] event is sent to the RMS. Once this event has been transmitted, the job submission ID can be discarded.
+
; Description : Write a value into a block of memory to the target processes.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''JOB_ATTR'' is a proxy specific job submission attribute. At least one of these attributes MUST be an attribute containing the job submission ID for the job.
+
: ''BITMAP'' specifies the processes this command applies to.
 +
 
 +
: ''OFFSET'' is an offset to add to ''ADDRESS'' before writing memory
 +
 
 +
: ''ADDRESS'' is an expression specifying the address of the first memory word to read.
 +
 
 +
: ''FORMAT'' is not used.
 +
 
 +
: ''WORD_SIZE'' is the size of each memory word in bytes.
 +
 
 +
: ''VALUE'' is the value to be written into each memory location.
  
 
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
 
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
  
=== TERMINATE_JOB ===
+
=== DATA_TYPE ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''TERMINATE_JOB_COMMAND'' &rArr; "0006:''TID'':00000001" " " ''JOB_ID_ATTR''
+
  ''DATA_TYPE_COMMAND'' &rArr; "0011:''TID'':00000002" " " ''BITMAP'' " " ''EXPRESSION''
  
; Description : Request the terminaton of an existing job. The meaning of 'termination' depends on the state of the job.
+
; Description : Get the result type after evaluating the expression specified by ''EXPRESSION''.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''JOB_ID_ATTR'' is a [[PTP/designs/2.x#Pre-defined_Attributes | jobId]] attribute containing the model element ID of the job.
+
: ''BITMAP'' specifies the processes this command applies to.
  
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
+
: ''EXPRESSION'' is the expression to evaluate.
 +
 
 +
; Events : [[#DATA_TYPE| DATA_TYPE]], [[#ERROR|ERROR]]
  
=== MOVE_JOB ===
+
=== EXEC_GO ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''MOVE_JOB_COMMAND'' &rArr; "0007:''TID'':00000002" " " ''JOB_ID_ATTR'' " " ''QUEUE_ID_ATTR''
+
  ''EXEC_GO_COMMAND'' &rArr; "000A:''TID'':00000001" " " ''BITMAP''
  
; Description : ''Not yet implemented.'' This command is intended to allow jobs to be moved between queues.
+
; Description : Start or resume execution of the target processes.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''JOB_ID_ATTR'' is a [[PTP/designs/2.x#Pre-defined_Attributes | jobId]] attribute containing the model element ID of the job.
+
: ''BITMAP'' specifies the processes this command applies to.
  
: ''QUEUE_ID_ATTR'' is a [[PTP/designs/2.x#Pre-defined_Attributes | queueId]] attribute containing the model element ID of the destination queue.
+
; Events : [[#EXIT_NORMAL| EXIT_NORMAL]], [[#EXIT_SIGNAL| EXIT_SIGNAL]], [[#SUSPEND_BREAKPOINT| SUSPEND_BREAKPOINT]], [[#SUSPEND_SIGNAL| SUSPEND_SIGNAL]], [[#ERROR|ERROR]]
  
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
+
=== EXEC_INTERRUPT ===
 +
 
 +
<b>Message Format</b>
 +
 
 +
''EXEC_INTERRUPT_COMMAND'' &rArr; "000D:''TID'':00000001" " " ''BITMAP''
 +
 
 +
; Description : Suspend execution of the target processes. This command can be sent before a previous command has completed.
 +
 
 +
<b>Arguments</b>
 +
 
 +
: ''BITMAP'' specifies the processes this command applies to.
 +
 
 +
; Events : [[#SUSPEND_INTERRUPT| SUSPEND_INTERRUPT]], [[#ERROR|ERROR]]
  
=== CHANGE_JOB ===
+
=== EXEC_STEP ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''CHANGE_JOB_COMMAND'' &rArr; "0008:''TID'':''NUM_ARGS''" " " ''JOB_ID_ATTR'' { " " ''ATTR'' }
+
  ''EXEC_STEP_COMMAND'' &rArr; "000B:''TID'':00000003" " " ''BITMAP'' " " ''COUNT'' " " ''TYPE''
  
; Description : ''Not yet implemented.'' This command is intended to allow a job's status to be changed (e.g. place a hold on a job)
+
; Description : Return the stack frame depth of the target.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''JOB_ID_ATTR'' is a [[PTP/designs/2.x#Pre-defined_Attributes | jobId]] attribute containing the model element ID of the job to change.
+
: ''BITMAP'' specifies the processes this command applies to.
  
: ''ATTR'' is a proxy agent specific job attribute to change.
+
: ''COUNT'' is a repeat count.
  
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
+
: ''TYPE'' is the type of the command. Options are "0" for step over, "1" for step into, and "2" for step return.
 +
 
 +
; Events : [[#SUSPEND_STEP| SUSPEND_STEP]], [[#ERROR|ERROR]]
  
=== LIST_FILTERS ===
+
=== EXEC_TERMINATE ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''LIST_FILTERS_COMMAND'' &rArr; "0009:''TID'':00000000"
+
  ''TERMINATE_COMMAND'' &rArr; "000C:''TID'':00000001" " " ''BITMAP''
  
; Description : ''Not yet implemented.'' This command lists the filters that are currently enabled in the proxy agent.
+
; Description : Terminate the target processes by sending a signal. The command can be sent before the previous command is completed.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: none
+
: ''BITMAP'' specifies the processes this command applies to.
  
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
+
; Events : [[#EXIT_SIGNAL| EXIT_SIGNAL]], [[#ERROR|ERROR]]
  
=== SET_FILTERS ===
+
=== GET_ARGUMENTS ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''SET_FILTERS_COMMAND'' &rArr; "000A:''TID'':''NUM_ARGS''" { " " ''ATTR'' }
+
  ''GET_ARGUMENTS_COMMAND'' &rArr; "0013:''TID'':00000003" " " ''BITMAP'' " " ''LOW'' " " ''HIGH''
  
; Description : ''Not yet implemented.'' This command sets the filters in the proxy agent.
+
; Description : List the arguments from the stack frames between ''LOW'' and ''HIGH'' inclusively.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''ATTR'' is a filter attributes to set.
+
: ''BITMAP'' specifies the processes this command applies to.
  
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
+
: ''LOW'' specifies the low stack frame number.
  
== Events  ==
+
: ''HIGH'' specifies the high stack frame number.
  
Events are used by the proxy agent to communicate the results of commands or other information back to the RMS. As mentioned previously, each event MUST contain a tid of a corresponding command.
+
; Events : [[#ARGUMENTS| ARGUMENTS]], [[#ERROR|ERROR]]
  
Events, like commands, are formatted as simple ASCII text strings. A proxy event consists of a header and a body, separated by a space (hex 20), as follows:
+
=== GET_SIGNALS ===
  
''EVENT'' &rArr; ''EVENT_HEADER'' " " ''EVENT_BODY''
+
<b>Message Format</b>
  
The event header consists of three fixed length hexadecimal numbers separated by colons (hex 3A), so it is itself fixed length. The format of the header is:
+
''GET_SIGNALS_COMMAND'' &rArr; "001A:''TID'':''NUM_ARGS''" " " ''BITMAP'' [ " " ''NAME'' ]
  
''EVENT_HEADER'' &rArr; ''EVENT_ID'' ":" ''TID'' ":" ''NUM_ARGS''
+
; Description : List information about how the debugger handles signals. If a signal name is provided, then only information about that signal will be listed.
  
where
+
<b>Arguments</b>
  
: ''EVENT_ID'' is a 4 digit hexadecimal number representing the type of event
+
: ''BITMAP'' specifies the processes this command applies to.
  
: ''TID'' is an 8 digit hexadecimal number containing the transaction ID of the command that generated this event
+
: ''NAME'' optionally specifies the signal.
  
: ''NUM_ARGS'' is an 8 digit hexadecimal number  containing the number of space separated elements in the event body
+
; Events : [[#SIGNALS| SIGNALS]], [[#ERROR|ERROR]]
  
The event body consists of ''NUM_ARGS'' strings separated by spaces.
+
=== GET_STACK_DEPTH ===
  
''EVENT_BODY'' &rArr; ''STRING'' { " " ''STRING'' }
+
<b>Message Format</b>
  
The following sections describe the currently defined events.
+
''GET_STACK_DEPTH_COMMAND'' &rArr; "0017:''TID'':00000001" " " ''BITMAP''
  
=== OK ===
+
; Description : Return the stack frame depth of the target.
 +
 
 +
<b>Arguments</b>
 +
 
 +
: ''BITMAP'' specifies the processes this command applies to.
 +
 
 +
; Events : [[#STACK_DEPTH| STACK_DEPTH]], [[#ERROR|ERROR]]
 +
 
 +
=== GET_STACK_FRAMES ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''OK_EVENT'' &rArr; "0000:''TID'':00000000"
+
  ''LIST_STACK_FRAMES_COMMAND'' &rArr; "000E:''TID'':00000003" " " ''BITMAP'' " " ''LOW'' " " ''HIGH''
  
; Description : Indicates that the command with corresponding ''TID'' has been completed successfully
+
; Description : List the stack frames between ''LOW'' and ''HIGH'' inclusive.
  
; Arguments : none
+
<b>Arguments</b>
  
=== ERROR ===
+
: ''BITMAP'' specifies the processes this command applies to.
 +
 
 +
: ''LOW'' is the low stack frame number.
 +
 
 +
: ''HIGH'' is the high stack frame number.
 +
 
 +
; Events : [[#STACK_FRAMES| STACK_FRAMES]], [[#ERROR|ERROR]]
 +
 
 +
=== GET_THREADS ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''ERROR_EVENT'' &rArr; "0005:''TID'':00000002" " " ''ERROR_CODE_ATTRIBUTE'' " " ''ERROR_MSG_ATTRIBUTE''
+
  ''GET_THREADS_COMMAND'' &rArr; "0015:''TID'':00000001" " " ''BITMAP''
  
; Description : Indicates that the command with corresponding ''TID'' has not been completed successfully. The reason for the failure are provided in the attributes.
+
; Description : Obtain information about all threads in the current process.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''ERROR_CODE_ATTRIBUTE'' is an attribute containing the error code
+
: ''BITMAP'' specifies the processes this command applies to.
  
: ''ERROR_MSG_ATTRIBUTE'' is an attribute containing a textual representation of the error
+
; Events : [[#THREAD_INFO| THREAD_INFO]], [[#ERROR|ERROR]]
  
=== SHUTDOWN ===
+
=== GET_VARIABLES_GLOBAL ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''SHUTDOWN_EVENT'' &rArr; "0006:''TID'':00000000"
+
  ''GET_VARIABLES_GLOBAL_COMMAND'' &rArr; "0014:''TID'':00000001" " " ''BITMAP''
  
; Description : Indicates that the proxy has shut down in response to a [[#QUIT|QUIT]] command.
+
; Description : List all global (non-static) variables in the process.
  
; Arguments : none
+
<b>Arguments</b>
 +
 
 +
: ''BITMAP'' specifies the processes this command applies to.
 +
 
 +
; Events : [[#VARIABLES | VARIABLES]], [[#ERROR|ERROR]]
  
=== MESSAGE ===
+
=== GET_VARIABLES_LOCAL ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''MESSAGE_EVENT'' &rArr; "00FA:''TID'':00000003" " " ''MSG_LEVEL_ATTRIBUTE'' " " ''MSG_CODE_ATTRIBUTE'' " " ''MSG_TEXT_ATTRIBUTE''
+
  ''GET_VARIABLES_LOCAL_COMMAND'' &rArr; "0012:''TID'':00000001" " " ''BITMAP''
  
; Description : A log message that will be displayed by the user interface.
+
; Description : List all local variables in current stack frame of the current process.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''MSG_LEVEL_ATTRIBUTE'' is an attribute containing the message level. Valid levels are '"FATAL'", '"ERROR", "WARNING", and "INFO".
+
: ''BITMAP'' specifies the processes this command applies to.
  
: ''MSG_CODE_ATTRIBUTE'' is an attribute containing the message code
+
; Events : [[#VARIABLES| VARIABLES]], [[#ERROR|ERROR]]
  
: ''MSG_TEXT_ATTRIBUTE'' is an attribute containing a textual representation of the message
+
=== SET_CURRENT_STACK_FRAME ===
  
=== ATTR_DEF ===
+
<b>Message Format</b>
 +
 
 +
''SET_CURRENT_STACK_FRAME_COMMAND'' &rArr; "000F:''TID'':00000002" " " ''BITMAP'' " " ''LEVEL''
 +
 
 +
; Description : Set the current stack frames to ''LEVEL''.
 +
 
 +
<b>Arguments</b>
 +
 
 +
: ''BITMAP'' specifies the processes this command applies to.
 +
 
 +
: ''LEVEL'' is the stack frame number.
 +
 
 +
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
 +
 
 +
=== SET_THREAD ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''ATTR_DEF_EVENT'' &rArr; "00FB:''TID'':''NUM_ARGS''" " " ''NUM_DEFS'' { " " ''ATTRIBUTE_DEF'' }
+
  ''SET_THREAD_COMMAND'' &rArr; "0016:''TID'':00000002" " " ''BITMAP'' " " ''THREAD_ID''
  
; Description : Used to create new attribute definitions.
+
; Description : Makes the thread specified by ''THREAD_ID'' the current thread.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''NUM_DEFS'' is the number of attribute definitions to follow.
+
: ''BITMAP'' specifies the processes this command applies to.
  
: ''ATTRIBUTE_DEF'' is an attribute definition.  
+
: ''THREAD_ID'' is the thread number.
  
An attribute definition is defined as follows:
+
; Events : [[#THREAD_SELECT| THREAD_SELECT]], [[#ERROR|ERROR]]
  
''ATTRIBUTE_DEF'' &rArr; ''BOOLEAN_ATTR_DEF'' | ''DATE_ATTR_DEF'' | ''DOUBLE_ATTR_DEF'' | ''ENUM_ATTR_DEF'' | ''INT_ATTR_DEF'' | ''STR_ATTR_DEF''
+
=== SET_WATCHPOINT ===
  
All attribute definitions begin with the following elements:
+
<b>Message Format</b>
  
  ''ATTR_DEF_START'' &rArr; ''NUM_ELEMENTS'' " " ''ID'' " " ''TYPE'' " " ''NAME'' " " ''DESCRIPTION'' " " ''DEFAULT''
+
  ''SET_WATCHPOINT_COMMAND'' &rArr; "0009:''TID'':00000006" " " ''BITMAP'' " " ''BREAKPOINT_ID'' " "  
 +
                            ''EXPRESSION'' " " ''IS_ACCESS'' " " ''IS_READ'' " " ''IGNORE_COUNT''
  
where:
+
; Description : Set a watchpoint on the expression ''EXPRESSION''.
  
: ''NUM_ELEMENTS'' is the number of elements (separated by spaces) in this attribute definition.
+
<b>Arguments</b>
  
: ''ID'' is the unique definition ID.
+
: ''BITMAP'' specifies the processes this command applies to.
  
: ''TYPE'' is the type of the attribute. Legal values are: "ARRAY", "BOOLEAN", "DATE", "DOUBLE", "ENUMERATED", "INTEGER", and "STRING".
+
: ''BREAKPOINT_ID'' is the ID used to reference this breakpoint.
  
: ''NAME'' is the short name of the attribute. This is displayed in property views as the name of the attribute.
+
: ''EXPRESSION'' is the expression on which the watchpoint will be set.
  
: ''DESCRIPTION'' is a description of the attribute. This is dispayed when more information about the attribute is requested.
+
: ''IS_ACCESS'' is a flag indicating that the watchpoint should trigger on any kind of access.
  
: ''DEFAULT'' is the default value of the attribute. There must be a legal conversion between this string and the actual attribute value.
+
: ''IS_READ'' is a flag indicating that the watchpoint should trigger only on read accesses.
  
A boolean attribute definition is simply:
+
: ''IGNORE_COUNT'' is not used.
  
''BOOLEAN_ATTR_DEF'' &rArr; ''ATTR_DEF_START
+
; Events : [[#BREAKPOINT_SET | BREAKPOINT_SET]], [[#ERROR|ERROR]]
  
A date attribute definition requires additional elements to be supplied for the definition:
+
=== START_SESSION ===
  
''DATE_ATTR_DEF'' &rArr; ''ATTR_DEF_START'' " " ''DATE_STYLE'' " " ''TIME_STYLE'' " " ''LOCALE'' [ " " ''MIN'' " " ''MAX'' ]
+
<b>Message Format</b>
  
where:
+
''START_SESSION_COMMAND'' &rArr; "0001:''TID'':''NUM_ARGS''" " " ''PROGRAM'' " " ''PATH'' " " ''DIRECTORY'' { "  " ''ARGUMENT'' }
  
: ''DATE_STYLE'' is a ''Proxy String'' representing the date format. Legal values are: "SHORT", "MEDIUM", "LONG", and "FULL".
+
; Description : Start the debug session. Note that this command does not take a bitmap; it is assumed to be global.
  
: ''TIME_STYLE'' is a ''Proxy String'' representing the time format. Legal values are: "SHORT", "MEDIUM", "LONG", and "FULL".
+
<b>Arguments</b>
  
: ''LOCALE'' is a ''Proxy String'' represting a country code. See java.lang.Local for legal values.
+
: ''PROGRAM'' is the name of the executable being debugged.
  
: ''MIN'' is the minimum date supported by the attribute.
+
: ''PATH'' is the path to the executable.
  
: ''MAX'' is the maximum date supported by the attribute.
+
: ''DIRECTORY'' is the current working directory.
  
A double attribute defintion has optional paramaters:  
+
: ''ARGUMENT'' is an argument that will be passed to the application program.
  
''DOUBLE_ATTR_DEF'' &rArr; ''ATTR_DEF_START'' [ " " ''MIN " " MAX'' ]
+
; Events : [[#OK|OK]], [[#ERROR|ERROR]]
  
where:
+
== Events  ==
  
: ''MIN'' is the minimum value supported by the attribute.
+
Events are used by the server to communicate the results of commands or other information back to the front-end. As mentioned previously, each event MUST contain a tid of a corresponding command.
  
: ''MAX'' is the maximum value supported by the attribute.
+
Events, like commands, are formatted as simple ASCII text strings. An event consists of a header and a body, separated by a space (hex 20), as follows:
  
An enumerated attribute definition requires a sequence of enumerated values to be specified:
+
''EVENT'' &rArr; ''EVENT_HEADER'' " " ''EVENT_BODY''
  
''ENUM_ATTR_DEF'' &rArr; ''ATTR_DEF_START'' { " " ''VALUE'' }
+
The event header consists of three fixed length hexadecimal numbers separated by colons (hex 3A), so it is itself fixed length. The format of the header is:
  
where:
+
''EVENT_HEADER'' &rArr; ''EVENT_ID'' ":" ''TID'' ":" ''NUM_ARGS''
  
: ''VALUE'' is a string representing an enumerated value.
+
where
  
Like double, integer attributes take optional parameters:
+
: ''EVENT_ID'' is a 4 digit hexadecimal number representing the type of event
  
''INT_ATTR_DEF'' &rArr; ''ATTR_DEF_START'' [ " " ''MIN " " MAX'' ]
+
: ''TID'' is an 8 digit hexadecimal number containing the transaction ID of the command that generated this event
  
where:
+
: ''NUM_ARGS'' is an 8 digit hexadecimal number  containing the number of space separated elements in the event body
  
: ''MIN'' is the minimum value supported by the attribute.
+
The event body consists of ''NUM_ARGS'' strings separated by spaces. Debug events always have a bitmap as the first argument in the body. This bitmap specifies the processes that generated the event.
  
: ''MAX'' is the maximum value supported by the attribute.
+
''EVENT_BODY'' &rArr; ''BITMAP'' { " " ''STRING'' }
  
=== CHANGE_JOB ===
+
The following sections describe the currently defined events.
 +
 
 +
=== ARGUMENTS ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''CHANE_JOB_EVENT'' &rArr; "00E6:''TID'':''NUM_ARGS''" " " ''NUM_RANGES'' { " " ''JOB_RANGE'' }
+
  ''ARGUMENTS_EVENT'' &rArr; "006D:''TID'':''NUM_ARGS''" " " ''BITMAP'' { " " ''NAME'' }
  
; Description : Used to update attributes in a range of job model elements. Multiple attributes in multiple jobs can be updated simultaneously with this event.  
+
; Description : Provides a list of arguments.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''NUM_RANGES'' is the number of job ranges contained in this event.
+
: ''BITMAP'' specifies the processes that generated this event.
  
: ''JOB_RANGE'' represents the attributes that have changed for a given range of jobs.
+
: ''NAME'' is the name of an argument.
  
A ''JOB_RANGE'' is formatted as follows:
+
=== BREAKPOINT_SET ===
  
''JOB_RANGE'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
+
<b>Message Format</b>
  
where:
+
''BREAKPOINT_SET_EVENT'' &rArr; "0068:''TID'':''NUM_ARGS''" " " ''BITMAP'' " " ''BREAKPOINT_ID'' " "
 +
                        ''BPID'' " " ''IGNORE'' " " ''SPECIAL'' " " ''DELETED'' " " ''TYPE'' " "
 +
                        ''FILE'' " " ''FUNCTION'' " " ''ADDRESS'' " " ''LINE'' " " ''HIT_COUNT''
  
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
+
; Description : Indicates that a breakpoint was successfully set.
  
: ''NUM_ATTRS'' is the number' of attributes associated with this range of jobs.
+
<b>Arguments</b>
  
: ''ATTR'' is an attribute that will be updated for each job in the range.
+
: ''BITMAP'' specifies the processes that generated this event.
  
=== CHANGE_MACHINE ===
+
: ''BREAKPOINT_ID'' the ID of the breakpoint that was set.
  
<b>Message Format</b>
+
The remainder of the event contains the status of the breakpoint:
  
''CHANGE_MACHINE_EVENT'' &rArr; "00E7:''TID'':''NUM_ARGS''" " " ''NUM_RANGES'' { " " ''MACHINE_RANGE'' }
+
: ''BPID'' the ID of the breakpoint
  
; Description : Used to update attributes in a range of machine model elements. Multiple attributes in multiple machines can be updated simultaneously with this event.  
+
: ''IGNORE'' a field indicating that the breakpoint will be ignored.
  
<b>Arguments</b>
+
: ''SPECIAL''  a field indicating that the breakpoint is special.
  
: ''NUM_RANGES'' is the number of machine ranges contained in this event.
+
: ''DELETED'' a field indicating that the breakpoint has been deleted.
  
: ''MACHINE_RANGE'' represents the attributes that have changed for a given range of machines.
+
: ''TYPE'' a field giving the type of breakpoint.
  
A ''MACHINE_RANGE'' is formatted as follows:
+
: ''FILE'' the source file in which the breakpoint is set.
  
''MACHINE_RANGE'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
+
: ''FUNCTION'' the function on which the breakpoint is set.
  
where:
+
: ''ADDRESS'' the address of the breakpoint.
  
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
+
: ''LINE'' the line on which the breakpoint is set.
  
: ''NUM_ATTRS'' is the number of attributes associated with this range of machines.
+
: ''HIT_COUNT'' the number of times that the breakpoint has been triggered.
  
: ''ATTR'' is an attribute that will be updated for each machine in the range.
+
=== DATA ===
  
=== CHANGE_NODE ===
+
<b>Message Format</b>
 +
 
 +
''DATA_EVENT'' &rArr; "006A:''TID'':00000004" " " ''BITMAP'' " " ''AIF_TYPE'' " " ''AIF_DATA'' " " ''TYPE''
 +
 
 +
; Description : An event containing the value of a variable or expression in AIF format.
 +
 
 +
<b>Arguments</b>
 +
 
 +
: ''BITMAP'' specifies the processes that generated this event.
 +
 
 +
: ''AIF_TYPE'' is the AIF type of the value.
 +
 
 +
: ''AIF_DATA'' is the AIF data of the value.
 +
 
 +
: ''TYPE'' is a language-specific type description.
 +
 
 +
=== DATA_PARTIAL ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''CHANGE_NODE_EVENT'' &rArr; "00E8:''TID'':''NUM_ARGS''" ''NUM_RANGES'' { " " ''NODE_RANGE'' }
+
  ''DATA_PARTIAL_EVENT'' &rArr; "0079:''TID'':00000004" " " ''BITMAP'' " " ''AIF_TYPE'' " " ''AIF_DATA'' " " ''TYPE''
  
; Description : Used to update attributes in a range of node model elements. Multiple attributes in multiple nodes can be updated simultaneously with this event.  
+
; Description : An event containing the partial value of a variable or expression in AIF format. This is used to return partial values when the data structure is very large (e.g. an array).
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''NUM_RANGES'' is the number of node ranges contained in this event.
+
: ''BITMAP'' specifies the processes that generated this event.
  
: ''NODE_RANGE'' represents the attributes that have changed for a given range of nodes.
+
: ''AIF_TYPE'' is the AIF type of the value.
  
A ''NODE_RANGE'' is formatted as follows:
+
: ''AIF_DATA'' is the AIF data of the value.
  
''NODE_RANGE'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
+
: ''TYPE'' is a language-specific type description.
  
where:
+
=== DATA_VALUE ===
  
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
+
<b>Message Format</b>
  
: ''NUM_ATTRS'' is the number of attributes associated with this range of nodes.
+
''DATA_VALUE_EVENT'' &rArr; "0078:''TID'':00000002" " " ''BITMAP'' " " ''VALUE''
  
: ''ATTR'' is an attribute that will be updated for each node in the range.
+
; Description : An event containing the string representation of the value of a variable or expression.
  
=== CHANGE_PROCESS ===
+
<b>Arguments</b>
 +
 
 +
: ''BITMAP'' specifies the processes that generated this event.
 +
 
 +
: ''VALUE'' is the value.
 +
 
 +
=== DATA_MEMORY ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''CHANGE_PROCESS_EVENT'' &rArr; "00E9:''TID'':''NUM_ARGS''" " " ''NUM_RANGES'' { " " ''PROCESS_RANGE'' }
+
  ''DATA_MEMORY_EVENT'' &rArr; "0075:''TID'':''NUM_ARGS''" " " ''BITMAP'' " "
 +
                      ''ADDRESS'' " " ''NEXT_ROW'' " " ''PREV_ROW'' " " ''NEXT_PAGE'' " " ''PREV_PAGE'' " "
 +
                      ''BYTES'' " " ''LENGTH'' { " " ''MEM_ADDRESS'' " " ''ASCII'' " "
 +
                      ''DATA_LENGTH'' { " " ''DATA_VALUE'' }
  
; Description : Used to update attributes in a range of process model elements. Multiple attributes in multiple processes can be updated simultaneously with this event.  
+
; Description : An event containing the contents of memory.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''NUM_RANGES'' is the number of process ranges contained in this event.
+
: ''BITMAP'' specifies the processes that generated this event.
 +
 
 +
: ''ADDRESS'' is the starting address of the memory data.
 +
 
 +
: ''NEXT_ROW'' is the address of the next row in the table.
 +
 
 +
: ''PREV_ROW'' is the address of the previous row in the table.
 +
 
 +
: ''NEXT_PAGE'' is the address of the next page in the table.
  
: ''PROCESS_RANGE'' represents the attributes that have changed for a given range of processes.
+
: ''PREV_PAGE'' is the address of the previous page in the table.
  
A ''PROCESS_RANGE'' is formatted as follows:
+
: ''BYTES'' is the total number of bytes (rows * cols * word-size).
  
''PROCESS_RANGE'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
+
: ''LENGTH'' is the number of memory addresses returned.
  
where:
+
: ''MEM_ADDRESS'' is the start address of the memory.
  
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
+
: ''ASCII'' is an ASCII representation of the data.
  
: ''NUM_ATTRS'' is the number of attributes associated with this range of processes.
+
: ''DATA_LENGTH'' is the number of data values.
  
: ''ATTR'' is an attribute that will be updated for each process in the range.
+
: ''DATA_VALUE'' is data from a memory location.
  
=== CHANGE_QUEUE ===
+
=== DATA_TYPE ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''CHANGE_QUEUE_EVENT'' &rArr; "00EA:''TID'':''NUM_ARGS''" " " ''NUM_RANGES'' { " " ''QUEUE_RANGE'' }
+
  ''DATA_TYPE_EVENT'' &rArr; "006B:''TID'':00000002" " " ''BITMAP'' " " ''VALUE''
  
; Description : Used to update attributes in a range of queue model elements. Multiple attributes in multiple queues can be updated simultaneously with this event.  
+
; Description : An event containing the string representation of the type of a variable or expression.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''NUM_RANGES'' is the number of queue ranges contained in this event.
+
: ''BITMAP'' specifies the processes that generated this event.
  
: ''QUEUE_RANGE'' represents the attributes that have changed for a given range of queues.
+
: ''TYPE'' is the type.
  
A ''QUEUE_RANGE'' is formatted as follows:
+
=== ERROR ===
  
''QUEUE_RANGE'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
+
<b>Message Format</b>
  
where:
+
''ERROR_EVENT'' &rArr; "0070:''TID'':00000003" " " ''BITMAP'' ''ERROR_CODE_ATTRIBUTE'' " " ''ERROR_MSG_ATTRIBUTE''
  
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
+
; Description : Indicates that the command with corresponding ''TID'' has not been completed successfully. The reason for the failure are provided in the attributes.
  
: ''NUM_ATTRS'' is the number of attributes associated with this range of queues.
+
<b>Arguments</b>
  
: ''ATTR'' is an attribute that will be updated for each queue in the range.
+
: ''BITMAP'' specifies the processes that generated this event.
 +
 
 +
: ''ERROR_CODE_ATTRIBUTE'' is an attribute containing the error code
 +
 
 +
: ''ERROR_MSG_ATTRIBUTE'' is an attribute containing a textual representation of the error
  
=== NEW_JOB ===
+
=== EXIT_NORMAL ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''NEW_JOB_EVENT'' &rArr; "00DC:''TID'':''NUM_ARGS''" " " ''PARENT_ID'' " " ''NUM_JOB_DEFS'' { " " ''JOB_DEF'' }
+
  ''EXIT_NORMAL_EVENT'' &rArr; "0078:''TID'':00000003" " " ''BITMAP'' " " "0" " " ''EXIT_CODE''
  
; Description : Define new job model elements. Multiple jobs can be defined simultaneously with this event.  
+
; Description : An event indicating that a process has exited normally.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''PARENT_ID'' is the ID of the parent queue of this job.
+
: ''BITMAP'' specifies the processes that generated this event.
  
: ''NUM_JOB_DEFS'' is the number of job definitions contained in this event.
+
: ''EXIT_CODE'' is the exit code of the process.
  
: ''JOB_DEF'' represents the definition of a range of jobs and associated attributes.
+
=== EXIT_SIGNAL ===
  
A ''JOB_DEF'' is formatted as follows:
+
<b>Message Format</b>
  
  ''JOB_DEF'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
+
  ''EXIT_SIGNAL_EVENT'' &rArr; "0078:''TID'':00000007" " " ''BITMAP'' " " "1" " "
 +
                      ''NAME'' " " ''STOP'' " " ''PRINT'' " " ''PASS'' " " ''DESCRIPTION''
  
where:
+
; Description : An event indicating that a process has exited because it received a signal.
  
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
+
<b>Arguments</b>
  
: ''NUM_ATTRS'' is the number' of attributes associated with this job definition.
+
: ''BITMAP'' specifies the processes that generated this event.
  
: ''ATTR'' is an attribute that will be set for each newly created job.
+
: ''NAME'' is the name of the signal that cause the process to exit.
  
=== NEW_MACHINE ===
+
: ''STOP'' can be used to indicate if this signal will cause the process to stop.
 +
 
 +
: ''PRINT'' can be used to indicate if this signal will cause a message to be printed.
 +
 
 +
: ''PASS'' can be used to indicate that this signal is passed to the target process.
 +
 
 +
: ''DESCRIPTION'' is a description of the signal.
 +
 
 +
=== OK ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''NEW_MACHINE_EVENT'' &rArr; "00DD:''TID'':''NUM_ARGS''" " " ''PARENT_ID'' " " ''NUM_MACHINE_DEFS'' { " " ''MACHINE_DEF'' }
+
  ''OK_EVENT'' &rArr; "006F:''TID'':00000001" " " ''BITMAP''
  
; Description : Define new machine model elements. Multiple machines can be defined simultaneously with this event.
+
; Description : Indicates that the command with corresponding ''TID'' has been completed successfully
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''PARENT_ID'' is the ID of the parent resource manager of this machine.
+
: ''BITMAP'' specifies the processes that generated this event.
  
: ''NUM_MACHINE_DEFS'' is the number of machine definitions contained in this event.
+
=== SIGNALS ===
  
: ''MACHINE_DEF'' represents the definition of a range of machines and associated attributes.
+
<b>Message Format</b>
  
A ''MACHINE_DEF'' is formatted as follows:
+
''SIGNALS_EVENT'' &rArr; "0077:''TID'':''NUM_ARGS''" " " ''BITMAP'' " "
 +
                ''LENGTH'' { " " ''NAME''  " " ''STOP'' " " ''PRINT'' " " ''PASS'' " " ''DESCRIPTION'' }
  
''MACHINE_DEF'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
+
; Description : Provide information on how signals are handled by the backend.
  
where:
+
<b>Arguments</b>
  
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
+
: ''BITMAP'' specifies the processes that generated this event.
  
: ''NUM_ATTRS'' is the number of attributes associated with this machine definition.
+
: ''LENGTH'' is the number of signals in the event.
  
: ''ATTR'' is an attribute that will be set for each newly created machine.
+
: ''NAME'' is the name of the signal.
  
=== NEW_NODE ===
+
: ''STOP'' indicates if this signal will cause the process to stop.
 +
 
 +
: ''PRINT'' indicates if this signal will cause a message to be printed.
 +
 
 +
: ''PASS'' indicates that this signal is passed to the target process.
 +
 
 +
: ''DESCRIPTION'' is a description of the signal.
 +
 
 +
=== STACK_DEPTH ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''NEW_NODE_EVENT'' &rArr; "00DE:''TID'':''NUM_ARGS''" " " ''PARENT_ID'' " " ''NUM_NODE_DEFS'' { " " ''NODE_DEF'' }
+
  ''STACK_DEPTH_EVENT'' &rArr; "0074:''TID'':''NUM_ARGS''" " " ''BITMAP'' " " ''DEPTH''
  
; Description : Define new node model elements. Multiple nodes can be defined simultaneously with this event.  
+
; Description : Provides the number of frames in the (current) stack.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''PARENT_ID'' is the ID of the parent machine of this node.
+
: ''BITMAP'' specifies the processes that generated this event.
  
: ''NUM_NODE_DEFS'' is the number of node definitions contained in this event.
+
: ''DEPTH'' is the stack depth.
  
: ''NODE_DEF'' represents the definition of a range of nodes and associated attributes.
+
=== STACK_FRAMES ===
  
A ''NODE_DEF'' is formatted as follows:
+
<b>Message Format</b>
  
  ''NODE_DEF'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
+
  ''STACK_FRAMES_EVENT'' &rArr; "0069:''TID'':''NUM_ARGS''" " " ''BITMAP'' " "
 +
                      ''LENGTH'' { " " ''FRAME_LEVEL''  " " ''FILE'' " " ''FUNCTION'' " " ''ADDRESS'' " " ''LINE'' }
  
where:
+
; Description : Provides a list of stack frames.
  
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
+
<b>Arguments</b>
  
: ''NUM_ATTRS'' is the number of attributes associated with this node definition.
+
: ''BITMAP'' specifies the processes that generated this event.
  
: ''ATTR'' is an attribute that will be set for each newly created node.
+
: ''LENGTH'' is the number of stack frames in the event.
  
=== NEW_PROCESS ===
+
: ''FRAME_LEVEL'' is the level of the thread's stack frame.
  
<b>Message Format</b>
+
: ''FILE'' is the current file name.
  
''NEW_PROCESS_EVENT'' &rArr; "00DF:''TID'':''NUM_ARGS''" " " ''PARENT_ID'' " " ''NUM_PROCESS_DEFS'' { " " ''PROCESS_DEF'' }
+
: ''FUNCTION'' is the current function name.
  
; Description : Define new process model elements. Multiple processes can be defined simultaneously with this event.  
+
: ''ADDRESS'' is the current address.
  
<b>Arguments</b>
+
: ''LINE'' is the current line number.
  
: ''PARENT_ID'' is  the ID of the parent job of this processs.
+
=== SUSPEND_BREAKPOINT ===
  
: ''NUM_PROCESS_DEFS'' is the number of process definitions contained in this event.
+
<b>Message Format</b>
  
: ''PROCESS_DEF'' represents the definition of a range of processes and associated attributes.
+
''SUSPEND_BREAKPOINT_EVENT'' &rArr; "0071:''TID'':''NUM_ARGS''" " " ''BITMAP'' " " "0" " "
 +
                            ''BREAKPOINT_ID'' " " ''THREAD_ID''  " " ''DEPTH'' " " ''VAR_LENGTH'' { " " ''VAR_NAME'' }
  
A ''PROCESS_DEF'' is formatted as follows:
+
; Description : Indicates that the process has suspended as a result of hitting a breakpoint.
  
''PROCESS_DEF'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
+
<b>Arguments</b>
 +
 
 +
: ''BITMAP'' specifies the processes that generated this event.
 +
 
 +
: ''BREAKPOINT_ID'' is the ID of the breakpoint that caused the event.
  
where:
+
: ''THREAD_ID'' is the ID of the thread.
  
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
+
: ''DEPTH'' is the depth of the thread's stack frame.
  
: ''NUM_ATTRS'' is the number of attributes associated with this process definition.
+
: ''VAR_LENGTH'' is the number of variable names to follow.
  
: ''ATTR'' is an attribute that will be set for each newly created process.
+
: ''VAR_NAME'' is the name of a variable who's value has changed.
  
=== NEW_QUEUE ===
+
=== SUSPEND_INTERRUPT ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''NEW_QUEUE_EVENT'' &rArr; "00E0:''TID'':''NUM_ARGS''" " " ''PARENT_ID'' " " ''NUM_QUEUE_DEFS'' { " " ''QUEUE_DEF'' }
+
  ''SUSPEND_INTERRUPT_EVENT'' &rArr; "0071:''TID'':''NUM_ARGS''" " " ''BITMAP'' " " "3" " "
 +
                            ''FRAME_LEVEL'' " " ''FILE'' " " ''FUNCTION'' " " ''ADDRESS'' " " ''LINE'' " "
 +
                            ''THREAD_ID'' " " ''DEPTH''  " " ''VAR_LENGTH'' { " " ''VAR_NAME'' }  
  
; Description : Define new queue model elements. Multiple queues can be defined simultaneously with this event.  
+
; Description : Indicates that the process has suspended as a result of a user interrupt.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''PARENT_ID'' is the ID of the parent resource manager of this queue.
+
: ''BITMAP'' specifies the processes that generated this event.
  
: ''NUM_QUEUE_DEFS'' is the number of queue definitions contained in this event.
+
: ''FRAME_LEVEL'' is the level of the thread's stack frame.
  
: ''QUEUE_DEF'' represents the definition of a range of queues and associated attributes.
+
: ''FILE'' is the current file name.
  
A ''QUEUE_DEF'' is formatted as follows:
+
: ''FUNCTION'' is the current function name.
  
''QUEUE_DEF'' &rArr; ''ID_RANGE'' " " ''NUM_ATTRS'' { " " ''ATTR'' }
+
: ''ADDRESS'' is the current address.
  
where:
+
: ''LINE'' is the current line number.
  
: ''ID_RANGE'' is a range of ID's in [[#Range Set Notation|Range Set Notation]]
+
: ''THREAD_ID'' is the ID of the thread.
  
: ''NUM_ATTRS'' is the number of attributes associated with this queue definition.
+
: ''DEPTH'' is the depth of the thread's stack frame.
  
: ''ATTR'' is an attribute that will be set for each newly created queue.
+
: ''VAR_LENGTH'' is the number of variable names to follow.
  
=== REMOVE_ALL ===
+
: ''VAR_NAME'' is the name of a variable who's value has changed.
 +
 
 +
=== SUSPEND_SIGNAL ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''REMOVE_ALL_EVENT'' &rArr; "00F0:''TID'':00000000"
+
  ''SUSPEND_SIGNAL_EVENT'' &rArr; "0071:''TID'':''NUM_ARGS''" " " ''BITMAP'' " " "1" " "
 +
                        ''NAME'' " " ''STOP'' " " ''PRINT'' " " ''PASS'' " " ''DESCRIPTION'' " "
 +
                        ''FRAME_LEVEL'' " " ''FILE'' " " ''FUNCTION'' " " ''ADDRESS'' " " ''LINE'' " "
 +
                        ''THREAD_ID'' " " ''DEPTH''  " " ''VAR_LENGTH'' { " " ''VAR_NAME'' }
  
; Description : Remove all model elements know by the RMS for this session.
+
; Description : Indicates that the process has suspended as a result of receiving a signal.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: none
+
: ''BITMAP'' specifies the processes that generated this event.
  
=== REMOVE_JOB ===
+
: ''NAME'' is the name of the signal.
  
<b>Message Format</b>
+
: ''STOP'' indicates if this signal will cause the process to stop.
  
''REMOVE_JOB_EVENT'' &rArr; "00F1:''TID'':00000001" " " ''ID_RANGE''
+
: ''PRINT'' indicates if this signal will cause a message to be printed.
  
; Description : Remove job model elements from the model. Multiple jobs can be remove simultaneously with this event. All children of the jobs will also be removed from the model.
+
: ''PASS'' indicates that this signal is passed to the target process.
  
<b>Arguments</b>
+
: ''DESCRIPTION'' is a description of the signal.
 +
 
 +
: ''FRAME_LEVEL'' is the level of the thread's stack frame.
 +
 
 +
: ''FILE'' is the current file name.
 +
 
 +
: ''FUNCTION'' is the current function name.
 +
 
 +
: ''ADDRESS'' is the current address.
 +
 
 +
: ''LINE'' is the current line number.
 +
 
 +
: ''THREAD_ID'' is the ID of the thread.
 +
 
 +
: ''DEPTH'' is the depth of the thread's stack frame.
 +
 
 +
: ''VAR_LENGTH'' is the number of variable names to follow.
  
: ''ID_RANGE'' is a range of ID's to be removed in [[#Range Set Notation|Range Set Notation]]
+
: ''VAR_NAME'' is the name of a variable who's value has changed.
  
=== REMOVE_MACHINE ===
+
=== SUSPEND_STEP ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''REMOVE_MACHINE_EVENT'' &rArr; "00F2:''TID'':00000001" " " ''ID_RANGE''
+
  ''SUSPEND_STEP_EVENT'' &rArr; "0071:''TID'':''NUM_ARGS''" " " ''BITMAP'' " " "2" " "
 +
                      ''FRAME_LEVEL'' " " ''FILE'' " " ''FUNCTION'' " " ''ADDRESS'' " " ''LINE'' " "
 +
                      ''THREAD_ID'' " " ''DEPTH''  " " ''VAR_LENGTH'' { " " ''VAR_NAME'' }
  
; Description : Remove machine model elements from the model. Multiple machines can be remove simultaneously with this event. All children of the machines will also be removed from the model.
+
; Description : Indicates that the process has suspended as a result of a completing a single step.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''ID_RANGE'' is a range of ID's to be removed in [[#Range Set Notation|Range Set Notation]]
+
: ''BITMAP'' specifies the processes that generated this event.
  
=== REMOVE_NODE ===
+
: ''FRAME_LEVEL'' is the level of the thread's stack frame.
 +
 
 +
: ''FILE'' is the current file name.
 +
 
 +
: ''FUNCTION'' is the current function name.
 +
 
 +
: ''ADDRESS'' is the current address.
 +
 
 +
: ''LINE'' is the current line number.
 +
 
 +
: ''THREAD_ID'' is the ID of the thread.
 +
 
 +
: ''DEPTH'' is the depth of the thread's stack frame.
 +
 
 +
: ''VAR_LENGTH'' is the number of variable names to follow.
 +
 
 +
: ''VAR_NAME'' is the name of a variable who's value has changed.
 +
 
 +
=== THREAD_INFO ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''REMOVE_NODE_EVENT'' &rArr; "00F3:''TID'':00000001" " " ''ID_RANGE''
+
  ''THREAD_INFO_EVENT'' &rArr; "0072:''TID'':''NUM_ARGS''" " " ''BITMAP'' " "
 +
                      ''CURR_THREAD_ID'' " " ''NUM_THREADS'' { " " ''THREAD_ID'' }
  
; Description : Remove node model elements from the model. Multiple nodes can be remove simultaneously with this event. All children of the nodes will also be removed from the model.
+
; Description : Provides a list of the threads in the current process.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''ID_RANGE'' is a range of ID's to be removed in [[#Range Set Notation|Range Set Notation]]
+
: ''BITMAP'' specifies the processes that generated this event.
  
=== REMOVE_PROCESS ===
+
: ''CURR_THREAD_ID'' is the ID of the current thread.
 +
 
 +
: ''NUM_THREADS'' is the number of threads in the list.
 +
 
 +
: ''THREAD_ID'' is the ID of each thread.
 +
 
 +
=== THREAD_SELECT ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''REMOVE_PROCESS_EVENT'' &rArr; "00F4:''TID'':00000001" " " ''ID_RANGE''
+
  ''THREAD_SELECT_EVENT'' &rArr; "0073:''TID'':''NUM_ARGS''" " " ''BITMAP'' " "
 +
                        ''THREAD_ID'' " " ''FRAME_LEVEL''  " " ''FILE'' " " ''FUNCTION'' " " ''ADDRESS'' " " ''LINE''  
  
; Description : Remove process model elements from the model. Multiple processes can be remove simultaneously with this event.
+
; Description : Information about a selected thread.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''ID_RANGE'' is a range of ID's to be removed in [[#Range Set Notation|Range Set Notation]]
+
: ''BITMAP'' specifies the processes that generated this event.
  
=== REMOVE_QUEUE ===
+
: ''THREAD_ID'' is the ID of the thread.
 +
 
 +
: ''FRAME_LEVEL'' is the level of the thread's stack frame.
 +
 
 +
: ''FILE'' is the current file name.
 +
 
 +
: ''FUNCTION'' is the current function name.
 +
 
 +
: ''ADDRESS'' is the current address.
 +
 
 +
: ''LINE'' is the current line number.
 +
 
 +
=== VARIABLES ===
  
 
<b>Message Format</b>
 
<b>Message Format</b>
  
  ''REMOVE_QUEUE_EVENT'' &rArr; "00F5:''TID'':00000001" " " ''ID_RANGE''
+
  ''VARIABLES_EVENT'' &rArr; "006C:''TID'':''NUM_ARGS''" " " ''BITMAP'' " " ''VAR_LENGTH'' { " " ''VAR_NAME'' }
  
; Description : Remove queue model elements from the model. Multiple queues can be remove simultaneously with this event. All children of the queues will also be removed from the model.
+
; Description : Indicates that the process has suspended as a result of a completing a single step.
  
 
<b>Arguments</b>
 
<b>Arguments</b>
  
: ''ID_RANGE'' is a range of ID's to be removed in [[#Range Set Notation|Range Set Notation]]
+
: ''BITMAP'' specifies the processes that generated this event.
 +
 
 +
: ''VAR_LENGTH'' is the number of variable names to follow.
 +
 
 +
: ''VAR_NAME'' is the name of a variable.

Latest revision as of 22:42, 13 May 2008

Overview

This document describes the debugger proxy communication protocol used by the PTP debugger. This protocol is used to communicate between the debugger front-end in Eclipse, and a debug server running on a target system. The primary purpose of the protocol is for controlling application processes for debugging purposes.

Terminiology

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119].

"PTP debugger" refers collectively to the Java plugins and external components that implement the Eclipse parallel debugger.

"Front-end" refers to the debug model, user interface and parallel debug interface (PDI) in Eclipse.

"Debug server" (or just "server") refers to an external (from Eclipse) component that interacts with the target application being debugged. In the case of the SDM, the "server" is actually made up of many separate processes.

Protocol Format

The communication protocol used between the front-end and the debug server is a simple text-based asynchronous command/event protocol. The front-end sends one or more commands to the server, which in turn will generate events that are returned to the front-end. One command may generate multiple events, but an event is always associated with a particular command. A command is not completed until either a corresponding event is received.

Transaction IDs

Transaction IDs (TIDs) are numbers that are used to match commands and events. Since one command may generate multiple events, TIDs are essential in order to determine which command generated an event. This means that every event MUST have a TID that matches a corresponding command.

TIDs are only unique for uncompleted commands, not necessarily for the whole session.

Servers SHOULD assume that a particular TID MAY be reused.

Servers SHOULD NOT assume anything about the numbering or ordering of TIDs.

Any events received with an invalid TID (i.e. with no corresponding command) SHALL be discarded.

Bitmaps

Bitmaps are key to communcation between the front-end and the server. The protocol assumes that the debugger is controlling a multi-process application. Each process in the application is identified by a number in the interval [0, N-1], where N is the total number of processes. Each bit in the bitmap corresponds to one of the processes being debugged. Process n | 0 <= n < N corresponds to the bit with value 2^n in the bitmap. Any number of bits can be set in a bitmap.

For example, processes 5,7,9-15 would be represented by the bitmap (assuming the right-most bit is 2^0):

1 1 1 1 1 1 1 0 1 0 1 0 0 0 0 0

Bitmaps are transmitted as a hex character strings, so the above bitmap would actually be represented by the string FEA0.

Bitmaps are used in both commands and events. When a debug command is sent, it includes a bitmap specifying which processes the command is intended for. When an event is received, it contains a bitmap indicating which processes generated the event.

Message Format

Commands and events consist of sequences of ASCII characters formatted into a message. A message is transmitted in the following format:

MESSAGELENGTH " " COMMAND_OR_EVENT

LENGTH and COMMAND_OR_EVENT are separated by a space (hex 20). The LENGTH is the length of the COMMAND_OR_EVENT portion of the message including the space. COMMAND_OR_EVENT is the actual text of the command or event.

COMMAND_OR_EVENTCOMMAND | EVENT

The COMMAND_OR_EVENT portion of the message contains a header part followed by a sequence of arguments separated by spaces. Each argument is a string formatted using the String Format described below. The command format is described in more detail in the Commands section. The event format is described in more detail in the Events section.

String Format

Strings are transmitted using the following format:

STRINGLENGTH ":" CHARACTERS

where LENGTH is a fixed length 8 digit hexadecimal representation of the length of the string, ':' is a colon character (hex 3A), and CHARACTERS are the actual ASCII characters in the string. No string terminating character (e.g. NULL) is ever transmitted.

For example, the string "A String" would be formatted as:

00000008:A String

A zero length string would be formatted as:

00000000:

Commands

Commands are formatted as simple ASCII text strings. A command consists of a header and a body, separated by a space (hex 20), as follows:

COMMANDCOMMAND_HEADER " " COMMAND_BODY

The command header consists of three fixed length hexadecimal numbers separated by colons (hex 3A), so it is itself fixed length. The format of the header is:

COMMAND_HEADERCOMMAND_ID ":" TID ":" NUM_ARGS

where

COMMAND_ID is a 4 digit hexadecimal number containing the command to be performed
TID is an 8 digit hexadecimal number containing the transaction ID assigned to this command
NUM_ARGS is an 8 digit hexadecimal number containing the number of space separated elements in the command body

The command body consists of NUM_ARGS strings separated by spaces.

COMMAND_BODYSTRING { " " STRING }

The following sections describe the currently defined commands.

BREAKPOINT_AFTER

Message Format

BREAKPOINT_AFTER_COMMAND ⇒ "0008:TID:00000003" " " BITMAP " " BREAKPOINT_ID " " COUNT
Description 
Causes breakpoint specified by BREAKPOINT_ID to be ignored for COUNT hits.

Arguments

BITMAP specifies the processes this command applies to.
BREAKPOINT_ID is the ID of the breakpoint.
COUNT is the number of times the breakpoint will be ignored.
Events 
OK, ERROR

BREAKPOINT_CONDITION

Message Format

BREAKPOINT_CONDITION_COMMAND ⇒ "0007:TID:00000003" " " BITMAP " " BREAKPOINT_ID " " EXPRESSION
Description 
Causes the breakpoint specified by BREAKPOINT_ID to only trigger if the expression specified by EXPRESSION evaluates to true.

Arguments

BITMAP specifies the processes this command applies to.
BREAKPOINT_ID is the ID of the breakpoint.
EXPRESSION is an expression that will be evaluated to determine if the breakpoint event should be triggered.
Events 
OK, ERROR

BREAKPOINT_DELETE

Message Format

BREAKPOINT_DELETE_COMMAND ⇒ "0004:TID:00000002" " " BITMAP " " BREAKPOINT_ID
Description 
Remove a breakpoint from the target processes.

Arguments

BITMAP specifies the processes this command applies to.
BREAKPOINT_ID is the ID of the breakpoint to delete.
Events 
OK, ERROR

BREAKPOINT_DISABLE

Message Format

BREAKPOINT_DISABLE_COMMAND ⇒ "0006:TID:00000002" " " BITMAP " " BREAKPOINT_ID
Description 
Disable a breakpoint in the target processes. This prevents the breakpoint from firing, but does not remove it.

Arguments

BITMAP specifies the processes this command applies to.
BREAKPOINT_ID is the ID of the breakpoint to disable.
Events 
OK, ERROR

BREAKPOINT_ENABLE

Message Format

BREAKPOINT_ENABLE_COMMAND ⇒ "0005:TID:00000002" " " BITMAP " " BREAKPOINT_ID
Description 
Enable a breakpoint that has been disabled in the target processes.

Arguments

BITMAP specifies the processes this command applies to.
BREAKPOINT_ID is the ID of the breakpoint to enable.
Events 
OK, ERROR

BREAKPOINT_SET_FUNCTION

Message Format

BREAKPOINT_SET_FUNCTION_COMMAND ⇒ "0003:TID:00000009" " " BITMAP " " BREAKPOINT_ID " " 
                                    IS_TEMPORARY " " IS_HARDWARE " " FILE " " FUNCTION " " CONDITION " " 
                                    IGNORE_COUNT " " THREAD_ID
Description 
Set a breakpoint on the function FUNCTION in source file FILE.

Arguments

BITMAP specifies the processes this command applies to.
BREAKPOINT_ID is the ID used to reference this breakpoint.
IS_TEMPORARY is a flag to indicate the breakpoint is temporary.
IS_HARDWARE is a flag indicating that a hardware breakpoint should be set.
FILE is the file name of the source file containing the function.
FUNCTION is the name of the function on which the breakpoint will be set.
CONDITION is a conditional expression.
IGNORE_COUNT is an ignore count.
THREAD_ID is not currently used.
Events 
BREAKPOINT_SET, ERROR

BREAKPOINT_SET_LINE

Message Format

BREAKPOINT_SET_LINE_COMMAND ⇒ "0002:TID:00000009" " " BITMAP " " BREAKPOINT_ID " " 
                               IS_TEMPORARY " " IS_HARDWARE " " FILE " " LINE " " CONDITION " " 
                               IGNORE_COUNT " " THREAD_ID
Description 
Set a breakpoint at line LINE of source file FILE.

Arguments

BITMAP specifies the processes this command applies to.
BREAKPOINT_ID is the ID used to reference this breakpoint.
IS_TEMPORARY is a flag to indicate the breakpoint is temporary.
IS_HARDWARE is a flag indicating that a hardware breakpoint should be set.
FILE is the file name of the source file containing the function.
LINE is the line number on which the breakpoint will be set.
CONDITION is a conditional expression.
IGNORE_COUNT is an ignore count.
THREAD_ID is not currently used.
Events 
BREAKPOINT_SET, ERROR

CLI

Message Format

CLI_COMMAND ⇒ "001C:TID:00000002" " " BITMAP " " COMMAND
Description 
Execute an arbitrary backend-specific command.

Arguments

BITMAP specifies the processes this command applies to.
COMMAND is an arbitrary command that will be passed directly to the backend debug engine.
Events 
OK, ERROR

DATA_EXPRESSION

Message Format

DATA_EXPRESSION_COMMAND ⇒ "0010:TID:00000002" " " BITMAP " " EXPRESSION
Description 
Evaluate an arbitrary expression in the target processes.

Arguments

BITMAP specifies the processes this command applies to.
EXPRESSION is the expression to evaluate.
Events 
DATA, ERROR

DATA_PARTIAL_AIF

Message Format

DATA_PARTIAL_AIF_COMMAND ⇒ "001E:TID:00000005" " " BITMAP " " EXPRESSION " " 
                            NAME " " LIST_CHILDREN " " EXPRESS
Description 
Evaluate an expression and return a partial value. This is used if the resulting value is very large (e.g. an array).

Arguments

BITMAP specifies the processes this command applies to.
EXPRESSION is the expression to evaluate.
NAME specifies a name to use to refer to the expression. If the named expression already exists, this expression will be used instead of evaluating EXPRESSION.
LIST_CHILDREN specifies that full type traversal should be performed.
EXPRESS indicates that the minimum amount of information should be returned.
Events 
DATA_PARTIAL, ERROR

DATA_READ_MEMORY

Message Format

DATA_READ_MEMORY_COMMAND ⇒ "0018:TID:NUM_ARGS" " " BITMAP " " OFFSET " " 
                            ADDRESS " " FORMAT " " WORD_SIZE " " ROWS " " COLS " " [ AS_CHAR ]
Description 
Read a block of memory from the target processes.

Arguments

BITMAP specifies the processes this command applies to.
OFFSET is an offset to add to ADDRESS before fetching memory
ADDRESS is an expression specifying the address of the first memory word to read.
FORMAT is the format used to print the memory words. See Output Formats
WORD_SIZE is the size of each memory word in bytes.
ROWS is the number of rows in the output table.
COLS is the number of columns in the output table.
AS_CHAR optionally specifies that each row should include an ASCII dump with this character as a padding character.
Events 
DATA_MEMORY, ERROR

DATA_WRITE_MEMORY

Message Format

DATA_WRITE_MEMORY_COMMAND ⇒ "00019:TID:00000006" " " BITMAP " " OFFSET " " 
                              ADDRESS " " FORMAT " " WORD_SIZE " " VALUE
Description 
Write a value into a block of memory to the target processes.

Arguments

BITMAP specifies the processes this command applies to.
OFFSET is an offset to add to ADDRESS before writing memory
ADDRESS is an expression specifying the address of the first memory word to read.
FORMAT is not used.
WORD_SIZE is the size of each memory word in bytes.
VALUE is the value to be written into each memory location.
Events 
OK, ERROR

DATA_TYPE

Message Format

DATA_TYPE_COMMAND ⇒ "0011:TID:00000002" " " BITMAP " " EXPRESSION
Description 
Get the result type after evaluating the expression specified by EXPRESSION.

Arguments

BITMAP specifies the processes this command applies to.
EXPRESSION is the expression to evaluate.
Events 
DATA_TYPE, ERROR

EXEC_GO

Message Format

EXEC_GO_COMMAND ⇒ "000A:TID:00000001" " " BITMAP
Description 
Start or resume execution of the target processes.

Arguments

BITMAP specifies the processes this command applies to.
Events 
EXIT_NORMAL, EXIT_SIGNAL, SUSPEND_BREAKPOINT, SUSPEND_SIGNAL, ERROR

EXEC_INTERRUPT

Message Format

EXEC_INTERRUPT_COMMAND ⇒ "000D:TID:00000001" " " BITMAP
Description 
Suspend execution of the target processes. This command can be sent before a previous command has completed.

Arguments

BITMAP specifies the processes this command applies to.
Events 
SUSPEND_INTERRUPT, ERROR

EXEC_STEP

Message Format

EXEC_STEP_COMMAND ⇒ "000B:TID:00000003" " " BITMAP " " COUNT " " TYPE
Description 
Return the stack frame depth of the target.

Arguments

BITMAP specifies the processes this command applies to.
COUNT is a repeat count.
TYPE is the type of the command. Options are "0" for step over, "1" for step into, and "2" for step return.
Events 
SUSPEND_STEP, ERROR

EXEC_TERMINATE

Message Format

TERMINATE_COMMAND ⇒ "000C:TID:00000001" " " BITMAP
Description 
Terminate the target processes by sending a signal. The command can be sent before the previous command is completed.

Arguments

BITMAP specifies the processes this command applies to.
Events 
EXIT_SIGNAL, ERROR

GET_ARGUMENTS

Message Format

GET_ARGUMENTS_COMMAND ⇒ "0013:TID:00000003" " " BITMAP " " LOW " " HIGH
Description 
List the arguments from the stack frames between LOW and HIGH inclusively.

Arguments

BITMAP specifies the processes this command applies to.
LOW specifies the low stack frame number.
HIGH specifies the high stack frame number.
Events 
ARGUMENTS, ERROR

GET_SIGNALS

Message Format

GET_SIGNALS_COMMAND ⇒ "001A:TID:NUM_ARGS" " " BITMAP [ " " NAME ]
Description 
List information about how the debugger handles signals. If a signal name is provided, then only information about that signal will be listed.

Arguments

BITMAP specifies the processes this command applies to.
NAME optionally specifies the signal.
Events 
SIGNALS, ERROR

GET_STACK_DEPTH

Message Format

GET_STACK_DEPTH_COMMAND ⇒ "0017:TID:00000001" " " BITMAP
Description 
Return the stack frame depth of the target.

Arguments

BITMAP specifies the processes this command applies to.
Events 
STACK_DEPTH, ERROR

GET_STACK_FRAMES

Message Format

LIST_STACK_FRAMES_COMMAND ⇒ "000E:TID:00000003" " " BITMAP " " LOW " " HIGH
Description 
List the stack frames between LOW and HIGH inclusive.

Arguments

BITMAP specifies the processes this command applies to.
LOW is the low stack frame number.
HIGH is the high stack frame number.
Events 
STACK_FRAMES, ERROR

GET_THREADS

Message Format

GET_THREADS_COMMAND ⇒ "0015:TID:00000001" " " BITMAP
Description 
Obtain information about all threads in the current process.

Arguments

BITMAP specifies the processes this command applies to.
Events 
THREAD_INFO, ERROR

GET_VARIABLES_GLOBAL

Message Format

GET_VARIABLES_GLOBAL_COMMAND ⇒ "0014:TID:00000001" " " BITMAP
Description 
List all global (non-static) variables in the process.

Arguments

BITMAP specifies the processes this command applies to.
Events 
VARIABLES, ERROR

GET_VARIABLES_LOCAL

Message Format

GET_VARIABLES_LOCAL_COMMAND ⇒ "0012:TID:00000001" " " BITMAP
Description 
List all local variables in current stack frame of the current process.

Arguments

BITMAP specifies the processes this command applies to.
Events 
VARIABLES, ERROR

SET_CURRENT_STACK_FRAME

Message Format

SET_CURRENT_STACK_FRAME_COMMAND ⇒ "000F:TID:00000002" " " BITMAP " " LEVEL
Description 
Set the current stack frames to LEVEL.

Arguments

BITMAP specifies the processes this command applies to.
LEVEL is the stack frame number.
Events 
OK, ERROR

SET_THREAD

Message Format

SET_THREAD_COMMAND ⇒ "0016:TID:00000002" " " BITMAP " " THREAD_ID
Description 
Makes the thread specified by THREAD_ID the current thread.

Arguments

BITMAP specifies the processes this command applies to.
THREAD_ID is the thread number.
Events 
THREAD_SELECT, ERROR

SET_WATCHPOINT

Message Format

SET_WATCHPOINT_COMMAND ⇒ "0009:TID:00000006" " " BITMAP " " BREAKPOINT_ID " " 
                           EXPRESSION " " IS_ACCESS " " IS_READ  " " IGNORE_COUNT
Description 
Set a watchpoint on the expression EXPRESSION.

Arguments

BITMAP specifies the processes this command applies to.
BREAKPOINT_ID is the ID used to reference this breakpoint.
EXPRESSION is the expression on which the watchpoint will be set.
IS_ACCESS is a flag indicating that the watchpoint should trigger on any kind of access.
IS_READ is a flag indicating that the watchpoint should trigger only on read accesses.
IGNORE_COUNT is not used.
Events 
BREAKPOINT_SET, ERROR

START_SESSION

Message Format

START_SESSION_COMMAND ⇒ "0001:TID:NUM_ARGS" " " PROGRAM " " PATH " " DIRECTORY { "  " ARGUMENT }
Description 
Start the debug session. Note that this command does not take a bitmap; it is assumed to be global.

Arguments

PROGRAM is the name of the executable being debugged.
PATH is the path to the executable.
DIRECTORY is the current working directory.
ARGUMENT is an argument that will be passed to the application program.
Events 
OK, ERROR

Events

Events are used by the server to communicate the results of commands or other information back to the front-end. As mentioned previously, each event MUST contain a tid of a corresponding command.

Events, like commands, are formatted as simple ASCII text strings. An event consists of a header and a body, separated by a space (hex 20), as follows:

EVENTEVENT_HEADER " " EVENT_BODY

The event header consists of three fixed length hexadecimal numbers separated by colons (hex 3A), so it is itself fixed length. The format of the header is:

EVENT_HEADEREVENT_ID ":" TID ":" NUM_ARGS

where

EVENT_ID is a 4 digit hexadecimal number representing the type of event
TID is an 8 digit hexadecimal number containing the transaction ID of the command that generated this event
NUM_ARGS is an 8 digit hexadecimal number containing the number of space separated elements in the event body

The event body consists of NUM_ARGS strings separated by spaces. Debug events always have a bitmap as the first argument in the body. This bitmap specifies the processes that generated the event.

EVENT_BODYBITMAP { " " STRING }

The following sections describe the currently defined events.

ARGUMENTS

Message Format

ARGUMENTS_EVENT ⇒ "006D:TID:NUM_ARGS" " " BITMAP { " " NAME }
Description 
Provides a list of arguments.

Arguments

BITMAP specifies the processes that generated this event.
NAME is the name of an argument.

BREAKPOINT_SET

Message Format

BREAKPOINT_SET_EVENT ⇒ "0068:TID:NUM_ARGS" " " BITMAP " " BREAKPOINT_ID " " 
                        BPID " " IGNORE " " SPECIAL " " DELETED " " TYPE " " 
                        FILE " " FUNCTION " " ADDRESS " " LINE " " HIT_COUNT 
Description 
Indicates that a breakpoint was successfully set.

Arguments

BITMAP specifies the processes that generated this event.
BREAKPOINT_ID the ID of the breakpoint that was set.

The remainder of the event contains the status of the breakpoint:

BPID the ID of the breakpoint
IGNORE a field indicating that the breakpoint will be ignored.
SPECIAL a field indicating that the breakpoint is special.
DELETED a field indicating that the breakpoint has been deleted.
TYPE a field giving the type of breakpoint.
FILE the source file in which the breakpoint is set.
FUNCTION the function on which the breakpoint is set.
ADDRESS the address of the breakpoint.
LINE the line on which the breakpoint is set.
HIT_COUNT the number of times that the breakpoint has been triggered.

DATA

Message Format

DATA_EVENT ⇒ "006A:TID:00000004" " " BITMAP " " AIF_TYPE " " AIF_DATA " " TYPE
Description 
An event containing the value of a variable or expression in AIF format.

Arguments

BITMAP specifies the processes that generated this event.
AIF_TYPE is the AIF type of the value.
AIF_DATA is the AIF data of the value.
TYPE is a language-specific type description.

DATA_PARTIAL

Message Format

DATA_PARTIAL_EVENT ⇒ "0079:TID:00000004" " " BITMAP " " AIF_TYPE " " AIF_DATA " " TYPE
Description 
An event containing the partial value of a variable or expression in AIF format. This is used to return partial values when the data structure is very large (e.g. an array).

Arguments

BITMAP specifies the processes that generated this event.
AIF_TYPE is the AIF type of the value.
AIF_DATA is the AIF data of the value.
TYPE is a language-specific type description.

DATA_VALUE

Message Format

DATA_VALUE_EVENT ⇒ "0078:TID:00000002" " " BITMAP " " VALUE
Description 
An event containing the string representation of the value of a variable or expression.

Arguments

BITMAP specifies the processes that generated this event.
VALUE is the value.

DATA_MEMORY

Message Format

DATA_MEMORY_EVENT ⇒ "0075:TID:NUM_ARGS" " " BITMAP " " 
                     ADDRESS " " NEXT_ROW " " PREV_ROW " " NEXT_PAGE " " PREV_PAGE " " 
                     BYTES " " LENGTH { " " MEM_ADDRESS " " ASCII " " 
                     DATA_LENGTH { " " DATA_VALUE }
Description 
An event containing the contents of memory.

Arguments

BITMAP specifies the processes that generated this event.
ADDRESS is the starting address of the memory data.
NEXT_ROW is the address of the next row in the table.
PREV_ROW is the address of the previous row in the table.
NEXT_PAGE is the address of the next page in the table.
PREV_PAGE is the address of the previous page in the table.
BYTES is the total number of bytes (rows * cols * word-size).
LENGTH is the number of memory addresses returned.
MEM_ADDRESS is the start address of the memory.
ASCII is an ASCII representation of the data.
DATA_LENGTH is the number of data values.
DATA_VALUE is data from a memory location.

DATA_TYPE

Message Format

DATA_TYPE_EVENT ⇒ "006B:TID:00000002" " " BITMAP " " VALUE
Description 
An event containing the string representation of the type of a variable or expression.

Arguments

BITMAP specifies the processes that generated this event.
TYPE is the type.

ERROR

Message Format

ERROR_EVENT ⇒ "0070:TID:00000003" " " BITMAP ERROR_CODE_ATTRIBUTE " " ERROR_MSG_ATTRIBUTE
Description 
Indicates that the command with corresponding TID has not been completed successfully. The reason for the failure are provided in the attributes.

Arguments

BITMAP specifies the processes that generated this event.
ERROR_CODE_ATTRIBUTE is an attribute containing the error code
ERROR_MSG_ATTRIBUTE is an attribute containing a textual representation of the error

EXIT_NORMAL

Message Format

EXIT_NORMAL_EVENT ⇒ "0078:TID:00000003" " " BITMAP " " "0" " " EXIT_CODE
Description 
An event indicating that a process has exited normally.

Arguments

BITMAP specifies the processes that generated this event.
EXIT_CODE is the exit code of the process.

EXIT_SIGNAL

Message Format

EXIT_SIGNAL_EVENT ⇒ "0078:TID:00000007" " " BITMAP " " "1" " " 
                     NAME " " STOP " " PRINT " " PASS " " DESCRIPTION
Description 
An event indicating that a process has exited because it received a signal.

Arguments

BITMAP specifies the processes that generated this event.
NAME is the name of the signal that cause the process to exit.
STOP can be used to indicate if this signal will cause the process to stop.
PRINT can be used to indicate if this signal will cause a message to be printed.
PASS can be used to indicate that this signal is passed to the target process.
DESCRIPTION is a description of the signal.

OK

Message Format

OK_EVENT ⇒ "006F:TID:00000001" " " BITMAP
Description 
Indicates that the command with corresponding TID has been completed successfully

Arguments

BITMAP specifies the processes that generated this event.

SIGNALS

Message Format

SIGNALS_EVENT ⇒ "0077:TID:NUM_ARGS" " " BITMAP " " 
                LENGTH { " " NAME  " " STOP " " PRINT " " PASS " " DESCRIPTION } 
Description 
Provide information on how signals are handled by the backend.

Arguments

BITMAP specifies the processes that generated this event.
LENGTH is the number of signals in the event.
NAME is the name of the signal.
STOP indicates if this signal will cause the process to stop.
PRINT indicates if this signal will cause a message to be printed.
PASS indicates that this signal is passed to the target process.
DESCRIPTION is a description of the signal.

STACK_DEPTH

Message Format

STACK_DEPTH_EVENT ⇒ "0074:TID:NUM_ARGS" " " BITMAP " " DEPTH
Description 
Provides the number of frames in the (current) stack.

Arguments

BITMAP specifies the processes that generated this event.
DEPTH is the stack depth.

STACK_FRAMES

Message Format

STACK_FRAMES_EVENT ⇒ "0069:TID:NUM_ARGS" " " BITMAP " " 
                      LENGTH { " " FRAME_LEVEL  " " FILE " " FUNCTION " " ADDRESS " " LINE }
Description 
Provides a list of stack frames.

Arguments

BITMAP specifies the processes that generated this event.
LENGTH is the number of stack frames in the event.
FRAME_LEVEL is the level of the thread's stack frame.
FILE is the current file name.
FUNCTION is the current function name.
ADDRESS is the current address.
LINE is the current line number.

SUSPEND_BREAKPOINT

Message Format

SUSPEND_BREAKPOINT_EVENT ⇒ "0071:TID:NUM_ARGS" " " BITMAP " " "0" " " 
                            BREAKPOINT_ID " " THREAD_ID  " " DEPTH " " VAR_LENGTH { " " VAR_NAME }
Description 
Indicates that the process has suspended as a result of hitting a breakpoint.

Arguments

BITMAP specifies the processes that generated this event.
BREAKPOINT_ID is the ID of the breakpoint that caused the event.
THREAD_ID is the ID of the thread.
DEPTH is the depth of the thread's stack frame.
VAR_LENGTH is the number of variable names to follow.
VAR_NAME is the name of a variable who's value has changed.

SUSPEND_INTERRUPT

Message Format

SUSPEND_INTERRUPT_EVENT ⇒ "0071:TID:NUM_ARGS" " " BITMAP " " "3" " " 
                            FRAME_LEVEL " " FILE " " FUNCTION " " ADDRESS " " LINE " " 
                            THREAD_ID " " DEPTH  " " VAR_LENGTH { " " VAR_NAME } 
Description 
Indicates that the process has suspended as a result of a user interrupt.

Arguments

BITMAP specifies the processes that generated this event.
FRAME_LEVEL is the level of the thread's stack frame.
FILE is the current file name.
FUNCTION is the current function name.
ADDRESS is the current address.
LINE is the current line number.
THREAD_ID is the ID of the thread.
DEPTH is the depth of the thread's stack frame.
VAR_LENGTH is the number of variable names to follow.
VAR_NAME is the name of a variable who's value has changed.

SUSPEND_SIGNAL

Message Format

SUSPEND_SIGNAL_EVENT ⇒ "0071:TID:NUM_ARGS" " " BITMAP " " "1" " " 
                        NAME " " STOP " " PRINT " " PASS " " DESCRIPTION " " 
                        FRAME_LEVEL " " FILE " " FUNCTION " " ADDRESS " " LINE " " 
                        THREAD_ID " " DEPTH  " " VAR_LENGTH { " " VAR_NAME } 
Description 
Indicates that the process has suspended as a result of receiving a signal.

Arguments

BITMAP specifies the processes that generated this event.
NAME is the name of the signal.
STOP indicates if this signal will cause the process to stop.
PRINT indicates if this signal will cause a message to be printed.
PASS indicates that this signal is passed to the target process.
DESCRIPTION is a description of the signal.
FRAME_LEVEL is the level of the thread's stack frame.
FILE is the current file name.
FUNCTION is the current function name.
ADDRESS is the current address.
LINE is the current line number.
THREAD_ID is the ID of the thread.
DEPTH is the depth of the thread's stack frame.
VAR_LENGTH is the number of variable names to follow.
VAR_NAME is the name of a variable who's value has changed.

SUSPEND_STEP

Message Format

SUSPEND_STEP_EVENT ⇒ "0071:TID:NUM_ARGS" " " BITMAP " " "2" " " 
                      FRAME_LEVEL " " FILE " " FUNCTION " " ADDRESS " " LINE " " 
                      THREAD_ID " " DEPTH  " " VAR_LENGTH { " " VAR_NAME } 
Description 
Indicates that the process has suspended as a result of a completing a single step.

Arguments

BITMAP specifies the processes that generated this event.
FRAME_LEVEL is the level of the thread's stack frame.
FILE is the current file name.
FUNCTION is the current function name.
ADDRESS is the current address.
LINE is the current line number.
THREAD_ID is the ID of the thread.
DEPTH is the depth of the thread's stack frame.
VAR_LENGTH is the number of variable names to follow.
VAR_NAME is the name of a variable who's value has changed.

THREAD_INFO

Message Format

THREAD_INFO_EVENT ⇒ "0072:TID:NUM_ARGS" " " BITMAP " " 
                     CURR_THREAD_ID " " NUM_THREADS { " " THREAD_ID }
Description 
Provides a list of the threads in the current process.

Arguments

BITMAP specifies the processes that generated this event.
CURR_THREAD_ID is the ID of the current thread.
NUM_THREADS is the number of threads in the list.
THREAD_ID is the ID of each thread.

THREAD_SELECT

Message Format

THREAD_SELECT_EVENT ⇒ "0073:TID:NUM_ARGS" " " BITMAP " " 
                       THREAD_ID " " FRAME_LEVEL  " " FILE " " FUNCTION " " ADDRESS " " LINE 
Description 
Information about a selected thread.

Arguments

BITMAP specifies the processes that generated this event.
THREAD_ID is the ID of the thread.
FRAME_LEVEL is the level of the thread's stack frame.
FILE is the current file name.
FUNCTION is the current function name.
ADDRESS is the current address.
LINE is the current line number.

VARIABLES

Message Format

VARIABLES_EVENT ⇒ "006C:TID:NUM_ARGS" " " BITMAP " " VAR_LENGTH { " " VAR_NAME } 
Description 
Indicates that the process has suspended as a result of a completing a single step.

Arguments

BITMAP specifies the processes that generated this event.
VAR_LENGTH is the number of variable names to follow.
VAR_NAME is the name of a variable.

Back to the top