Ease of Use
The Xray system is easy to use being menu and PF key driven system with on-line help screens. The interactive screens that highlight error conditions are easy to understand making the system an outstanding learning aid for junior programmers who can easily follow program logic and get around the problems always encountered by new programmers.

Point and Click
Wherever feasible, commands are effected by positioning the cursor and then pressing an appropriate function key to cause a command to be executed. This technique is used on all menus to select a function, on source displays to select variables for display, on source and link data directories to select source or link data for display, and on other displays to select items for expansion or deletion.

Menu Based Command Structure
All Xray facilities are accessible via clearly informative menu screens. Each menu provides an indication of the functions available to allow easy use of them. Options may be selected from a menu by positioning the cursor on the appropriate line and pressing the ZOOM PF key. Alternatively the option number shown on the left of the option description may be typed into the command field that is present on every Xray display.

Each line on the menu also shows the fast path id associated with the option. These fast path ids can be used by more experienced users to navigate directly to any Xray display from any point in the system.

Program Monitoring
Provides abend interception, wild branch detection and loop detection. Any program check or abend request in a monitored program results in a stop display at the point of the abend. Similarly any attempt by the program to branch to a random point results in a stop display showing details of the wild branch.

Limits may be set on the number of instructions that may be executed between program halts. If the limit is exceeded, an automatic halt occurs. This allows the detection of program loops even when they involve I/O requests..

Source Level Debugging
The programmer's source code is captured at compile time and stored on the Xray source file. It can then be displayed on-line and used for the setting of halt points during a debugging session. Halt points are set and reset by simply typing a one character command on the statement number of the displayed source.

When a stop is encountered, the source at that point is displayed together with the value of variables referenced in the current statement. These values can be altered by simply typing the new value.

For COBOL programs an expanded view of data structures can be displayed using the GROUP command. This gives a fully formatted display including all data types and subscripted areas.

Control Debugging and Execution using line commands
A debug session is made easy using LINE commands. You can control where execution of a program is halted, specify special halt conditions, and even alter the logic flow of the program using single character LINE commands. All of this can be done while viewing the source code of the program.

Unconditional halts always cause the program to be stopped and are easily set by typing a one character command on the appropriate program statement number when the source is displayed. They can also be set using an Add Halt Point display where certain specialized halt offsets such as START can be used.

When a halt point is reached a stop for a 'halt request' is presented giving details of the current statement and variables referred to by the statement

When any halt occurs, all Xray debugging facilities are available for the examination and alteration of data in storage and of program code. This enables errors to be detected and corrected or changes made to ensure execution of particular sections of code.

After each halt the programmer may terminate the batch job, produce a dump, continue execution normally, STEP through the program by statement or instruction, or even continue from a different point in the program.

Conditional Halt Points
Conditional halts are also easily set by typing a one character command on the appropriate program statement. For a conditional halt however, a secondary screen is displayed to enable the condition to be provided. This is normally is the form of a comparison but may also include limits to the number of times a halt will occur and how often the halt will occur.

Conditional halts can also be set that are independent of any program statement using the Add Halt Point display. This can be especially useful to detect where a variable is changed or is set to a particular value.

Define Items to be Displayed on Demand
Storage areas or program variables may be selected to be displayed at each program stop by defining them as Keep items. This is easily achieved by positioning the cursor on the name of a variable shown on a source display and pressing the appropriate function key. Once defined a keep item may be displayed in a data window on the Stop Display or in response to the K (keep) command. The items may be displayed either by value (i.e. in accordance with the data definition for the item) or in hex. There is no limit to the number of items that may be defined in this way.

Display and Modify Data in Storage
Storage areas or program variables may be displayed and altered singly or collectively in a number of ways. The display may occur as the result of a direct display command, as the result of a variable being acted upon by the current program statement, as the result of a Group variable display command or a Keep item display command. However, the data display originates, the data displayed may be changed simply by over-typing the existing value. If data is displayed in hex and character format, changes can be made to either form of the display. This makes it possible to assign incorrect values to areas to help test data analysis logic. When displayed data cannot be changed for any reason, the displayed data will be protected to prevent changes.

Debug Subprograms
In the situation where multiple components of a program are to be debugged simultaneously, Xray permits halt points to be established in any component of the program whether statically linked to the main program or called dynamically. For statically linked components it is important that the link map for the program is stored on the source file to enable the names and locations of each component to be established. For dynamically called programs, halt points can be established before the program is loaded and will be held as inactive by Xray until the program is loaded at which point they will become active an cause a stop when a halt point is reached.

Alter Program Execution Path
At a program stop for whatever reason execution can be continued at a point other that at which the program was last halted. This allows the bypassing of erroneous code, the simulation of conditions which are hard to create and the testing of infrequently used logic paths.

Single-Stepping
At a halt, program execution may be continued by instruction stepping with a further halt after each step. A step may be one or more program statements or machine instructions. It is also possible to step immediately to a specified location in a halted program. Stepping is normally confined to the current program module to avoid stepping through compiler generate logic needed to handle complex statements. However, the scope of the stepping operation can be widened to encompass the whole program or multiple programs.

Program Flow Analysis
Xray maintains a table of the most recent branches taken during program execution. At any stop point the flow command can be used to display this information to show the program's recent execution path and from that it is possible to determine why the program reached the stop point and whether it has reached that point correctly or as the result of a logic error. The display identifies the 'from' and 'to' statement numbers when source data is available and the names of called modules when link edit data is available.

Modification Log
Any changes made to storage areas when using Xray are logged to a CICS transient data destination. The log identifies the individual that made the change and identifies the time at which the change was made and the terminal used to make the change.