This section describes some problems you might encounter while you try to debug complex applications and some possible solutions.
Debug Tool obtains information about programs in memory by using binder APIs. The binder APIs must access information stored in the data set containing the load module or program object. In most cases, z/OS® can provide Debug Tool the data set name from which the program was loaded so Debug Tool can pass it to the binder APIs. However, z/OS does not have this information for programs loaded from LLA.
When Debug Tool attempts to debug a program loaded from LLA, Debug Tool does the following steps:
The following restrictions apply:
Debug Tool assumes that load module and compile unit names that begin with specific prefixes are system components. For example, EQAxxxxx is a Debug Tool module, CEExxxxx is a Language Environment module, and IGZxxxxx is a COBOL module.
Debug Tool does not try to debug load modules or compile units that have these prefixes for the following reasons:
If you have named a user load module or compile unit with a prefix that conflicts with one of these system prefixes, you can use the NAMES INCLUDE command and the instructions described in this section to debug this load module or compile unit.
You can display a list of prefixes that Debug Tool recognizes as system prefixes by using the following commands:
NAMES DISPLAY ALL EXCLUDED LOADMODS; NAMES DISPLAY ALL EXCLUDED CUS;
These commands display a list of names currently excluded at your request (by using the NAMES EXCLUDE command), followed by a section displaying a list of names excluded by Debug Tool.
Refer to the following topics for more information related to the material discussed in this topic.
If the name of your program begins with one of the prefixes excluded by Debug Tool, use the NAMES INCLUDE command to indicate to Debug Tool that your program is a user load module or compile unit, not a system program.
Refer to the following topics for more information related to the material discussed in this topic.
Some programs contain load modules or compile units that have no executable code. These modules are known as data-only modules. These modules are prevalent in assembler programs. In some situations, Debug Tool might not recognize that these modules contain no executable instructions and attempt to set a breakpoint, which means overlaying the contents of these modules.
In these situations, you can use the NAMES EXCLUDE command to indicate to Debug Tool that these are data-only modules that contain no executable code. Debug Tool will not attempt to set breakpoints in these data-only modules. If the NAMES EXCLUDE command is used to exclude a module that contains executable instructions, the module might still appear in Debug Tool and Debug Tool might still attempt to set breakpoints in the modules.
Refer to the following topics for more information related to the material discussed in this topic.
Debug Tool was designed is to implicitly load the debug data for any compile units compiled with the TEST or DEBUG compiler option. However, some very large applications can contain a large number of load modules or compile units that you do not need to debug. In some cases, the creation and manipulation of debug data for these load modules or compile units can consume a significant amount of memory, CPU time, and other resources.
You can handle this situation in one of the following ways:
By default, Debug Tool automatically loads debug data whenever it encounters a high-level language compile unit compiled with the TEST or DEBUG compiler option. In most cases, this is the most convenient mode of operation because you do not have to decide in advance which load modules and compile units you want to debug. However, in some complex applications, manipulating this data might cause a significant performance impact. In this case, you can use explicit debug mode to load debug data only for compile units that you indicate you want to debug.
You enable explicit debug mode by entering the SET EXPLICITDEBUG ON command or by specifying the EQAOPTS EXPLICITDEBUG command. By default, this mode is OFF. In explicit debug mode, (except for cases described below) you must use the LOADDEBUGDATA (LDD) command to cause Debug Tool to load the debug data for the compile units that you want to debug.
In most cases, you can use the SET EXPLICTDEBUG command to enable explicit debug mode; however, in some cases you might need to use the EQAOPTS EXPLICITDEBUG command. Because Debug Tool does not process commands until after it processes the initial load module and all the compile units it contains, if you want Debug Tool to not load debug data for compile units in the initial load module, use the EQAOPTS EXPLICITDEBUG command.
When explicit debug mode is active, Debug Tool loads debug data in only the following cases:
Debug Tool does not support the SET DISASSEMBLY ON command in explicit debug mode. When explicit debug mode is active, Debug Tool forces SET DISASSEMBLY OFF and you will not be able to set it back to ON while in explicit debug mode.
In some cases, you might know that there are certain load modules or compile units that you do not want to debug. In this case, you can improve performance by informing Debug Tool to not load debug data for these load modules or compile units.
You can use the NAMES EXCLUDE command to indicate to Debug Tool that it does not need to maintain debug data for these modules. When you use the NAMES EXCLUDE command to exclude executable modules, there are situations where Debug Tool requires debug data for the excluded modules. The following list, while not comprehensive, describes some of the possible situations:
Also, when you enter a deferred AT ENTRY command, Debug Tool generates an implicit NAMES INCLUDE command for the load module and compile unit that is the target of the deferred AT ENTRY. If these names appear later in the program, Debug Tool will not exclude them even if you specified them in a previous NAMES EXCLUDE command.
In all of the above situations, Debug Tool loads debug data as required and these modules might become known to Debug Tool.
Refer to the following topics for more information related to the material discussed in this topic.
Use the NAMES DISPLAY command to display the current settings of the NAMES command.
Refer to the following topics for more information related to the material discussed in this topic.
You cannot use the NAMES command on load modules or compile units that are already known to Debug Tool; therefore, you cannot use the NAMES command to indicate to Debug Tool that you want to include or exclude the initial load module or the compile units contained in the initial load module. If you want to do this, you must specify the EQAOPTS NAMES command either at run time or through the EQAOPTS load module. To learn how to specify EQAOPTS commands, see the topic "EQAOPTS commands" in the Debug Tool Reference and Messages or Debug Tool Customization Guide.
Refer to the following topics for more information related to the material discussed in this topic.