ibm-information-center/dist/eclipse/plugins/i5OS.ic.apis_5.4.0.1/QTESBMDC.htm

3837 lines
106 KiB
HTML
Raw Normal View History

2024-04-02 14:02:31 +00:00
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Copyright" content="Copyright (c) 2006 by IBM Corporation">
<title>Submit Debug Command (QteSubmitDebugCommand) API</title>
<!-- Begin Header Records ========================================== -->
<!-- All rights reserved. Licensed Materials Property of IBM -->
<!-- US Government Users Restricted Rights -->
<!-- Use, duplication or disclosure restricted by -->
<!-- GSA ADP Schedule Contract with IBM Corp. -->
<!-- DEBUG1 SCRIPT A converted by B2H R4.1 (346) (CMS) by V2KEA304 -->
<!-- at RCHVMW2 on 29 Jan 1999 at 16:05:09 -->
<!-- Change History: -->
<!-- reason author date comment -->
<!-- P9933041 gettler 09/15/2000 Exception in EVAL Java StringF -->
<!-- D9778400 gettler 11/07/2000 Teraspace Pointer Support -->
<!-- D9878800 elliott 08/02/2001 Multiple job debug support -->
<!-- D9300900 campbell 06/18/2004 4-byte string formatting (:w) -->
<!-- D9300800 gettler 12/20/2004 Localvars support -->
<!-- GIF files included are: RBAFX637 through 645, 655, 660, and 661 -->
<!-- File Edited November 2001 -->
<!-- End Header Records -->
<link rel="stylesheet" type="text/css" href="../rzahg/ic.css">
</head>
<body>
<a name="Top_Of_Page"></a>
<!-- Java sync-link -->
<script language="Javascript" src="../rzahg/synch.js" type="text/javascript">
</script>
<h2>Submit Debug Command (QteSubmitDebugCommand) API</h2>
<div class="box" style="width: 60%;">
<br>
&nbsp;&nbsp;Required Parameter Group:<br>
<!-- iddvc RMBR -->
<br>
<table width="100%">
<tr>
<td align="center" valign="top" width="10%">1</td>
<td align="left" valign="top" width="50%">Receiver variable</td>
<td align="left" valign="top" width="20%">Output</td>
<td align="left" valign="top" width="20%">Char(*)</td>
</tr>
<tr>
<td align="center" valign="top">2</td>
<td align="left" valign="top">Length of receiver variable</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">3</td>
<td align="left" valign="top">View ID</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="left" valign="top">Input buffer</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(*)</td>
</tr>
<tr>
<td align="center" valign="top">5</td>
<td align="left" valign="top">Input buffer length</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">6</td>
<td align="left" valign="top">Compiler ID</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(20)</td>
</tr>
<tr>
<td align="center" valign="top">7</td>
<td align="left" valign="top">Error Code</td>
<td align="left" valign="top">I/O</td>
<td align="left" valign="top">Char(*)</td>
</tr>
</table>
<br>
&nbsp;&nbsp;Service Program Name: QTEDBGS<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Default Public Authority: *USE<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Threadsafe: No<br>
<!-- iddvc RMBR -->
<br>
</div>
<p>The Submit Debug Command (QteSubmitDebugCommand) API allows a client program
to issue debug language statements. Debug language statements permit client
programs to enter breakpoints, run one or more statements of the program under
investigation (step), and evaluate expressions. Watch conditions may also be
entered to cause a breakpoint when the contents at a specified storage location
are changed.</p>
<br>
<img src="delta.gif" alt="Start of change">
<h3>Authorities and Locks</h3>
<p>None.</p>
<br>
<img src="deltaend.gif" alt="End of change">
<h3>Required Parameter Group</h3>
<dl>
<dt><strong>Receiver variable</strong></dt>
<dd>OUTPUT; CHAR(*)
<p>The variable that is to receive the results of the Submit Debug Command API.
For more information on the structure of the receiver variable, see <a href=
"#TBLDLTB03">Variations in Receiver Variable Structure</a>.</p>
<p>The Submit Debug Command API may have more data to return than can be stored
in the receiver variable. The bytes available field, described in
Variations in Receiver Variable Structure, specifies how large
the receiver variable must be to contain the results for the Debug Language
statements submitted. If more data is available than the receiver variable can
contain, a larger buffer should be provided and the API should be reissued.</p>
</dd>
<dt><strong>Length of receiver variable</strong></dt>
<dd>INPUT; BINARY(4)
<p>The length of the receiver variable. If the length is larger than the size
of the receiver variable, the results may not be predictable. The minimum
length is 8 bytes.</p>
</dd>
<dt><strong>View ID</strong></dt>
<dd>INPUT; BINARY(4)
<p>An identifier of a view of a module whose operation is managed by the source
debugger. The view ID is returned as a result of issuing the Register Debug
View API. The view ID is used to find debug data associated with the
module.</p>
</dd>
<dt><strong>Input buffer</strong></dt>
<dd>INPUT; CHAR(*)
<p>The input variable that is passed to the Submit Debug Command API. The
information passed in the buffer is debug language statements.</p>
</dd>
<dt><strong>Input buffer length</strong></dt>
<dd>INPUT; BINARY(4)
<p>The length of the data provided in the input buffer.</p>
</dd>
<dt><strong>Compiler ID</strong></dt>
<dd>INPUT; CHAR(20)
<p>The compiler ID of the compiler that produced the module being debugged.
This information is used by the debug translator during expression evaluation.
The compiler ID is returned by the Retrieve Module Views
(QteRetrieveModuleViews) API.</p>
</dd>
<dt><strong>Error code</strong></dt>
<dd>I/O; CHAR(*)
<p>The structure in which to return error information. For the format of the
structure, see <a href="../apiref/error.htm#hdrerrcod">Error code parameter</a>.</p>
</dd>
</dl>
<br>
<h3>Receiver Variable Format</h3>
<p>The following table shows the structure of the receiver variable. For more
information on the fields contained in the table, see <a href="#HDRFIRST">Field
Descriptions</a>.</p>
<p><strong><a name="TBLDLTB02">Receiver Variable Structure</a></strong></p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Bytes returned</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Bytes available</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Entry count</td>
</tr>
<tr>
<td align="center" valign="top">12</td>
<td align="center" valign="top">C</td>
<td align="left" valign="top">CHAR(*)</td>
<td align="left" valign="top">Results array</td>
</tr>
<tr>
<td align="center" valign="top">&nbsp;</td>
<td align="center" valign="top">&nbsp;</td>
<td align="left" valign="top">CHAR(*)</td>
<td align="left" valign="top">String space</td>
</tr>
</table>
<br>
<br>
<h3><a name="HDRFIRST">Field Descriptions</a></h3>
<p><strong>Bytes available.</strong> The number of bytes of data available to
be returned. All available data is returned if enough space is provided.</p>
<p><strong>Bytes returned.</strong> The number of bytes of data returned.</p>
<p><strong>Entry count.</strong> The number of entries in the results array.
The value of the field is the number of entries in the results array. Each
entry occupies 12 bytes. Depending on the kind of information returned, values
in entries vary.</p>
<p><strong>Results array.</strong> The results of interpreting debug language
statements. This is an array of records having similar structures. Each record
in the array occupies 12 bytes. There can be up to three fields in each record.
Each field occupies 4 bytes and can be interpreted as an unsigned (nonnegative)
integer. The first field in a record is the result type field and is used to
select the remaining fields. Entries in the result record array fall into
several classes. <a href="#TBLDLTB03">Variations in Receiver Variable Structure</a>
depicts several formats of result records.</p>
<p>Statements are interpreted sequentially and the results of each statement
are placed in the order in which statements appear in the input buffer. The
evaluate statement can return many values if an array or a structure is
evaluated. The entry count field contains the number of entries in the results
array, and the structure of each entry is summarized in <a href="#TBLDLTB03">
Variations in Receiver Variable Structure</a>.</p>
<p><strong>String space.</strong> A sequence of strings. Each string is an
array of characters whose last character is a null character.</p>
<br>
<h3>Description of the Structure of the Receiver Variable</h3>
<p>Variations in Receiver Variable Structure illustrates
three possible variations in the structure of the receiver variable. The receiver
variable consists of the following structures:</p>
<ul>
<li>A header record<br>
This structure consists of three fields:<br>
<ul>
<li>Bytes returned
</li>
<li>Bytes available
</li>
<li>Entry count
</li>
</ul>
</li>
<li>A result array
</li>
<li>A string space</li>
</ul>
<table border width="80%">
<tr>
<th align="left" valign="top" colspan="4"><em><a name="TBLDLTB03">Variations
in Receiver Variable Structure</a></em></th>
</tr>
<tr>
<td align="left" valign="top">Header</td>
<td align="left" valign="top">Bytes Returned</td>
<td align="left" valign="top">Bytes Available</td>
<td align="left" valign="top">Entry Count</td>
</tr>
<tr>
<td align="left" valign="top" width="25%">Result array 1</td>
<td align="left" valign="top" width="25%">Result type</td>
<td align="left" valign="top" width="25%">&nbsp;</td>
<td align="left" valign="top" width="25%">&nbsp;</td>
</tr>
<tr>
<td align="left" valign="top">Result array 2</td>
<td align="left" valign="top">Result type</td>
<td align="left" valign="top">Count</td>
<td align="left" valign="top">&nbsp;</td>
</tr>
<tr>
<td align="left" valign="top">Result array 3</td>
<td align="left" valign="top">Result type</td>
<td align="left" valign="top">Offset</td>
<td align="left" valign="top">Length</td>
</tr>
<tr>
<td align="center" valign="top" colspan="4">String space</td>
</tr>
</table>
<p>Each row of Variations in Receiver Variable Structure occupies 12 bytes.
The row containing the headings describes the remainder of the receiver
variable. The number of bytes returned is assigned to that field.
The value of the bytes returned field is always less than or equal to the size
of the receiver variable. The number of bytes available may be greater than the
number returned. In that case, the client program should reissue the Submit
Debug Command API to obtain all data produced for the input debug language
statements. The entry count field in the first row indicates the number of
12-byte records, each beginning with a result type field, that follow.</p>
<p>Records beginning with a result type field have the following basic
formats.</p>
<ul>
<li>The first entry in the array shows a record containing only one field,
result type. Records having this structure acknowledge that a kind of debug
language statement was translated. An example of this kind of record is the
result record for a CLEAR PGM statement.<br>
<br>
</li>
<li>The second entry in the array shows a record containing a count field as
well as a result type field. The count field can serve two purposes:<br>
<br>
<ul>
<li>It can acknowledge that a debug language statement was properly translated
as in the case of the StepR result record.<br>
<br>
</li>
<li>It can enumerate the number of related records to follow as in the case of
the BreakR result record.<br>
<br>
</li>
</ul>
</li>
<li>The offset field contains the displacement from the start of the receiver
variable to the first byte of the character string. All character strings are
stored at the end of the receiver variable directly after the record entries.
Displacements are measured in bytes.
<p>The length field contains the number of characters in the character
string.</p>
<p>The last character of each string in the string space has an ordinal value
of zero. All characters in the string space occupy 8 bits. The length of a
string in the string space does not include the last character.</p>
<blockquote>
<p><strong>Note:</strong> The length field will always be set to 512, with each
of the 512 characters occupying 16 bits, for a string of type kStringF_E when
debugging a JAVA executable. This will occur even when the returned string has
a length of less than 512. The end of the returned string can be found by
locating the first unicode character in the string that has an ordinal value of
zero. As unicode, this character will occupy 16 bits.</p>
</blockquote>
</li>
<li>The last row of <a href="#TBLDLTB03">Variations in Receiver Variable Structure</a>
depicts an arbitrarily large string space containing character data. Names and
other text fields that are referred to in the result type fields shown in the
other rows of Variations in Receiver Variable Structure are stored in this area.</li>
</ul>
<br>
<h3>Results Array Entry Structure Summary</h3>
<p>The following tables describe each result record in detail. Each result
record contains up to three fields and always occupies 12 bytes. The first
field, the result type field, is used as an enumerated type. The result type
field determines the format of each result record.</p>
<p>Each of the following enumeration constants has both a symbolic name and an
ordinal value. The terms symbolic and ordinal refer to enumerations found in
programming languages. The symbolic value of an enumeration constant is the
symbol, usually a descriptive word that serves as a keyword for the programmer
(for example, StepR). The ordinal value of an enumeration constant is the
integer constant assigned, usually by the compiler, to the symbolic value. For
example, 1 is assigned for StepR.</p>
<br>
<h3>StepR (1)</h3>
<p>Record format StepR is returned as a result of evaluating a step
statement.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Step count</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">CHAR(4)</td>
<td align="left" valign="top">Reserved</td>
</tr>
</table>
<br>
<br>
<h3>BreakR (2)</h3>
<p>Record format BreakR contains the number of records returned for a break
statement.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Break results count</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">CHAR(4)</td>
<td align="left" valign="top">Reserved</td>
</tr>
</table>
<br>
<br>
<h3>ClearBreakpointR (3)</h3>
<p>Record format ClearBreakpointR contains the line number of the breakpoint
removed as a result of interpreting the CLEAR break-position statement.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Line number</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">CHAR(4)</td>
<td align="left" valign="top">Reserved</td>
</tr>
</table>
<br>
<br>
<h3>ClearPgmR (4)</h3>
<p>Record format ClearPgmR indicates that all breakpoints have been removed in
the current program as result of interpreting the CLEAR PGM statement.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">CHAR(4)</td>
<td align="left" valign="top">Reserved</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">CHAR(4)</td>
<td align="left" valign="top">Reserved</td>
</tr>
</table>
<br>
<br>
<h3>BreakPositionR (5)</h3>
<p>Record format BreakPositionR identifies the line number on which a
breakpoint was entered. This may not be the same line number as the one entered
in the break statement.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Line number</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">CHAR(4)</td>
<td align="left" valign="top">Reserved</td>
</tr>
</table>
<br>
<br>
<h3>EvaluationR (6)</h3>
<p>Record format EvaluationR contains the number of records returned for an
evaluate statement that are referred to in the subsequent ExpressionValueR
record.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Evaluation count</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Reserved</td>
</tr>
</table>
<br>
<br>
<h3>ExpressionTextR (7)</h3>
<p>Record format ExpressionTextR describes a character string that contains the
expression that was evaluated by the evaluate statement.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Expression text offset</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Expression text length</td>
</tr>
</table>
<br>
<br>
<h3>ExpressionValueR (8)</h3>
<p>Record format ExpressionValueR refers to text that contains the formatted
value of the expression that is described by the ExpressionTextR record.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Expression value offset</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Expression value length</td>
</tr>
</table>
<br>
<br>
<h3>ExpressionTypeR (9)</h3>
<p>Record format ExpressionTypeR contains the type of the expression whose
value is referred to in the ExpressionValueR record.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Expression type</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">CHAR(4)</td>
<td align="left" valign="top">Reserved</td>
</tr>
</table>
<br>
<br>
<h3>QualifyR (10)</h3>
<p>Record format QualifyR is returned as a result of evaluating a qualify
statement.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Line number</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Reserved</td>
</tr>
</table>
<br>
<br>
<h3>TypeR (11)</h3>
<p>Record format TypeR contains the number of records that are returned for an
ATTR statement.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Type record count</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Reserved</td>
</tr>
</table>
<br>
<br>
<h3>TypeDescR (12)</h3>
<p>Record format TypeDescR contains the type and length of the program
variable.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Type</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Length</td>
</tr>
</table>
<br>
<br>
<h3>DecimalR (13)</h3>
<p>Record format DecimalR is returned only for decimal type variables and
contains the total and fractional number of digits in the decimal number.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Total digits</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Fraction digits</td>
</tr>
</table>
<br>
<br>
<h3>ArrayR (14)</h3>
<p>Record format ArrayR is returned only for array type variables and contains
the number of dimensions in the array. The ArrayR record is followed by a
DimensionR record for each dimension.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Dimensions</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Reserved</td>
</tr>
</table>
<br>
<br>
<h3>DimensionR (15)</h3>
<p>Record format DimensionR is returned only for array type variables and
contains the low and high bounds of the array dimensions. There is one
DimensionR record for each dimension in the array.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Low bound</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">High bound</td>
</tr>
</table>
<br>
<br>
<h3>WatchR (16)</h3>
<p>Record format WatchR contains the number of records returned for a watch
statement.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Watch results count</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Reserved</td>
</tr>
</table>
<br>
<br>
<h3>WatchNumberR (17)</h3>
<p>Record format WatchNumberR describes the watch condition that was set as a
result of the watch statement.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Watch number</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Watch length</td>
</tr>
</table>
<br>
<br>
<h3>ClearWatchNumberR (18)</h3>
<p>Record format ClearWatchNumberR contains the watch number that is cleared as
a result of interpreting the CLEAR WATCH watch-number statement.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Watch number</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Reserved</td>
</tr>
</table>
<br>
<br>
<h3>ClearWatchR (19)</h3>
<p>Record format ClearWatchR indicates that all watches in this debug session
have been removed as a result of interpreting the CLEAR WATCH ALL
statement.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Reserved</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">Reserved</td>
</tr>
</table>
<br>
<br>
<h3>TBreakR (20)</h3>
<p>Record format TBreakR contains the number of records that are returned for a
tbreak statement.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">TBreak results count</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">CHAR(4)</td>
<td align="left" valign="top">Reserved</td>
</tr>
</table>
<br>
<br>
<h3>SBreakR (21)</h3>
<p>Record format SBreakR contains the number of records that are returned for a
sbreak statement.</p>
<table border width="80%">
<tr>
<th align="center" valign="bottom" colspan="2">Offset</th>
<th align="left" valign="bottom" rowspan="2">Type</th>
<th align="left" valign="bottom" rowspan="2">Field</th>
</tr>
<tr>
<th align="center" valign="bottom">Dec</th>
<th align="center" valign="bottom">Hex</th>
</tr>
<tr>
<td align="center" valign="top" width="10%">0</td>
<td align="center" valign="top" width="10%">0</td>
<td align="left" valign="top" width="20%">BINARY(4)</td>
<td align="left" valign="top" width="60%">Result type</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="center" valign="top">4</td>
<td align="left" valign="top">BINARY(4)</td>
<td align="left" valign="top">SBreak results count</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="center" valign="top">8</td>
<td align="left" valign="top">CHAR(4)</td>
<td align="left" valign="top">Reserved</td>
</tr>
</table>
<br>
<br>
<h3>Field Descriptions</h3>
<p><strong>Break results count.</strong> The number of entries returned for the
break statement.</p>
<p><strong>Dimensions.</strong> The number of dimensions in the array.</p>
<p><strong>Expression text length.</strong> The number of characters in the
expression text.</p>
<p><strong>Expression text offset.</strong> The displacement from the start of
the receiver variable to the first character of the expression text.
Displacement is measured in bytes.</p>
<p><strong>Expression value length.</strong> The number of characters in the
expression value text.</p>
<p><strong>Expression value offset.</strong> The displacement from the start of
the receiver variable to the first byte of the expression value text.
Displacement is measured in bytes.</p>
<p><strong>Evaluation count.</strong> The number of records returned for an
evaluate statement.</p>
<p><strong>Expression type.</strong> The data type of the expression. The
expression type may be one of the following:</p>
<table cellpadding="5">
<tr>
<th align="center" valign="top">Type</th>
<th align="left" valign="top">Enumeration</th>
<th align="left" valign="top">Description</th>
</tr>
<tr>
<td align="center" valign="top" width="15%">0</td>
<td align="left" valign="top" width="25%">kNoType__E</td>
<td align="left" valign="top" width="60%">Type is not valid</td>
</tr>
<tr>
<td align="center" valign="top">1</td>
<td align="left" valign="top">kChar__8_E</td>
<td align="left" valign="top">8-bit character value</td>
</tr>
<tr>
<td align="center" valign="top">2</td>
<td align="left" valign="top">kChar_16_E</td>
<td align="left" valign="top">16-bit character value</td>
</tr>
<tr>
<td align="center" valign="top">3</td>
<td align="left" valign="top">kBool_32_E</td>
<td align="left" valign="top">32-bit Boolean value</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="left" valign="top">kCard_16_E</td>
<td align="left" valign="top">16-bit unsigned integer value</td>
</tr>
<tr>
<td align="center" valign="top">5</td>
<td align="left" valign="top">kCard_32_E</td>
<td align="left" valign="top">32-bit unsigned integer value</td>
</tr>
<tr>
<td align="center" valign="top">6</td>
<td align="left" valign="top">kInt__16_E</td>
<td align="left" valign="top">16-bit two's complement integer value</td>
</tr>
<tr>
<td align="center" valign="top">7</td>
<td align="left" valign="top">kInt__32_E</td>
<td align="left" valign="top">32-bit two's complement integer value</td>
</tr>
<tr>
<td align="center" valign="top">8</td>
<td align="left" valign="top">kReal_32_E</td>
<td align="left" valign="top">32-bit real floating-point value</td>
</tr>
<tr>
<td align="center" valign="top">9</td>
<td align="left" valign="top">kReal_64_E</td>
<td align="left" valign="top">64-bit real floating-point value</td>
</tr>
<tr>
<td align="center" valign="top">10</td>
<td align="left" valign="top">kSpcPtr__E</td>
<td align="left" valign="top">64 or 128-bit pointer</td>
</tr>
<tr>
<td align="center" valign="top">11</td>
<td align="left" valign="top">kFncPtr__E</td>
<td align="left" valign="top">64 or 128-bit function pointer</td>
</tr>
<tr>
<td align="center" valign="top">12</td>
<td align="left" valign="top">kMchAddr_E</td>
<td align="left" valign="top">64 or 128-bit machine pointer</td>
</tr>
<tr>
<td align="center" valign="top">13</td>
<td align="left" valign="top">kRecord__E</td>
<td align="left" valign="top">Structure or record</td>
</tr>
<tr>
<td align="center" valign="top">14</td>
<td align="left" valign="top">kArray___E</td>
<td align="left" valign="top">Array</td>
</tr>
<tr>
<td align="center" valign="top">15</td>
<td align="left" valign="top">kEnum____E</td>
<td align="left" valign="top">Enumerated type</td>
</tr>
<tr>
<td align="center" valign="top">16</td>
<td align="left" valign="top">kString__E</td>
<td align="left" valign="top">String (:s format on EVAL)</td>
</tr>
<tr>
<td align="center" valign="top">17</td>
<td align="left" valign="top">kPacked__E</td>
<td align="left" valign="top">Packed decimal</td>
</tr>
<tr>
<td align="center" valign="top">18</td>
<td align="left" valign="top">kZonedTE_E</td>
<td align="left" valign="top">Zoned, trailing embedded sign</td>
</tr>
<tr>
<td align="center" valign="top">19</td>
<td align="left" valign="top">kZonedTS_E</td>
<td align="left" valign="top">Zoned, trailing separate sign</td>
</tr>
<tr>
<td align="center" valign="top">20</td>
<td align="left" valign="top">kZonedLE_E</td>
<td align="left" valign="top">Zoned, leading embedded sign</td>
</tr>
<tr>
<td align="center" valign="top">21</td>
<td align="left" valign="top">kZonedLS_E</td>
<td align="left" valign="top">Zoned, leading separate sign</td>
</tr>
<tr>
<td align="center" valign="top">22</td>
<td align="left" valign="top">kBinD_16_E</td>
<td align="left" valign="top">16-bit binary decimal value</td>
</tr>
<tr>
<td align="center" valign="top">23</td>
<td align="left" valign="top">kBinD_32_E</td>
<td align="left" valign="top">32-bit binary decimal value</td>
</tr>
<tr>
<td align="center" valign="top">24</td>
<td align="left" valign="top">kBinD_64_E</td>
<td align="left" valign="top">64-bit binary decimal value</td>
</tr>
<tr>
<td align="center" valign="top">25</td>
<td align="left" valign="top">kTable___E</td>
<td align="left" valign="top">Multiple occurrence data structure</td>
</tr>
<tr>
<td align="center" valign="top">26</td>
<td align="left" valign="top">kInd_____E</td>
<td align="left" valign="top">Indicator</td>
</tr>
<tr>
<td align="center" valign="top">27</td>
<td align="left" valign="top">kDate____E</td>
<td align="left" valign="top">Date</td>
</tr>
<tr>
<td align="center" valign="top">28</td>
<td align="left" valign="top">kTime____E</td>
<td align="left" valign="top">Time</td>
</tr>
<tr>
<td align="center" valign="top">29</td>
<td align="left" valign="top">kTstamp__E</td>
<td align="left" valign="top">Timestamp</td>
</tr>
<tr>
<td align="center" valign="top">30</td>
<td align="left" valign="top">kFixedL__E</td>
<td align="left" valign="top">Fixed-length string</td>
</tr>
<tr>
<td align="center" valign="top">31</td>
<td align="left" valign="top">kStringF_E</td>
<td align="left" valign="top"><img src="delta.gif" alt="Start of change">String (:f, :a, :u, :w format on EVAL command) <img src="deltaend.gif" alt="End of change"></td>
</tr>
<tr>
<td align="center" valign="top">100</td>
<td align="left" valign="top">kHex_____E</td>
<td align="left" valign="top">Hexadecimal (:x format on EVAL command)</td>
</tr>
</table>
<p><strong>Fraction digits.</strong> The number of digits to the right of the
decimal point in a decimal number.</p>
<p><strong>High bound.</strong> The high boundary of the array dimension.</p>
<p><strong>Length.</strong> The program variable length that is returned by the
TypeDescR result record. The length units are bits.</p>
<p><strong>Line number.</strong> The number of the line on which the action
requested was performed.</p>
<p><strong>Low bound.</strong> The low boundary of the array dimension.</p>
<p><strong>Reserved.</strong> An ignored field.</p>
<p><strong>Result type.</strong> The ordinal value of the result array.</p>
<p><strong>SBreak results count.</strong> The number of entries returned for
the sbreak statement.</p>
<p><strong>Step count.</strong> The number of statements processed.</p>
<p><strong>TBreak results count.</strong> The number of entries returned for
the tbreak statement.</p>
<p><strong>Total digits.</strong> The total number of digits in a decimal
number.</p>
<p><strong>Type.</strong> The program variable type that is returned by the
TypeDescR result record. The meanings of this field's value are the same as the
expression type field.</p>
<p><strong>Type record count.</strong> The number of records returned for an
attr statement.</p>
<p><strong>Watch length.</strong> The length in bytes of the storage being
watched for this watch condition.</p>
<p><strong>Watch number.</strong> The identification number assigned to the
watch condition. This number is used by various debug functions to identify
individual watches.</p>
<p><strong>Watch results count.</strong> The number of result records returned
for the watch statement.</p>
<br>
<h3>Statement Results</h3>
<p><strong>ATTR Statement Results.</strong> The Submit Debug Command API
returns a description of the symbol table entry for the program variable
entered. A variable number of result records may be produced:</p>
<ul>
<li>A TypeR record is returned, which provides a count of the number of records
returned for an ATTR statement.<br>
<br>
</li>
<li>A TypeDescR record is returned, which provides the type and size of the
program variable.<br>
<br>
</li>
<li>A DecimalR record is returned only if the program variable is a decimal
type. This record describes the total and fractional digits in the decimal
number.<br>
<br>
</li>
<li>An ArrayR record is returned only if the program variable is an array. This
record returns the number of dimensions in an array.<br>
<br>
</li>
<li>A DimensionR record is returned only if the program variable is an array.
This record returns the low and high bounds of the array dimensions.</li>
</ul>
<p><strong>Break Statement Results.</strong> The Submit Debug Command API
returns a detailed description of the break-position and conditional expression
of a conditional breakpoint when a break statement is translated.</p>
<p>The items returned follow:</p>
<ul>
<li>The number of records returned as a result of evaluating a break statement.
Record type BreakR contains this information.<br>
<br>
</li>
<li>The position on which the breakpoint was entered. Record type
BreakPositionR contains the line number of the line on which the breakpoint was
entered. Be aware that the input line number may be mapped to a different line.
For example, a breakpoint entered on a line that contains a comment is mapped
to the next line that contains an operational statement.<br>
<br>
</li>
<li>The text of the expression that defines a conditional breakpoint. Record
type ExpressionTextR refers to the text of the condition.</li>
</ul>
<p>The break statement is interpreted. Program operation is managed by i5/OS
according to the definition of the break statement.</p>
<p><strong>Clear Statement Results.</strong> One record is returned. The record
type depends on the operand following the keyword CLEAR. If the operand is a
line number, the record type is ClearBreakpointR. If the operand is the keyword
PGM, the record type is ClearPgmR. If the operand is WATCH and a watch number
is specified, the record type is ClearWatchNumberR. If the operand is WATCH and
all watches are cleared, the record type is ClearWatchR.</p>
<p>The ClearBreakpointR record contains the line number input for the break
position.</p>
<p>The clear statement is interpreted. One or more breakpoints are removed from
the program under investigation.</p>
<p><strong>Evaluate Statement Results.</strong> An evaluate statement produces
a variable number of Result Records. The first four result records follow:</p>
<ul>
<li>An EvaluationR record is returned, which enumerates itself and subsequent
records. The EvaluationR result record always contains an evaluation count of
four.<br>
<br>
</li>
<li>An Expression text record is returned, which contains the offset and length
of the string, which represents the expression text.<br>
<br>
</li>
<li>An Expression value record is returned, which contains the offset and
length of the string, which represents the value of the expression.
<p><strong>Note:</strong> The length field will always be set to 512, with each
of the 512 characters occupying 16 bits, for a string of type kStringF_E when
debugging a JAVA executable. This will occur even when the returned string has
a length of less than 512. The end of the returned string can be found by
locating the first unicode character in the string that has an ordinal value of
zero. As unicode, this character will occupy 16 bits.</p>
</li>
<li>An Expression type record is returned, which contains the type of the
expression.</li>
</ul>
<p>A single value is returned for an arithmetic expression or scalar variable.
Multiple values are returned when a structure is evaluated. Refer to
<a href="#HDRRSLTRCD">Examples of Result Records Returned by Submit Debug Command
API</a> for examples of the result records returned when a structure or an
array is evaluated.</p>
<p>The evaluate statement is interpreted. Data is formatted according to the
type of the input expression. Refer to <a href="#TBLDLTB50">Presentation Formats</a>
for a description of presentation formats.</p>
<p><strong>Qualify Statement Results.</strong> One record is returned. The
value of the result type field is QualifyR. The QualifyR record contains the
input line number used to establish the current locality for subsequent
evaluate statements.</p>
<p>A reference to the block that defines the current locality is assigned by
the qualify statement.</p>
<p><strong>SBreak Statement Results.</strong> The Submit Debug Command API
returns a detailed description of the break-position when an sbreak statement is
translated. The items returned are:</p>
<ul>
<li>The number of records returned as a result of evaluating a sbreak
statement. Record type SBreakR contains this information.<br>
<br>
</li>
<li>The position on which the breakpoint was entered. Record type
BreakPositionR contains the line number of the line on which the breakpoint was
entered. Be aware that the input line number may be mapped to a different line.
For example, a breakpoint entered on a line that contains a comment is mapped
to the next line that contains an operational statement.</li>
</ul>
<p>The sbreak statement is interpreted. Program operation is managed by i5/OS
according to the definition of the sbreak statement.</p>
<p><strong>Step Statement Results.</strong> One record is returned. The value
of the result type field is StepR. The StepR record contains the number of
statements to be run when control is given to the program under
investigation.</p>
<p>The step statement is interpreted. Program processing is managed by i5/OS
according to the definition of the step statement.</p>
<p><strong>TBreak Statement Results.</strong> The Submit Debug Command API
returns a detailed description of the thread break-position and conditional
expression of a conditional breakpoint when a tbreak statement is translated.
The items returned follow:</p>
<ul>
<li>The number of records returned as a result of evaluating a tbreak
statement. Record type TBreakR contains this information.<br>
<br>
</li>
<li>The position on which the thread breakpoint was entered. Record type
BreakPositionR contains the line number of the line on which the thread
breakpoint was entered. Be aware that the input line number may be mapped to a
different line. For example, a thread breakpoint entered on a line that
contains a comment is mapped to the next line that contains an operational
statement.<br>
<br>
</li>
<li>The text of the expression that defines a conditional breakpoint for a
thread. Record type ExpressionTextR refers to the text of the condition.</li>
</ul>
<p>The tbreak statement is interpreted. Program operation is managed by i5/OS
according to the definition of the tbreak statement.</p>
<p><strong>Watch Statement Results.</strong> The watch statement returns the
following result records:</p>
<ul>
<li>A WatchR record is returned, which provides a count of the number of result
records for the watch statement.<br>
<br>
</li>
<li>A WatchNumberR record is returned, which contains the watch number assigned
and the length in bytes of the storage being watched.<br>
<br>
</li>
<li>An ExpressionTextR record, which contains the offset and length of a
string. This record represents the watch statement expression text.<br>
<br>
</li>
<li>An ExpressionValueR record, which contains the offset and length of a
string. This record represents the watch storage location address. This value
is always a text representation of a space pointer that contains the value of
the pointer to the watched storage location (for example,
'SPP:08006F0054001004').</li>
</ul>
<br>
<h3><a name="HDRRSLTRCD">Examples of Result Records Returned by Submit Debug
Command API</a></h3>
<p>This section contains examples of result records returned by the Submit
Debug Command API. Each example contains a fragment of a program, a debug
language statement that appears in the input buffer, and the results produced
in the receiver variable.</p>
<p>The null termination symbol denotes the end of a character string in the
examples that follow.</p>
<br>
<h3>Break Statement Example</h3>
<p><strong>C Program Fragment</strong></p>
<p>Assume program operation is suspended in the program shown in <a href=
"#FIGDBUGB">Figure 1</a> just before line 6 runs.</p>
<p><strong><a name="FIGDBUGB">Figure 1. Program for Break
Example</a></strong></p>
<table border width="80%">
<tr>
<td>
<pre>
Line C Source
1 #include stdio.h
2 int T[] = {1,2,3,5,7,11,13,17,23,29};
3 int BinarySearch(int v, int f, int l);
4 main()
5 { int result;
6 result = BinarySearch(17,0,9);
7 printf(&quot;result= &quot;); printf(&quot;%d&quot;,result); printf(&quot; \n&quot;);
8 }
</pre>
</td>
</tr>
</table>
<br>
<p><strong>Input Buffer</strong></p>
<pre>
BREAK 7 WHEN result &gt; 5
</pre>
<br>
<p><strong>Receiver Variable</strong></p>
<table border width="80%">
<tr>
<th align="center" valign="top">Offset</th>
<th align="left" valign="top">Field</th>
<th align="left" valign="top">Value</th>
</tr>
<tr>
<td align="center" valign="top" width="15%">0</td>
<td align="left" valign="top" width="45%">Bytes returned<br>
Bytes available<br>
Entry count</td>
<td align="left" valign="top" width="40%">59<br>
59<br>
3</td>
</tr>
<tr>
<td align="center" valign="top">12</td>
<td align="left" valign="top">Result type<br>
Break results count<br>
Reserved</td>
<td align="left" valign="top">BreakR<br>
3</td>
</tr>
<tr>
<td align="center" valign="top">24</td>
<td align="left" valign="top">Result type<br>
Line number<br>
Reserved</td>
<td align="left" valign="top">BreakPositionR<br>
7</td>
</tr>
<tr>
<td align="center" valign="top">36</td>
<td align="left" valign="top">Result type<br>
Expression text offset<br>
Expression text length</td>
<td align="left" valign="top">ExpressionTextR<br>
48<br>
10</td>
</tr>
<tr>
<td align="center" valign="top">48</td>
<td align="left" valign="top">String space</td>
<td align="left" valign="top">result &gt; 5</td>
</tr>
</table>
<br>
<br>
<h3><a name="Header_205">Scalar Evaluate Statement Example</a></h3>
<p><strong><a name="Header_206">C Program Fragment</a></strong></p>
<p>Consider the C program fragment in <a href="#FIGDBUGS">Figure 2</a>.
Variable i defines an integer.</p>
<p><strong><a name="FIGDBUGS">Figure 2. Program for Scalar Evaluate
Example</a></strong></p>
<table border width="80%">
<tr>
<td>
<pre>
Line C Source
1 int i = 29;
</pre>
</td>
</tr>
</table>
<br>
<p><strong>Input Buffer</strong></p>
<pre>
EVAL i
</pre>
<br>
<p><strong>Receiver Variable</strong></p>
<table border width="80%">
<tr>
<th align="center" valign="top">Offset</th>
<th align="left" valign="top">Field</th>
<th align="left" valign="top">Value</th>
</tr>
<tr>
<td align="center" valign="top" width="15%">0</td>
<td align="left" valign="top" width="45%">Bytes returned<br>
Bytes available<br>
Entry count</td>
<td align="left" valign="top" width="40%">65<br>
65<br>
4</td>
</tr>
<tr>
<td align="center" valign="top">12</td>
<td align="left" valign="top">Result type<br>
Evaluation count<br>
Reserved</td>
<td align="left" valign="top">EvaluationR<br>
4</td>
</tr>
<tr>
<td align="center" valign="top">24</td>
<td align="left" valign="top">Result type<br>
Expression text offset<br>
Expression text length</td>
<td align="left" valign="top">ExpressionTextR<br>
60<br>
1</td>
</tr>
<tr>
<td align="center" valign="top">36</td>
<td align="left" valign="top">Result type<br>
Expression value offset<br>
Expression value length</td>
<td align="left" valign="top">ExpressionValueR<br>
62<br>
2</td>
</tr>
<tr>
<td align="center" valign="top">48</td>
<td align="left" valign="top">Result type<br>
Expression type<br>
Reserved</td>
<td align="left" valign="top">ExpressionTypeR<br>
kInt__32_E<br>
</td>
</tr>
<tr>
<td align="center" valign="top">60</td>
<td align="left" valign="top">String space</td>
<td align="left" valign="top">i29</td>
</tr>
</table>
<br>
<br>
<h3>Scalar Evaluate Statement Example</h3>
<p><strong>RPG Program Fragment</strong></p>
<p>Consider the RPG program fragment in <a href="#FIGDLFG01A">Figure 3</a>. The
fragment assigns 1 to a zoned(1,0) variable I.</p>
<p>The program is currently stopped at line 2.</p>
<p><strong><a name="FIGDLFG01A">Figure 3. RPG Programming Language Example,
Evaluate</a></strong></p>
<table border width="80%">
<tr>
<td>
<pre>
CL0N01Factor1++++++OpcodeE+Extended-factor2
1 C EVAL I=1
2 C MOVE *ON *INLR
</pre>
</td>
</tr>
</table>
<br>
<p><strong>Input Buffer</strong></p>
<pre>
EVAL I
</pre>
<br>
<p><strong>Receiver Variable</strong></p>
<table border width="80%">
<tr>
<th align="center" valign="top">Offset</th>
<th align="left" valign="top">Field</th>
<th align="left" valign="top">Value</th>
</tr>
<tr>
<td align="center" valign="top" width="15%">0</td>
<td align="left" valign="top" width="45%">Bytes returned<br>
Bytes available<br>
Entry count</td>
<td align="left" valign="top" width="40%">64<br>
64<br>
4</td>
</tr>
<tr>
<td align="center" valign="top">12</td>
<td align="left" valign="top">Result type<br>
Evaluation count<br>
Reserved</td>
<td align="left" valign="top">EvaluationR<br>
4</td>
</tr>
<tr>
<td align="center" valign="top">24</td>
<td align="left" valign="top">Result type<br>
Expression text offset<br>
Expression text length</td>
<td align="left" valign="top">ExpressionTextR<br>
60<br>
1</td>
</tr>
<tr>
<td align="center" valign="top">36</td>
<td align="left" valign="top">Result type<br>
Expression value offset<br>
Expression value length</td>
<td align="left" valign="top">ExpressionValueR<br>
62<br>
1</td>
</tr>
<tr>
<td align="center" valign="top">48</td>
<td align="left" valign="top">Result type<br>
Expression type<br>
Reserved</td>
<td align="left" valign="top">ExpressionTypeR<br>
kZonedTE_E<br>
</td>
</tr>
<tr>
<td align="center" valign="top">60</td>
<td align="left" valign="top">String space</td>
<td align="left" valign="top">I1</td>
</tr>
</table>
<br>
<br>
<h3>Structure Evaluate Statement Example</h3>
<p><strong>C Program Fragment</strong></p>
<p>Consider the C program fragment in <a href="#FIGDBUGE">Figure 4</a>.</p>
<p><strong><a name="FIGDBUGE">Figure 4. Program for Structure Evaluate
Example</a></strong></p>
<table border width="80%">
<tr>
<td>
<pre>
Line C Source
1 struct {
2 int i;
3 float f;
4 struct {
5 char c;
6 enum e {red,yellow};
7 } s2;
8 } s1 = { 1 , 5.0, {'a' , red } };
</pre>
</td>
</tr>
</table>
<p><strong>Input Buffer</strong></p>
<pre>
EVAL s1
</pre>
<br>
<p><strong>Receiver Variable</strong></p>
<table border width="80%">
<tr>
<th align="center" valign="top">Offset</th>
<th align="left" valign="top">Field</th>
<th align="left" valign="top">Value</th>
</tr>
<tr>
<td align="center" valign="top" width="15%">0</td>
<td align="left" valign="top" width="45%">Bytes returned<br>
Bytes available<br>
Entry count</td>
<td align="left" valign="top" width="40%">246<br>
246<br>
16</td>
</tr>
<tr>
<td align="center" valign="top">12</td>
<td align="left" valign="top">Result type<br>
Evaluation count<br>
Reserved</td>
<td align="left" valign="top">EvaluationR<br>
4</td>
</tr>
<tr>
<td align="center" valign="top">24</td>
<td align="left" valign="top">Result type<br>
Expression text offset<br>
Expression text length</td>
<td align="left" valign="top">ExpressionTextR<br>
204<br>
4</td>
</tr>
<tr>
<td align="center" valign="top">36</td>
<td align="left" valign="top">Result type<br>
Expression value offset<br>
Expression value length</td>
<td align="left" valign="top">ExpressionValueR<br>
209<br>
1</td>
</tr>
<tr>
<td align="center" valign="top">48</td>
<td align="left" valign="top">Result type<br>
Expression type<br>
Reserved</td>
<td align="left" valign="top">ExpressionTypeR<br>
kInt__32_E<br>
</td>
</tr>
<tr>
<td align="center" valign="top">60</td>
<td align="left" valign="top">Result type<br>
Evaluation count<br>
Reserved</td>
<td align="left" valign="top">EvaluationR<br>
4</td>
</tr>
<tr>
<td align="center" valign="top">72</td>
<td align="left" valign="top">Result type<br>
Expression text offset<br>
Expression text length</td>
<td align="left" valign="top">ExpressionTextR<br>
211<br>
4</td>
</tr>
<tr>
<td align="center" valign="top">84</td>
<td align="left" valign="top">Result type<br>
Expression value offset<br>
Expression value length</td>
<td align="left" valign="top">ExpressionValueR<br>
216<br>
7</td>
</tr>
<tr>
<td align="center" valign="top">96</td>
<td align="left" valign="top">Result type<br>
Expression type<br>
Reserved</td>
<td align="left" valign="top">ExpressionTypeR<br>
kReal_64_E</td>
</tr>
<tr>
<td align="center" valign="top">108</td>
<td align="left" valign="top">Result type<br>
Evaluation count<br>
Reserved</td>
<td align="left" valign="top">EvaluationR<br>
4</td>
</tr>
<tr>
<td align="center" valign="top">120</td>
<td align="left" valign="top">Result type<br>
Expression text offset<br>
Expression text length</td>
<td align="left" valign="top">ExpressionTextR<br>
224<br>
7</td>
</tr>
<tr>
<td align="center" valign="top">132</td>
<td align="left" valign="top">Result type<br>
Expression value offset<br>
Expression value length</td>
<td align="left" valign="top">ExpressionValueR<br>
232<br>
1</td>
</tr>
<tr>
<td align="center" valign="top">144</td>
<td align="left" valign="top">Result type<br>
Expression type<br>
Reserved</td>
<td align="left" valign="top">ExpressionTypeR<br>
kChar__8_E</td>
</tr>
<tr>
<td align="center" valign="top">156</td>
<td align="left" valign="top">Result type<br>
Evaluation count<br>
Reserved</td>
<td align="left" valign="top">EvaluationR<br>
4</td>
</tr>
<tr>
<td align="center" valign="top">168</td>
<td align="left" valign="top">Result type<br>
Expression text offset<br>
Expression text length</td>
<td align="left" valign="top">ExpressionTextR<br>
234<br>
7</td>
</tr>
<tr>
<td align="center" valign="top">180</td>
<td align="left" valign="top">Result type<br>
Expression value offset<br>
Expression value length</td>
<td align="left" valign="top">ExpressionValueR<br>
242<br>
3</td>
</tr>
<tr>
<td align="center" valign="top">192</td>
<td align="left" valign="top">Result type<br>
Expression type<br>
Reserved</td>
<td align="left" valign="top">ExpressionTypeR<br>
kEnum____E</td>
</tr>
<tr>
<td align="center" valign="top">204</td>
<td align="left" valign="top">String space</td>
<td align="left" valign="top">See Note.</td>
</tr>
<tr>
<td align="left" valign="top" colspan="3">
<p><strong>Note:</strong> s1.i1s1.f5.0E+00s1.s2.cas1.s2.ered</p>
</td>
</tr>
</table>
<br>
<br>
<h3>Step Statement Example</h3>
<p><strong>C Program Fragment</strong></p>
<p>Assume program operation is suspended in the program shown in <a href=
"#FIGDBUGF">Figure 5</a> just before line 6 runs.</p>
<p><strong><a name="FIGDBUGF">Figure 5. Program for Step
Example</a></strong></p>
<table border width="80%">
<tr>
<td>
<pre>
Line C Source
1 #include stdio.h
2 int T[] = {1,2,3,5,7,11,13,17,23,29};
3 int BinarySearch(int v, int f, int l);
4 main()
5 { int result;
6 result = BinarySearch(17,0,9);
7 printf(&quot;result= &quot;); printf(&quot;%d&quot;,result); printf(&quot; \n&quot;);
8 }
</pre>
</td>
</tr>
</table>
<br>
<p><strong>Input Buffer</strong></p>
<pre>
STEP
</pre>
<br>
<p><strong>Receiver Variable</strong></p>
<table border width="80%">
<tr>
<th align="center" valign="top">Offset</th>
<th align="left" valign="top">Field</th>
<th align="left" valign="top">Value</th>
</tr>
<tr>
<td align="center" valign="top" width="15%">0</td>
<td align="left" valign="top" width="45%">Bytes Returned<br>
Bytes Available<br>
Entry Count</td>
<td align="left" valign="top" width="40%">24<br>
24<br>
1</td>
</tr>
<tr>
<td align="center" valign="top">12</td>
<td align="left" valign="top">Result type<br>
Step Count<br>
Reserved</td>
<td align="left" valign="top">StepR<br>
1</td>
</tr>
</table>
<br>
<br>
<h3>ATTR Statement Example</h3>
<p><strong>RPG Program Fragment</strong></p>
<p>Consider the RPG program fragment in <a href="#FIGDLFG01B">Figure 6</a>. The
fragment assigns 1 to a zoned(1,0) variable I.</p>
<p>The program is currently stopped at line 2.</p>
<p><strong><a name="FIGDLFG01B">Figure 6. RPG Programming Language Example,
Evaluate</a></strong></p>
<table border width="80%">
<tr>
<td>
<pre>
CL0N01Factor1++++++OpcodeE+Extended-factor2
1 C EVAL I=1
2 C MOVE *ON *INLR
</pre>
</td>
</tr>
</table>
<br>
<p><strong>Input Buffer</strong></p>
<pre>
ATTR I
</pre>
<br>
<p><strong>Receiver Variable</strong></p>
<table border width="80%">
<tr>
<th align="center" valign="top">Offset</th>
<th align="left" valign="top">Field</th>
<th align="left" valign="top">Value</th>
</tr>
<tr>
<td align="center" valign="top">0</td>
<td align="left" valign="top">Bytes returned<br>
Bytes available<br>
Entry count</td>
<td align="left" valign="top">48<br>
48<br>
3</td>
</tr>
<tr>
<td align="center" valign="top">12</td>
<td align="left" valign="top">Result type<br>
Type record count<br>
Reserved</td>
<td align="left" valign="top">TypeR<br>
3</td>
</tr>
<tr>
<td align="center" valign="top">24</td>
<td align="left" valign="top">Result type<br>
Type<br>
Length</td>
<td align="left" valign="top">TypeDescR<br>
kZonedTE_E<br>
1</td>
</tr>
<tr>
<td align="center" valign="top">36</td>
<td align="left" valign="top">Result type<br>
Total digits<br>
Fractional digits</td>
<td align="left" valign="top">DecimalR<br>
1<br>
0</td>
</tr>
</table>
<br>
<br>
<h3>WATCH Statement Example</h3>
<p><strong>C Program Fragment</strong></p>
<p>Consider the C program fragment in <a href="#FIGDBUGS1">Figure 7</a>.
Variable i defines an integer.</p>
<p><strong><a name="FIGDBUGS1">Figure 7. Program for Scalar Evaluate
Example</a></strong></p>
<table border width="80%">
<tr>
<td>
<pre>
Line C Source
1 int i = 29;
</pre>
</td>
</tr>
</table>
<br>
<p><strong>Input Buffer</strong></p>
<pre>
WATCH i
</pre>
<br>
<p><strong>Receiver Variable</strong></p>
<table border width="80%">
<tr>
<th align="center" valign="top">Offset</th>
<th align="left" valign="top">Field</th>
<th align="left" valign="top">Value</th>
</tr>
<tr>
<td align="center" valign="top">0</td>
<td align="left" valign="top">Bytes returned<br>
Bytes available<br>
Entry count</td>
<td align="left" valign="top">83<br>
83<br>
4</td>
</tr>
<tr>
<td align="center" valign="top">12</td>
<td align="left" valign="top">Result type<br>
Watch results count<br>
Reserved</td>
<td align="left" valign="top">WatchR<br>
4</td>
</tr>
<tr>
<td align="center" valign="top">24</td>
<td align="left" valign="top">Result type<br>
Watch number<br>
Watch length</td>
<td align="left" valign="top">WatchNumberR<br>
1<br>
4</td>
</tr>
<tr>
<td align="center" valign="top">36</td>
<td align="left" valign="top">Result type<br>
Expression text offset<br>
Expression text length</td>
<td align="left" valign="top">ExpressionTextR<br>
60<br>
1</td>
</tr>
<tr>
<td align="center" valign="top">48</td>
<td align="left" valign="top">Result type<br>
Expression value offset<br>
Expression value length</td>
<td align="left" valign="top">ExpressionValueR<br>
62<br>
20</td>
</tr>
<tr>
<td align="center" valign="top">60</td>
<td align="left" valign="top">String space</td>
<td align="left" valign="top">See note.</td>
</tr>
<tr>
<td align="left" valign="top" colspan="3">
<p><strong>Note:</strong> iSPP:08006F0054001004</p>
</td>
</tr>
</table>
<br>
<br>
<h3>Error Messages</h3>
<table width="100%" cellpadding="5">
<!-- cols="15 85" -->
<tr>
<th align="left" valign="top" nowrap>Message ID</th>
<th align="left" valign="top">Error Message Text</th>
</tr>
<tr>
<td align="left" valign="top">CPF1938 E</td>
<td align="left" valign="top">Command is not allowed while serviced job is not active.</td>
</tr>
<tr>
<td align="left" valign="top">CPF1939 E</td>
<td align="left" valign="top">Time-out occurred waiting for a reply from the serviced
job.</td>
</tr>
<tr>
<td align="left" valign="top">CPF1941 E</td>
<td align="left" valign="top">Serviced job has completed. Debug commands are not
allowed.</td>
</tr>
<tr>
<td align="left" valign="top">CPF3C19 E</td>
<td align="left" valign="top">Error occurred with receiver variable specified.</td>
</tr>
<tr>
<td align="left" valign="top">CPF3C24 E</td>
<td align="left" valign="top">Length of the receiver variable is not valid.</td>
</tr>
<tr>
<td align="left" valign="top">CPF3CF1 E</td>
<td align="left" valign="top">Error code parameter not valid.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7102 E</td>
<td align="left" valign="top">Unable to add breakpoint or trace.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E01 E</td>
<td align="left" valign="top">Pointer to receiver variable is NULL.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E02 E</td>
<td align="left" valign="top">Receiver variable length not valid.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E03 E</td>
<td align="left" valign="top">Pointer to input buffer is NULL.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E04 E</td>
<td align="left" valign="top">Input buffer length not valid.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E05 E</td>
<td align="left" valign="top">Input buffer is not as long as specified.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E06 E</td>
<td align="left" valign="top">Pointer to error code structure is NULL.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E07 E</td>
<td align="left" valign="top">Not enough space was provided for error code.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E08 E</td>
<td align="left" valign="top">Value of BytesProvided field is not correct.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E09 E</td>
<td align="left" valign="top">Value of BytesProvided field, &amp;1, is not correct.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E10 E</td>
<td align="left" valign="top">Internal error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E11 E</td>
<td align="left" valign="top">Type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E12 E</td>
<td align="left" valign="top">Identifier does not exist.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E14 E</td>
<td align="left" valign="top">Field does not exist.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E15 E</td>
<td align="left" valign="top">Syntax error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E16 E</td>
<td align="left" valign="top">Token error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E17 E</td>
<td align="left" valign="top">Structure type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E18 E</td>
<td align="left" valign="top">Pointer type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E19 E</td>
<td align="left" valign="top">Integral type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E1A E</td>
<td align="left" valign="top">Enumerated type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E1B E</td>
<td align="left" valign="top">Arithmetic type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E1C E</td>
<td align="left" valign="top">Scalar type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E1D E</td>
<td align="left" valign="top">Address type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E1E E</td>
<td align="left" valign="top">Adding type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E1F E</td>
<td align="left" valign="top">Subtracting type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E20 E</td>
<td align="left" valign="top">Relational type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E21 E</td>
<td align="left" valign="top">Equality type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E22 E</td>
<td align="left" valign="top">Casting type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E23 E</td>
<td align="left" valign="top">Assignment type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E24 E</td>
<td align="left" valign="top">Line number not found.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E25 E</td>
<td align="left" valign="top">Array type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E26 E</td>
<td align="left" valign="top">Subscript type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E27 E</td>
<td align="left" valign="top">Format type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E28 E</td>
<td align="left" valign="top">Type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E29 E</td>
<td align="left" valign="top">Unsupported bit field alignment.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E2A E</td>
<td align="left" valign="top">String constants are not supported.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E2B E</td>
<td align="left" valign="top">Type compatibility error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E2C E</td>
<td align="left" valign="top">Too few array dimensions specified.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E2D E</td>
<td align="left" valign="top">Too many array dimensions specified.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E2E E</td>
<td align="left" valign="top">Incorrectly formed range expression.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E2F E</td>
<td align="left" valign="top">Range expression expands to exceed input buffer.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E50 E</td>
<td align="left" valign="top">Decimal type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E51 E</td>
<td align="left" valign="top">Decimal size error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E52 E</td>
<td align="left" valign="top">Unsupported syntax.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E53 E</td>
<td align="left" valign="top">Assignment size error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E54 E</td>
<td align="left" valign="top">Integer type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E55 E</td>
<td align="left" valign="top">Constant type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E56 E</td>
<td align="left" valign="top">Identifier is ambiguous.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E57 E</td>
<td align="left" valign="top">Integer constant not valid.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E58 E</td>
<td align="left" valign="top">Compiler not valid.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E59 E</td>
<td align="left" valign="top">String type error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E5A E</td>
<td align="left" valign="top">Substring extends beyond end of string.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E5B E</td>
<td align="left" valign="top">Format length error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E5C E</td>
<td align="left" valign="top">Hexadecimal constant not valid.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E5D E</td>
<td align="left" valign="top">Decimal constant size error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E5E E</td>
<td align="left" valign="top">Integer constant size error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E5F E</td>
<td align="left" valign="top">Relational size error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E60 E</td>
<td align="left" valign="top">Constant not a decimal number.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E61 E</td>
<td align="left" valign="top">System cannot determine which expansion of the template to
use.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E62 E</td>
<td align="left" valign="top">Watch cannot be set on this variable.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E63 E</td>
<td align="left" valign="top">Watch length is not valid.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7E64 E</td>
<td align="left" valign="top">Clear watch number not found.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E03 E</td>
<td align="left" valign="top">Internal error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E04 E</td>
<td align="left" valign="top">Internal error occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E05 E</td>
<td align="left" valign="top">Error on equal operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E06 E</td>
<td align="left" valign="top">Error on not-equal operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E07 E</td>
<td align="left" valign="top">Error on greater-than operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E08 E</td>
<td align="left" valign="top">Error on greater-than-or-equal-to operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E09 E</td>
<td align="left" valign="top">Error on less-than operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E0A E</td>
<td align="left" valign="top">Error on less-than-or-equal-to operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E0B E</td>
<td align="left" valign="top">Error on logical-and operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E0C E</td>
<td align="left" valign="top">Error on logical-or operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E0D E</td>
<td align="left" valign="top">Error on logical-exclusive-or operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E0E E</td>
<td align="left" valign="top">Error on logical-not operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E0F E</td>
<td align="left" valign="top">Error on add operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E10 E</td>
<td align="left" valign="top">Error on subtract operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E11 E</td>
<td align="left" valign="top">Error on negate operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E12 E</td>
<td align="left" valign="top">Error on multiply operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E13 E</td>
<td align="left" valign="top">Error on divide operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E14 E</td>
<td align="left" valign="top">Error on increment operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E15 E</td>
<td align="left" valign="top">Error on decrement operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E16 E</td>
<td align="left" valign="top">Error on modulo operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E17 E</td>
<td align="left" valign="top">Pointer not set for location referenced.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E18 E</td>
<td align="left" valign="top">Conversion error.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E19 E</td>
<td align="left" valign="top">Error on absolute value operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E1A E</td>
<td align="left" valign="top">Domain violation occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E1B E</td>
<td align="left" valign="top">Domain violation occurred.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E1C E</td>
<td align="left" valign="top">Error on write operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E1D E</td>
<td align="left" valign="top">Error on shift operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E1E E</td>
<td align="left" valign="top">Error on operand value.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E1F E</td>
<td align="left" valign="top">Error on load constant operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E20 E</td>
<td align="left" valign="top">Error on load address operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E21 E</td>
<td align="left" valign="top">Error on store indirect operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E22 E</td>
<td align="left" valign="top">Error on move operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E23 E</td>
<td align="left" valign="top">Error on fill operator.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E24 E</td>
<td align="left" valign="top">Incorrect array index value.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E25 E</td>
<td align="left" valign="top">Call stack entry does not exist.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E26 E</td>
<td align="left" valign="top">Translation failed.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E27 E</td>
<td align="left" valign="top">Call to user method failed.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E28 E</td>
<td align="left" valign="top">Variable not available to display.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E29 E</td>
<td align="left" valign="top">Debug recursion error.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E2A E</td>
<td align="left" valign="top">Error occurred while processing operation.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E2B E</td>
<td align="left" valign="top">Watch cannot overlap another active watch.</td>
</tr>
<tr>
<td align="left" valign="top">CPF8E2C E</td>
<td align="left" valign="top">Maximum number of watches exceeded.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9541 E</td>
<td align="left" valign="top">Not in debug mode.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9542 E</td>
<td align="left" valign="top">View not found.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9549 E</td>
<td align="left" valign="top">Error addressing API parameter.</td>
</tr>
</table>
<br>
<br>
<h3><a name="HDRDBGLANG">Debug Language Statements</a></h3>
<p>Debug language statements are the principal mechanism by which a programmer
debugs a program. Programmers control the operation of a program by:</p>
<ul>
<li>Entering break statements to select where the program will stop<br>
<br>
</li>
<li>Entering step statements to run one or more statements of the program under
investigation<br>
<br>
</li>
<li>Entering watch statements to stop the program when a specified storage
location is changed<br>
<br>
</li>
</ul>
<p>The clear statement enables programmers to remove a particular breakpoint or
all breakpoints. It can also be used to clear watches. Information about the
state of the program being debugged can be extracted when program processing is
suspended. The evaluate statement permits programmers to display the value of
an expression, or to display an aggregate, and to alter the value of a
variable.</p>
<p>Debug language statements are constructed by the client program and placed
in the input buffer. If multiple debug language statements are placed in the
input buffer, they must be separated by one or more blanks. The Submit Debug
Command API accepts the debug language statements of ATTR, BREAK, CLEAR, EVAL,
QUAL, SBREAK, STEP, TBREAK, and WATCH.</p>
<p>When multiple debug statements are specified in the same input buffer, a
QUAL statement must not follow an EVAL statement. The WATCH debug statement
cannot be specified with any other debug statement, including another WATCH
statement.</p>
<br>
<h3><a name="Header_231">ATTR Statement</a></h3>
<p>The variable appearing in an ATTR statement is found in the debug symbol
table. The symbol table information for the variable is returned.</p>
<p>The following example shows an ATTR statement:</p>
<p><img src="RBAFX644.gif" alt="ATTR statement"></p>
<p>The locality of variables that appear in an ATTR statement is defined by the
most recently run qualify statement. The program calling this API is advised to
issue a qualify statement that defines the stop position when program operation
is suspended.</p>
<br>
<h3><a name="Header_232">Break Statement</a></h3>
<p>The break statement permits a programmer to enter a breakpoint. Breakpoints
are entered on the program under investigation. When the program under
investigation encounters a breakpoint, operation is suspended.</p>
<p>The following example shows a break statement:</p>
<p><img src="RBAFX645.gif" alt="Break statement"></p>
<p>The position marks where program operation is suspended when a breakpoint is
encountered. Line numbers are used to identify the position when the break
statement is entered. The line number entered is mapped to a statement by the
Submit Debug Command API. A breakpoint causes the program to stop just before
the break statement is run.</p>
<p>Unconditional and conditional breakpoints can be entered. Unconditional
breakpoints are discussed first, followed by a discussion of conditional
breakpoints.</p>
<p>An unconditional breakpoint is entered by issuing the first form of the
break statement.</p>
<p><img src="RBAFX639.gif" alt="First form of break statement"></p>
<p>A line number is entered for the position. Line numbers are associated with
each view in that they identify the lines of source in a view. Line numbers are
assigned sequentially beginning with line one.</p>
<p>A conditional breakpoint is entered by issuing the second form of the break
statement.</p>
<p><img src="RBAFX640.gif" alt="Second form of break statement"></p>
<p>The position of a conditional breakpoint is assigned in the same way as the
position in an unconditional breakpoint. A line number is entered for the
position.</p>
<p>The condition of a conditional breakpoint is the expression following the
reserved word WHEN. The result of the expression must have a Boolean or a
logical value when evaluated. The expression is interpreted before the
statement on which the breakpoint was entered is run. If the value of the
expression is TRUE, operation of the program investigation is suspended. If the
value of the expression is FALSE, operation continues without interruption.</p>
<p>The locality of variables used in the conditional expression is defined by
the line number that defines the position.</p>
<p>A breakpoint can be replaced by entering another breakpoint using the same
position. The most recent breakpoint entered on a position is the active
breakpoint.</p>
<p>BREAK may be replaced by the reserved word AT in the statement that defines
the break statement.</p>
<p><img src="RBAFX641.gif" alt="Defining the break statement"></p>
<p>For threaded applications, breakpoints that are specified with the break
statement are global to all threads in the job being debugged. These are called
job breakpoints. Thread-specific breakpoints are set with the tbreak statement.
A job may not have both a job breakpoint and thread breakpoints at the same
position. When a job breakpoint is in effect and a thread breakpoint is
specified, the job breakpoint is replaced. When thread breakpoints are in
effect and a job breakpoint is specified, the thread breakpoints are
replaced.</p>
<br>
<h3><a name="Header_233">Clear Statement</a></h3>
<p>The clear statement enables a programmer to remove a particular breakpoint
or all breakpoints in a program. Particular breakpoints are identified by the
number of the line on which they are active. All breakpoints in a program are
designated by the keyword PGM. The clear statement is also used to clear one or
all watch conditions. The keyword WATCH followed by the ALL keyword clears all
watch conditions. If a watch number is specified after the WATCH keyword, only
the watch represented by that watch number is cleared.</p>
<p>The following example shows a clear statement:</p>
<p><img src="RBAFX642.gif" alt="Clear statement"></p>
<p>For threaded applications, if a thread breakpoint is in effect at the
position specified, it is cleared in the current thread only. If the breakpoint
is a job breakpoint, it is cleared for the job. When the clear statement with
the PGM keyword is specified, it will remove all job and thread
breakpoints.</p>
<br>
<h3><a name="Header_234">Evaluate Statement</a></h3>
<p>The expression appearing in an evaluate statement is evaluated, and the
value of the expression is returned. The value of an expression is formatted
according to the expression type.</p>
<p>The following example shows an evaluate statement:</p>
<img src="delta.gif" alt="Start of change">
<p><img src="RBAFX643.gif" alt="Evaluate statement"></p>
<img src="deltaend.gif" alt="End of change">
<p>An evaluate statement allows a programmer to display the value of an
expression or an aggregate, or to alter the value of a variable. The precise
definition of what can be displayed or altered is dependent on the language of
the module being debugged.</p>
<p>Variables can be displayed or altered when program processing is suspended.
Program operation is temporarily suspended as a result of encountering a
breakpoint or completing a step statement. It is also suspended when a watch
condition is satisfied.</p>
<p>Variables are formatted according to their type recorded in the HLL symbol
table, and according to the language of the module being debugged. Formats
available include integer, hexadecimal, exponential, and address, among
others.</p>
<p>Variables also may be formatted using the formatting option. The formatting
option has the general form of: <em>:&lt;format code&gt; &lt;length&gt;</em>,
such as EVAL STRING :s 50.</p>
<p>The<em>:&lt;format code&gt;</em> can be one of the following:</p>
<table width="80%">
<tr>
<th align="left" valign="top">Format Code</th>
<th align="left" valign="top">Description</th>
</tr>
<tr>
<td valign="top" width="20%"><em>:c</em></td>
<td valign="top" width="80%">An EBCDIC single-character format</td>
</tr>
<tr>
<td valign="top"><em>:x</em></td>
<td valign="top">A hexadecimal format</td>
</tr>
<tr>
<td valign="top"><em>:s</em></td>
<td valign="top">An EBCDIC character-string format (only for the C and C++
languages)</td>
</tr>
<tr>
<td valign="top"><em>:f</em></td>
<td valign="top">An EBCDIC character-string format (only for the C and C++
languages). This returned type can be used by the source debugger to indicate
that alternative formatting was requested by the user.</td>
</tr>
<tr>
<td valign="top"><em>:a</em></td>
<td valign="top">An ASCII character-string format (only for the ILE languages).
The string is converted from the job CCSID's related-ASCII CCSID to the job
CCSID.</td>
</tr>
<tr>
<td valign="top"><em>:u</em></td>
<td valign="top">A Unicode character-string format (only for ILE languages).
The string is converted from Unicode CCSID 13488 to the job CCSID.</td>
</tr>
<tr>
<td valign="top"><img src="delta.gif" alt="Start of change"></td>
<td></td>
</tr>
<tr>
<td valign="top"><br><em>:w</em></td>
<td valign="top">A Unicode character-string format (only for the C and C++ languages).
The string is converted from Unicode CCSID 1232 to the job CCSID. </td>
</tr>
<tr>
<td valign="top"><img src="deltaend.gif" alt="End of change"></td>
<td></td>
</tr>
</table>
<p>The <em>&lt;length&gt;</em> is a positive integer that indicates the number
of bytes to format. The defaults for the format codes are as follows:</p>
<table width="80%">
<tr>
<th align="left" valign="top">Format Code</th>
<th align="left" valign="top">Default</th>
</tr>
<tr>
<td valign="top" width="20%"><em>:c</em></td>
<td valign="top" width="80%">1</td>
</tr>
<tr>
<td valign="top"><em>:x</em></td>
<td valign="top">The length of the expression value</td>
</tr>
<tr>
<td valign="top"><em>:s</em></td>
<td valign="top">30</td>
</tr>
<tr>
<td valign="top"><em>:f</em></td>
<td valign="top">1024</td>
</tr>
<tr>
<td valign="top"><em>:a</em></td>
<td valign="top">1024</td>
</tr>
<tr>
<td valign="top"><em>:u</em></td>
<td valign="top">1024</td>
</tr>
<tr>
<td valign="top"><img src="delta.gif" alt="Start of change"></td>
<td></td>
</tr>
<tr>
<td valign="top"><em>:w</em></td>
<td valign="top">1024</td>
</tr>
<tr>
<td valign="top"><img src="deltaend.gif" alt="End of change"></td>
<td></td>
</tr>
</table>
<p>
<img src="delta.gif" alt="Start of change">
Specification of the %LOCALVARS keyword will result in the evaluation of
every variable originating in the current scope.
<img src="deltaend.gif" alt="End of change">
</p>
<p>The locality of variables that appear in an evaluate statement is defined by
the most recently run qualify statement. The program calling this API is
advised to issue a qualify statement that defines the stop position when
program operation is suspended.</p>
<p>EVAL may be replaced by the reserved word LIST in the statement that defines
the evaluate statement.</p>
<img src="delta.gif" alt="Start of change">
<p><img src="RBAFX655.gif" alt="Defining the evaluate statement"></p>
<img src="deltaend.gif" alt="End of change">
<p>The following table describes the formatting of data by type.</p>
<table border width="80%">
<tr>
<th align="left" valign="top" colspan="3"><em><a name="TBLDLTB50">Presentation
Formats</a></em></th>
</tr>
<tr>
<th align="left" valign="top">Type</th>
<th align="left" valign="top">Format</th>
<th align="left" valign="top">Example</th>
</tr>
<tr>
<td align="left" valign="top" width="30%">kChar__8_E</td>
<td align="left" valign="top" width="30%">c</td>
<td align="left" valign="top" width="40%">A</td>
</tr>
<tr>
<td align="left" valign="top">kChar_16_E</td>
<td align="left" valign="top">Shift-out cc... shift-in</td>
<td align="left" valign="top">&nbsp;</td>
</tr>
<tr>
<td align="left" valign="top">kEnum____E</td>
<td align="left" valign="top">ccccc (dd)</td>
<td align="left" valign="top">yellow (25)</td>
</tr>
<tr>
<td align="left" valign="top">kString__E</td>
<td align="left" valign="top">ccccccccc</td>
<td align="left" valign="top">Hello World</td>
</tr>
<tr>
<td align="left" valign="top">kInt_32__E</td>
<td align="left" valign="top">-dd...d<br>
dd...d</td>
<td align="left" valign="top">-676</td>
</tr>
<tr>
<td align="left" valign="top">kPacked__E</td>
<td align="left" valign="top">dd.ddd<br>
-dd.ddd</td>
<td align="left" valign="top">5678.01</td>
</tr>
<tr>
<td align="left" valign="top">kZonedTE_E</td>
<td align="left" valign="top">dd.ddd<br>
-dd.ddd</td>
<td align="left" valign="top">5678.01</td>
</tr>
<tr>
<td align="left" valign="top">kZonedTS_E</td>
<td align="left" valign="top">dd.ddd<br>
-dd.ddd</td>
<td align="left" valign="top">5678.01</td>
</tr>
<tr>
<td align="left" valign="top">kZonedLE_E</td>
<td align="left" valign="top">dd.ddd<br>
-dd.ddd</td>
<td align="left" valign="top">5678.01</td>
</tr>
<tr>
<td align="left" valign="top">kZonedLS_E</td>
<td align="left" valign="top">dd.ddd<br>
-dd.ddd</td>
<td align="left" valign="top">5678.01</td>
</tr>
<tr>
<td align="left" valign="top">kBinD_16_E</td>
<td align="left" valign="top">dd.ddd<br>
-dd.ddd</td>
<td align="left" valign="top">5678.01</td>
</tr>
<tr>
<td align="left" valign="top">kBinD_32_E</td>
<td align="left" valign="top">dd.ddd<br>
-dd.ddd</td>
<td align="left" valign="top">5678.01</td>
</tr>
<tr>
<td align="left" valign="top">kBinD_64_E</td>
<td align="left" valign="top">dd.ddd<br>
-dd.ddd</td>
<td align="left" valign="top">5678.01</td>
</tr>
<tr>
<td align="left" valign="top">kFixedL__E</td>
<td align="left" valign="top">ccccc</td>
<td align="left" valign="top">Hello World</td>
</tr>
<tr>
<td align="left" valign="top">kHex_____E</td>
<td align="left" valign="top">xx xx xx xx</td>
<td align="left" valign="top">F1 F2 F3</td>
</tr>
<tr>
<td align="left" valign="top">kCard_32_E</td>
<td align="left" valign="top">dd...d</td>
<td align="left" valign="top">546</td>
</tr>
<tr>
<td align="left" valign="top">kReal_64_E</td>
<td align="left" valign="top">+d.d...dE+dd<br>
-d.d...dE-dd</td>
<td align="left" valign="top">-1.2345678901234E-95</td>
</tr>
<tr>
<td align="left" valign="top">KSpcPtr__E</td>
<td align="left" valign="top">Pointer types:<br>
BEP (behavior)<br>
IVP (invocation)<br>
LBL (label)<br>
MTP (method)<br>
OBP (object)<br>
PRP (procedure)<br>
SPP (space)<br>
SYP (system)</td>
<td align="left" valign="top">SPP:*NULL<br>
IVP:COFE001001201003<br>
SPP:COCE100201021003</td>
</tr>
</table>
<p>For threaded applications, the EVAL statement is run in the current
thread.</p>
<br>
<h3><a name="Header_235">Locality</a></h3>
<p>Locality is the term used to describe the range over which an entity may be
referred to in a module. The terms locality and scope are synonymous. By this
definition, the locality of an entity is always confined to the compilation
unit in which it was declared.</p>
<p>Entity is a formal way of describing all things that can be declared in a
module. Variables, procedures, labels, types, and constants are entities.</p>
<p>The locality of an entity is defined by the block in which it is declared.
An entity is visible in the block in which it is declared and all subordinate
blocks. A variable can be referred to in the block in which it is declared.</p>
<p>An entity may be declared in a block that encloses other blocks. The entity
declared in the outer, enclosing block is visible in inner blocks if the name
does not collide with other entities in inner blocks. A variable declared in an
outer block can be referred to in an inner block if no variable of the same
name is declared in the inner block.</p>
<p>To fully qualify a particular locality in a program, both program and module
must be identified.</p>
<br>
<h3><a name="Header_236">Qualify Statement</a></h3>
<p>The qualify statement permits a programmer to define the locality of
variables that appear in succeeding evaluate statements. Locality is defined by
the line number operand on the qualify statement. The locality assigned is that
block in which the line number appears.</p>
<p>The following example shows a qualify statement:</p>
<p><img src="RBAFX660.gif" alt="Qualify statement"></p>
<p>The locality assigned when a qualify statement is issued remains in effect
until the next qualify statement is issued. The Submit Debug Command API keeps
the locality assigned for the purpose of evaluating expressions. Users of the
Submit Debug Command API are advised to issue the qualify statement whenever
program operation is suspended. Use the line number of the stopped position to
identify the current locality. In this way, programmers may issue several
evaluate statements that refer to variables that are defined in the locality of
the stopped position.</p>
<p>For threaded applications, the QUAL statement is run in the current
thread.</p>
<br>
<h3><a name="Header_241">SBreak Statement</a></h3>
<p>The sbreak statement permits a programmer to enter a service entry
breakpoint. Service entry breakpoints are entered on the program about to be
spawned by another program. When the spawned program encounters a service entry
breakpoint, operation is suspended.</p>
<p>The following example shows a sbreak statement:</p>
<p><img src="rbafx661.gif" alt="SBreak statement"></p>
<p>The position marks where program operation is suspended when a service entry
breakpoint is encountered. Line numbers are used to identify the position when
the sbreak statement is entered. The line number entered is mapped to a
statement by the Submit Debug Command API. A service entry breakpoint causes
the program to stop just before the sbreak statement is run.</p>
<p>The userid specifies the user profile under which a job must be executing
for the service entry point being set to be active in that job. If the userid
is not specified, it defaults to the user profile under which the job in which
the sbreak command is issued is running.</p>
<p>A service entry point, job breakpoint or thread breakpoint cannot exist at
the same time at the same position. Only one of the three types of breakpoints
may exist at a specified position. If the sbreak command is issued for a
position in which one of the three types of breakpoints already exists, the
existing breakpoint will be replaced by the service entry point.</p>
<br>
<h3><a name="Header_237">Step Statement</a></h3>
<p>The step statement permits a programmer to run one or more statements of the
program under investigation for testing purposes. The program being tested runs
the number of statements specified in the statement-count operand. Operation of
the program under test is suspended at completion of the step statement.</p>
<p>The following example shows a step statement:</p>
<img src="RBAFX637.gif" alt="Step statement">
<p>If no value is entered for the statement-count, one statement is run.</p>
<p>The reserved words OVER and INTO direct the source debugger to step over or
into procedures, respectively. If OVER appears in a step statement, the source
debugger does not suspend operation in any procedures that are called.
Procedures and functions are run without interruption.</p>
<p>The INTO reserved word directs the source debugger to stop in procedures
that are called.</p>
<p>If neither INTO or OVER is entered on the step statement, OVER is
assumed.</p>
<p>There are some step limitations. The following code cannot be entered using
the step statement:</p>
<ul>
<li>Procedures in modules that have no debug data.<br>
<br>
</li>
<li>Modules that are optimized at level 40.</li>
</ul>
<p>For threaded applications, the STEP statement is run in the current thread.
Each thread can step independently of each other, at the same time.</p>
<br>
<h3><a name="Header_238">TBreak Statement</a></h3>
<p>The tbreak statement permits a programmer to enter a breakpoint for the
current thread. Breakpoints are entered on the program under investigation.
When the program under investigation encounters a breakpoint in the thread,
operation is suspended. The tbreak statement has the same format and operation
as the break statement.</p>
<p>Each thread in a threaded application may have a different thread breakpoint
at the same position. Job breakpoints and thread breakpoints cannot
coexist.</p>
<p>A tbreak statement entered at the same position as a tbreak that was
specified earlier in the same thread is replaced by the new thread
breakpoint.</p>
<p>A tbreak statement entered at the same position as a job breakpoint that was
specified earlier replaces the job breakpoint with a thread breakpoint.</p>
<p>A break statement entered at the same position as thread breakpoints that
were specified earlier replaces all thread breakpoints at that position with a
job breakpoint that is in effect for all threads.</p>
<br>
<h3><a name="Header_239">Watch Statement</a></h3>
<p>The watch statement permits a programmer to request a breakpoint when the
content of a specified storage location is changed from its current value.
After the watch condition is successfully set, a change to the content of the
watched storage location causes program operation to be suspended. Then the
Program Stop Handler exit program that is specified on the Start Source Debug
API is called.</p>
<p>The following shows the syntax of the watch statement:</p>
<p><img src="RBAFX638.gif" alt="Watch statement"></p>
<p>The expression is used to determine the address of the storage location to
watch. The expression must resolve to an lvalue (that is, a location that can
be assigned to). If an expression is specified that is not supported, error
code CPF7E62 is returned. The scope of the expression variables in a watch
statement is defined by the most recently issued QUAL debug language
statement.</p>
<p>The length of the watch comparison operation is the same as the expression
type length, or the length specified with the optional watch length parameter.
For example, if a 4-byte binary integer is specified without the watch length
parameter, the comparison length is 4 bytes. If the watch length parameter is
specified, it overrides the length of the expression in determining the watch
length. The watch length specification format is a colon character followed by
the length in bytes to watch. For example, the watch command below would watch
2 bytes starting at the first byte of variable i:</p>
<p>watch i : 2</p>
<p>The watch length must be in the range 1 through 128 bytes. If the watch
length is not valid, error code CPF7E63 is returned.</p>
<p>The maximum number of watches that can be active across the entire system is
guaranteed to be at least 128, but may range up through 256, depending on how
the watched storage is mapped by the system. This includes dedicated service
tools (DST) watches. Exceeding this number results in error code CPF8E2C being
returned. A user session may have as many watches as are available.</p>
<p>There are some restrictions on overlapping watch locations. If any of the
following conditions are true, error code CPF8E2B is returned:</p>
<ul>
<li>Watches in same job: Two watch locations may not overlap in any way.<br>
<br>
</li>
<li>Watches in different jobs: Two watch locations may not start at the same
storage address. Otherwise, overlap is permitted.</li>
</ul>
<p>A watch condition is cleared by using the CLEAR debug language
statement.</p>
<p>It is important to understand that the watch statement establishes the
watched storage location address when the watch statement is entered, and it
does not change. This can cause misleading results if a temporary storage
location is watched and that storage location is reused while the application
is running. An example of this is the automatic storage of an ILE C procedure,
which can be reused if the procedure ends.</p>
<p>The WATCH debug statement cannot be specified with any other debug
statement, including another WATCH statement.</p>
<p>For threaded applications, the WATCH statement is run in the current thread.
The address watched is global to all threads. Any thread changing a watched
location will cause a breakpoint in that thread.</p>
<hr>
API introduced: V2R3
<hr>
<table align="center" cellpadding="2" cellspacing="2">
<tr align="center">
<td valign="middle" align="center"><a href="#Top_Of_Page">Top</a> | <a href=
"debug1.htm">Debugger APIs</a> | <a href="aplist.htm">APIs by category</a></td>
</tr>
</table>
</body>
</html>