Abstract for Language Environment Debugging Guide
Summary of changes
Summary of changes
Summary of changes
Introduction to debugging in Language Environment
Preparing your routine for debugging
Setting compiler options
XL C and XL C++ compiler options
COBOL compiler options
Fortran compiler options
PL/I compiler options
Enterprise PL/I for z/OS compiler options
Using Language Environment runtime options
Determining runtime options in effect
Understanding the HEAPZONES and HEAPCHK runtime options
Using the CLER CICS transaction to display and set runtime options
Controlling storage allocation
Stack storage statistics
Determining the applicable threads
Allocating stack storage
Heap storage statistics
HEAPPOOLS storage statistics
Modifying condition handling behavior
Language Environment callable services
Language Environment runtime options
Customizing condition handlers
Invoking the assembler user exit
Establishing enclave termination behavior for unhandled conditions
Using messages in your routine
C/C++
COBOL
Fortran
PL/I
Using condition information
Using the feedback code parameter
Using the symbolic feedback code
Classifying errors
Identifying problems in routines
Language Environment module names
Common errors in routines
Interpreting runtime messages
Message prefix
Message number
Severity code
Message text
Understanding abend codes
User abends
System abends
Using edcmtext to obtain information about errno2 values
Format
Description
Usage notes
Message returns
Examples
Exit Values
Using Language Environment debugging facilities
Debug tools
Language Environment dump service, CEE3DMP
Generating a Language Environment dump with CEE3DMP
Generating a Language Environment dump with TERMTHDACT
Considerations for setting TERMTHDACT options
Generating a Language Environment dump with language-specific functions
Understanding the Language Environment dump
Sections of the Language Environment dump
Debugging with specific sections of the Language Environment dump
Tracebacks, condition information, and data values section
Upward-growing (non-XPLINK) stack frame section
Downward-growing (XPLINK) stack frame section
Common Anchor Area
Condition information block
Using the machine state information block
Using the DLL failure control block
Multiple enclave dumps
Generating a system dump
Steps for generating a system dump in a batch runtime environment
Steps for generating a system dump in an IMS runtime environment
Steps for generating a system dump in a CICS runtime environment
Steps for generating a Language Environment U4039 abend
Steps for generating a system dump in a z/OS UNIX shell
Formatting and analyzing system dumps
Preparing to use the Language Environment support for IPCS
Understanding Language Environment IPCS VERBEXIT – LEDATA
Understanding the Language Environment IPCS VERBEXIT LEDATA output
Sections of the Language Environment LEDATA VERBEXIT formatted output
PTBL LEDATA output
Understanding the HEAP LEDATA output
Heap report sections of the LEDATA output
Diagnosing heap damage problems
Diagnosing storage leak problems
Diagnosing heap fragmentation problems
Understanding the heap pools LEDATA output
Heap pools report sections of the LEDATA output
Understanding the heap pools trace LEDATA output
Understanding the C/C++-specific LEDATA output
Understanding the COBOL-specific LEDATA output
Understanding the PL/I-specific LEDATA output
Formatting individual control blocks
Requesting a Language Environment trace for debugging
Locating the trace dump
Using the Language Environment trace table format in a dump report
Understanding the trace table entry (TTE)
Member-specific information in the trace table entry
When LE=1 is specified
When LE=2 is specified
When LE=3 is specified
When LE=8 is specified
When LE=20 is specified
Sample dump for the trace table entry
Requesting a UNIX System Services syscall trace for debugging
Debugging language-specific routines
Debugging C/C++ routines
Debugging C/C++ programs
Using the __amrc and __amrc2 structures to debug input/output
__last_op values
Using file I/O tracing to debug C/C++ file I/O problems
Displaying an error message with the perror() function
Using __errno2() to diagnose application problems
Diagnosing DLL problems
Using C/C++ listings
Finding variables
Steps for finding automatic variables
Locating the Writable Static Area (WSA)
Steps for finding the static storage area
Steps for finding RENT static variables
Steps for finding external RENT variables
Steps for finding NORENT static variables
Steps for finding external NORENT variables
Steps for finding the C/370 parameter list
Steps for finding the C++ parameter list
Steps for finding members of aggregates
Finding the timestamp
Generating a Language Environment dump of a C/C++ routine
cdump()
csnap()
ctrace()
Sample C routine that calls cdump()
Sample C++ routine that generates a Language Environment dump
Sample Language Environment dump with C/C++-specific information
Finding C/C++ information in a Language Environment dump
Memory file control block
Additional Floating-Point registers
Registers on entry to CEE3DMP
Parameters, registers, and variables for active routines
Condition information for active routines
Vector registers
Registers on entry to CEE3DMP
Parameters, registers, and variables for active routines
Condition information for active routines
Sample Language Environment dump with XPLINK-specific information
Example dump of calling between XPLINK and non-XPLINK programs
Finding XPLINK information in a Language Environment dump
C/C++ contents of the Language Environment trace tables
Debugging examples of C/C++ routines
Divide-by-zero error
Calling a nonexistent non-XPLINK function
Calling a nonexistent XPLINK function
Sections of the dump from example C routine (calling a nonexistent XPLINK function)
Handling dumps written to the z/OS UNIX file system
Multithreading consideration
Understanding C/C++ heap information in storage reports
Language Environment storage report with heap pools statistics
HEAPPOOLS storage statistics
HEAPPOOLS statistics
HEAPPOOLS summary
C function __uheapreport() storage report
User-created HeapPools statistics
HeapPools summary
MEMCHECK VHM memory leak analysis tool
Invoking MEMCHECK VHM
MEMCHECK VHM environment variables
MEMCHECK VHM report sample scenario
MEMCHECK VHM report examples
Debugging COBOL programs
Determining the source of error
Tracing program logic
Finding input/output errors
Handling input/output errors
Validating data (class test)
Assessing switch problems
Generating information about procedures
Using COBOL listings
Generating a Language Environment dump of a COBOL program
COBOL program that calls another COBOL program
COBOL program that calls the Language Environment CEE3DMP callable service
Sample Language Environment dump with COBOL-specific information
Finding COBOL information in a dump
Control block information for active routines
Storage for each active routine
Storage for active COBOL programs
Enclave-level data
Process-level data
Debugging example COBOL programs
Subscript range error
Sections of Language Environment dump for COBOLX
Calling a nonexistent subroutine
Divide-by-zero error
Sections of Language Environment dump for program COBOLZ1
Debugging Fortran routines
Determining the source of errors in Fortran routines
Identifying runtime errors
Using Fortran compiler listings
Generating a Language Environment dump of a Fortran routine
DUMP/PDUMP subroutines
Usage considerations for DUMP/PDUMP
CDUMP/CPDUMP subroutines
Usage considerations for CDUMP/CPDUMP
SDUMP subroutine
Usage considerations for SDUMP
Finding Fortran information in a Language Environment dump
Examples of debugging Fortran routines
Calling a nonexistent routine
Divide-by-zero error
Debugging PL/I for MVS & VM routines
Determining the source of errors in PL/I for MVS & VM routines
Logic errors in the source routine
Invalid use of PL/I for MVS & VM
Unforeseen errors
Invalid input data
Compiler or runtime routine malfunction
System malfunction
Unidentified routine malfunction
Storage overlay problems
Using PL/I for MVS & VM compiler listings
Generating PL/I for MVS & VM listings and maps
Finding information in PL/I for MVS & VM listings
Static internal storage map
Variable storage map
Object code listing
Generating a Language Environment dump of a PL/I for MVS & VM routine
PLIDUMP syntax and options
PLIDUMP usage notes
Finding PL/I for MVS & VM information in a dump
Traceback
PL/I for MVS & VM task traceback
Condition information
Statement number and address where error occurred
Control blocks for active routines
Automatic variables
Static variables
Based variables
Area variables
Variables in areas
Contents of parameter lists
Timestamp
Control blocks associated with the thread
CAA address
File status and attribute information
PL/I for MVS & VM contents of the Language Environment trace table
Debugging example of PL/I for MVS & VM routines
Subscript range error
Calling a nonexistent subroutine
Divide-by-zero error
Debugging Enterprise PL/I routines
Determining the source of errors in Enterprise PL/I routines
Logic errors in the source routine
Invalid use of Enterprise PL/I
Unforeseen errors
Invalid input data
Compiler or runtime routine malfunction
System malfunction
Unidentified routine malfunction
Storage overlay problems
Using Enterprise PL/I compiler listings
Generating Enterprise PL/I listings and maps
Finding information in Enterprise PL/I listings
Pseudo assembly listing
External symbol dictionary
External symbol cross reference
Storage offset listing
Static map
Automatic map
Generating a Language Environment dump of an Enterprise PL/I routine
PLIDUMP syntax and options
PLIDUMP usage notes
Finding Enterprise PL/I information in a dump
Traceback
Condition information
Statement number and address where error occurred
Control blocks for active routines
Automatic variables
Static variables
Based variables
Area variables
Variables in areas
Contents of parameter lists
Control blocks associated with the thread
CAA address
File status and attribute information
Enterprise PL/I contents of the Language Environment trace table
Debugging example of Enterprise PL/I routines
Subscript range error
Calling a nonexistent subroutine
Divide-by-zero error
Debugging under CICS
Accessing debugging information
Locating Language Environment runtime messages
Locating the Language Environment traceback
Locating the Language Environment dump
Using CICS transaction dump
Using CICS register and program status word contents
Using Language Environment abend and reason codes
Using Language Environment return codes to CICS
Activating Language Environment feature trace records under CICS
Ensuring transaction rollback
Finding data when Language Environment returns a nonzero return code
Finding data when Language Environment abends internally
Finding data when Language Environment abends from an EXEC CICS command
Displaying and modifying runtime options with the CLER transaction
Debugging Language Environment AMODE 64 applications
Preparing your AMODE 64 application for debugging
Setting compiler options
XL C and XL C++ compiler options for AMODE 64 applications
Using Language Environment runtime options
Determining runtime options in effect
Understanding the HEAPZONES and HEAPCHK runtime options
Controlling storage allocation
Storage statistics for AMODE 64 applications
Stack storage statistics for AMODE 64 applications
STACK64 and THREADSTACK64 statistics
Determining the applicable threads
Allocating stack storage
Heap storage statistics
HEAP64, LIBHEAP64, and IOHEAP64 statistics
Heap pools storage statistics
Modifying exception handling behavior
Language Environment application program interfaces (API)
Language Environment runtime options
Customizing exception handlers
Using condition information
Using the feedback code parameter
Using the symbolic feedback code
Classifying AMODE 64 application errors
Identifying problems in routines
Language Environment module names
Common errors in routines
Interpreting runtime messages
Message prefix
Message number
Severity code
Message text
Understanding abend codes
User abends
System abends
Using Language Environment AMODE 64 debugging facilities
Debugging tools
Language Environment dumps
Generating a Language Environment dump with TERMTHDACT
Considerations for setting TERMTHDACT options
Generating a Language Environment dump with language-specific functions
Understanding the Language Environment dump
Sections of the Language Environment dump
Generating a system dump
Steps for generating a system dump in a batch runtime environment
Steps for generating a system dump in a z/OS UNIX shell
Formatting and analyzing system dumps
Preparing to use the Language Environment support for IPCS
Understanding Language Environment IPCS VERBEXIT – LEDATA
Report type parameters
Data selection parameters
Control block selection parameters
Examples
Understanding the Language Environment IPCS VERBEXIT LEDATA output
Sections of the Language Environment LEDATA VERBEXIT formatted output
PTBL LEDATA output
Understanding the HEAP LEDATA output
Heap report sections of the LEDATA output
Diagnosing heap damage problems
Diagnosing storage leak problems
Diagnosing heap fragmentation problems
Understanding the heap pool LEDATA output
Heap pool report sections of the LEDATA output
Understanding the heap pools trace LEDATA output
Understanding the C/C++-specific LEDATA output
C/C++-specific sections of the LEDATA output
Understanding the AUTH LEDATA output
Sections of the AUTH LEDATA VERBEXIT formatted output
Formatting individual control blocks
Requesting a Language Environment trace for debugging
Locating the trace dump
Using the Language Environment trace table format in a dump report
Understanding the trace table entry (TTE)
Member-specific information in the trace table entry
When LE=1 is specified
When LE=2 is specified
When LE=3 is specified
When LE=8 is specified
Sample dump for the trace table entry
Requesting a UNIX System Services syscall trace for debugging
Debugging AMODE 64 C/C++ routines
Debugging C/C++ programs
Using the __amrc and __amrc2 structures to debug input/output
__last_op values
Using file I/O tracing to debug C/C++ file I/O problems
Displaying an error message with the perror() function
Using __errno2() to diagnose application problems
Using C/C++ listings
Finding variables
Steps for finding automatic variables
Steps for finding C/C++ parameters
Steps for finding members of aggregates
Generating a Language Environment dump of a C/C++ routine
cdump()
csnap()
ctrace()
Sample C routine that calls cdump()
Sample C++ routine that generates a Language Environment dump
Sample Language Environment dump with C/C++-specific information
C/C++ contents of the Language Environment trace tables
Debugging examples of C/C++ routines
Divide-by-zero error
Calling a nonexistent function
Handling dumps written to the z/OS UNIX file system
Multithreading consideration
Understanding C/C++ heap information in storage reports
Language Environmentstorage report with heap pools statistics
HEAPPOOLS64 storage statistics
HEAPPOOLS64 statistics
HEAPPOOLS64 summary
HEAPPOOLS storage statistics
HEAPPOOLS statistics
HEAPPOOLS summary
C function __uheapreport() storage report
User-created HeapPools statistics
HeapPools summary
Diagnosing problems with Language Environment
Diagnosis checklist
Locating the name of the failing routine for a non-XPLINK application
Searching the IBM Software Support Database
Preparing documentation for an authorized program analysis report (APAR)