MainframeMaster

COBOL Tutorial

COBOL EXHIBIT Statement

Legacy
Obsolete

The EXHIBIT statement represents a legacy debugging mechanism in COBOL programming, historically employed for program tracing, variable display, and execution monitoring during the development and maintenance phases of COBOL applications. While this statement served important debugging purposes in earlier COBOL implementations, modern development environments have superseded its functionality with more sophisticated debugging tools, integrated development environments, and enhanced DISPLAY statement capabilities that provide superior program analysis and troubleshooting capabilities.

Historical EXHIBIT Statement Usage

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
IDENTIFICATION DIVISION. PROGRAM-ID. EXHIBIT-LEGACY-DEMONSTRATION. DATA DIVISION. WORKING-STORAGE SECTION. 01 LEGACY-DEBUGGING-VARIABLES. 05 DEBUG-COUNTER PIC 9(5) VALUE 0. 05 PROCESSING-STATUS PIC X(10) VALUE 'STARTING'. 05 CURRENT-RECORD-ID PIC 9(6) VALUE 0. 05 CALCULATION-RESULT PIC 9(7)V99 VALUE 0. 05 ERROR-COUNT PIC 9(3) VALUE 0. 05 ITERATION-COUNT PIC 9(4) VALUE 0. 01 BUSINESS-DATA-FIELDS. 05 CUSTOMER-ID PIC 9(8) VALUE 12345678. 05 CUSTOMER-NAME PIC X(30) VALUE 'JOHN DOE ENTERPRISES'. 05 ACCOUNT-BALANCE PIC 9(9)V99 VALUE 15000.75. 05 TRANSACTION-AMOUNT PIC 9(7)V99 VALUE 2500.00. 05 TRANSACTION-TYPE PIC X(10) VALUE 'CREDIT'. 05 PROCESSING-DATE PIC 9(8) VALUE 20240115. 01 CONTROL-FLOW-VARIABLES. 05 LOOP-CONTROL PIC 9(3) VALUE 1. 05 CONDITION-FLAG PIC X VALUE 'Y'. 88 CONDITION-TRUE VALUE 'Y'. 88 CONDITION-FALSE VALUE 'N'. 05 BRANCH-INDICATOR PIC X(5) VALUE 'MAIN'. 05 SUBROUTINE-LEVEL PIC 9(2) VALUE 0. 01 PERFORMANCE-METRICS. 05 RECORDS-PROCESSED PIC 9(7) VALUE 0. 05 SUCCESSFUL-OPERATIONS PIC 9(7) VALUE 0. 05 FAILED-OPERATIONS PIC 9(5) VALUE 0. 05 EXECUTION-TIME PIC 9(6) VALUE 0. PROCEDURE DIVISION. MAIN-PROCESSING. *> Legacy EXHIBIT usage for program entry tracing EXHIBIT 'PROGRAM START' PROCESSING-STATUS PERFORM INITIALIZE-PROCESSING PERFORM DEMONSTRATE-EXHIBIT-VARIATIONS PERFORM BUSINESS-LOGIC-WITH-EXHIBIT PERFORM CLEANUP-PROCESSING *> Legacy EXHIBIT usage for program exit tracing EXHIBIT 'PROGRAM END' PROCESSING-STATUS STOP RUN. INITIALIZE-PROCESSING. MOVE 'INIT' TO PROCESSING-STATUS ADD 1 TO DEBUG-COUNTER *> Legacy EXHIBIT for initialization tracing EXHIBIT 'INITIALIZATION' DEBUG-COUNTER PROCESSING-STATUS MOVE 'READY' TO PROCESSING-STATUS DISPLAY 'Initialization completed'. DEMONSTRATE-EXHIBIT-VARIATIONS. MOVE 'DEMO' TO PROCESSING-STATUS *> Basic EXHIBIT usage - displaying single variable EXHIBIT 'CUSTOMER-ID' CUSTOMER-ID *> EXHIBIT with multiple variables EXHIBIT 'CUSTOMER-DATA' CUSTOMER-ID CUSTOMER-NAME ACCOUNT-BALANCE *> EXHIBIT with literal and variables EXHIBIT 'TRANSACTION-INFO' TRANSACTION-TYPE TRANSACTION-AMOUNT *> EXHIBIT in conditional processing IF ACCOUNT-BALANCE > 10000 EXHIBIT 'HIGH-BALANCE-CUSTOMER' CUSTOMER-ID ACCOUNT-BALANCE ELSE EXHIBIT 'STANDARD-CUSTOMER' CUSTOMER-ID ACCOUNT-BALANCE END-IF *> EXHIBIT in loop processing PERFORM VARYING LOOP-CONTROL FROM 1 BY 1 UNTIL LOOP-CONTROL > 5 ADD 1 TO ITERATION-COUNT EXHIBIT 'LOOP-ITERATION' LOOP-CONTROL ITERATION-COUNT END-PERFORM. BUSINESS-LOGIC-WITH-EXHIBIT. MOVE 'BUSINESS' TO PROCESSING-STATUS EXHIBIT 'BUSINESS-LOGIC-START' PROCESSING-STATUS PERFORM PROCESS-CUSTOMER-TRANSACTION PERFORM VALIDATE-BUSINESS-RULES PERFORM UPDATE-ACCOUNT-BALANCE MOVE 'COMPLETE' TO PROCESSING-STATUS EXHIBIT 'BUSINESS-LOGIC-END' PROCESSING-STATUS. PROCESS-CUSTOMER-TRANSACTION. ADD 1 TO SUBROUTINE-LEVEL EXHIBIT 'SUBROUTINE-ENTRY' SUBROUTINE-LEVEL ADD 1 TO CURRENT-RECORD-ID EXHIBIT 'PROCESSING-RECORD' CURRENT-RECORD-ID EVALUATE TRANSACTION-TYPE WHEN 'CREDIT' EXHIBIT 'CREDIT-TRANSACTION' TRANSACTION-AMOUNT PERFORM PROCESS-CREDIT-TRANSACTION WHEN 'DEBIT' EXHIBIT 'DEBIT-TRANSACTION' TRANSACTION-AMOUNT PERFORM PROCESS-DEBIT-TRANSACTION WHEN OTHER EXHIBIT 'UNKNOWN-TRANSACTION' TRANSACTION-TYPE ADD 1 TO ERROR-COUNT END-EVALUATE SUBTRACT 1 FROM SUBROUTINE-LEVEL EXHIBIT 'SUBROUTINE-EXIT' SUBROUTINE-LEVEL. PROCESS-CREDIT-TRANSACTION. EXHIBIT 'CREDIT-PROCESSING-START' ACCOUNT-BALANCE TRANSACTION-AMOUNT ADD TRANSACTION-AMOUNT TO ACCOUNT-BALANCE ADD 1 TO SUCCESSFUL-OPERATIONS EXHIBIT 'CREDIT-PROCESSING-END' ACCOUNT-BALANCE EXHIBIT 'CREDIT-SUCCESS' SUCCESSFUL-OPERATIONS. PROCESS-DEBIT-TRANSACTION. EXHIBIT 'DEBIT-PROCESSING-START' ACCOUNT-BALANCE TRANSACTION-AMOUNT IF ACCOUNT-BALANCE >= TRANSACTION-AMOUNT SUBTRACT TRANSACTION-AMOUNT FROM ACCOUNT-BALANCE ADD 1 TO SUCCESSFUL-OPERATIONS EXHIBIT 'DEBIT-SUCCESS' ACCOUNT-BALANCE SUCCESSFUL-OPERATIONS ELSE ADD 1 TO FAILED-OPERATIONS EXHIBIT 'INSUFFICIENT-FUNDS' ACCOUNT-BALANCE TRANSACTION-AMOUNT EXHIBIT 'DEBIT-FAILURE' FAILED-OPERATIONS END-IF. VALIDATE-BUSINESS-RULES. EXHIBIT 'VALIDATION-START' CUSTOMER-ID ACCOUNT-BALANCE *> Validate customer ID format IF CUSTOMER-ID < 10000000 OR CUSTOMER-ID > 99999999 ADD 1 TO ERROR-COUNT EXHIBIT 'INVALID-CUSTOMER-ID' CUSTOMER-ID ERROR-COUNT END-IF *> Validate account balance limits IF ACCOUNT-BALANCE < 0 ADD 1 TO ERROR-COUNT EXHIBIT 'NEGATIVE-BALANCE' ACCOUNT-BALANCE ERROR-COUNT END-IF IF ACCOUNT-BALANCE > 1000000 EXHIBIT 'HIGH-BALANCE-ALERT' CUSTOMER-ID ACCOUNT-BALANCE END-IF EXHIBIT 'VALIDATION-END' ERROR-COUNT. UPDATE-ACCOUNT-BALANCE. EXHIBIT 'UPDATE-START' CUSTOMER-ID ACCOUNT-BALANCE *> Simulate database update ADD 1 TO RECORDS-PROCESSED EXHIBIT 'RECORD-UPDATE' RECORDS-PROCESSED *> Calculate new balance for audit COMPUTE CALCULATION-RESULT = ACCOUNT-BALANCE * 1.001 EXHIBIT 'BALANCE-CALCULATION' CALCULATION-RESULT EXHIBIT 'UPDATE-COMPLETE' CUSTOMER-ID ACCOUNT-BALANCE. CLEANUP-PROCESSING. MOVE 'CLEANUP' TO PROCESSING-STATUS EXHIBIT 'CLEANUP-START' PROCESSING-STATUS *> Display final statistics using EXHIBIT EXHIBIT 'FINAL-STATISTICS' RECORDS-PROCESSED SUCCESSFUL-OPERATIONS EXHIBIT 'ERROR-STATISTICS' FAILED-OPERATIONS ERROR-COUNT EXHIBIT 'PROCESSING-COMPLETE' DEBUG-COUNTER MOVE 'FINISHED' TO PROCESSING-STATUS EXHIBIT 'CLEANUP-END' PROCESSING-STATUS.

Modern Alternatives to EXHIBIT

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
IDENTIFICATION DIVISION. PROGRAM-ID. MODERN-DEBUGGING-ALTERNATIVES. DATA DIVISION. WORKING-STORAGE SECTION. 01 MODERN-DEBUG-SYSTEM. 05 DEBUG-ENABLED PIC X VALUE 'Y'. 88 DEBUG-ON VALUE 'Y'. 88 DEBUG-OFF VALUE 'N'. 05 DEBUG-LEVEL PIC 9 VALUE 1. 88 DEBUG-BASIC VALUE 1. 88 DEBUG-DETAILED VALUE 2. 88 DEBUG-VERBOSE VALUE 3. 05 DEBUG-TIMESTAMP PIC X(14). 05 DEBUG-SEQUENCE PIC 9(6) VALUE 0. 05 DEBUG-MODULE PIC X(20). 05 DEBUG-MESSAGE PIC X(100). 01 LOGGING-SYSTEM. 05 LOG-FILE-NAME PIC X(30) VALUE 'DEBUG.LOG'. 05 LOG-RECORD PIC X(200). 05 LOG-COUNTER PIC 9(7) VALUE 0. 05 LOG-LEVEL PIC X(8). 88 LOG-INFO VALUE 'INFO'. 88 LOG-WARNING VALUE 'WARNING'. 88 LOG-ERROR VALUE 'ERROR'. 88 LOG-DEBUG VALUE 'DEBUG'. 01 BUSINESS-VARIABLES. 05 CUSTOMER-ID PIC 9(8) VALUE 12345678. 05 CUSTOMER-NAME PIC X(30) VALUE 'MODERN CUSTOMER'. 05 ACCOUNT-BALANCE PIC 9(9)V99 VALUE 25000.50. 05 TRANSACTION-AMOUNT PIC 9(7)V99 VALUE 1500.00. PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM INITIALIZE-DEBUG-SYSTEM PERFORM DEMONSTRATE-DISPLAY-ALTERNATIVES PERFORM DEMONSTRATE-CONDITIONAL-DEBUGGING PERFORM DEMONSTRATE-STRUCTURED-LOGGING PERFORM DEMONSTRATE-PERFORMANCE-MONITORING STOP RUN. INITIALIZE-DEBUG-SYSTEM. MOVE FUNCTION CURRENT-DATE TO DEBUG-TIMESTAMP MOVE 'MAIN' TO DEBUG-MODULE IF DEBUG-ON PERFORM LOG-DEBUG-MESSAGE END-IF. DEMONSTRATE-DISPLAY-ALTERNATIVES. MOVE 'DISPLAY-DEMO' TO DEBUG-MODULE *> Modern alternative to EXHIBIT - Enhanced DISPLAY DISPLAY 'Customer Processing Started' DISPLAY 'Customer ID: ' CUSTOMER-ID DISPLAY 'Customer Name: ' CUSTOMER-NAME DISPLAY 'Account Balance: ' ACCOUNT-BALANCE *> Formatted display with labels DISPLAY 'Transaction Details:' DISPLAY ' Amount: $' TRANSACTION-AMOUNT DISPLAY ' Balance: $' ACCOUNT-BALANCE *> Conditional display based on debug level IF DEBUG-DETAILED DISPLAY 'Debug Level: Detailed' DISPLAY 'Timestamp: ' DEBUG-TIMESTAMP DISPLAY 'Module: ' DEBUG-MODULE END-IF *> Multi-line formatted display DISPLAY 'Customer Summary:' DISPLAY '==================' DISPLAY 'ID: ' CUSTOMER-ID ' Name: ' CUSTOMER-NAME DISPLAY 'Balance: $' ACCOUNT-BALANCE DISPLAY '=================='. DEMONSTRATE-CONDITIONAL-DEBUGGING. MOVE 'CONDITIONAL-DEBUG' TO DEBUG-MODULE *> Debug information only when enabled IF DEBUG-ON ADD 1 TO DEBUG-SEQUENCE DISPLAY 'Debug [' DEBUG-SEQUENCE '] Entering conditional logic' IF ACCOUNT-BALANCE > 20000 DISPLAY 'Debug [' DEBUG-SEQUENCE '] High balance customer' DISPLAY 'Debug [' DEBUG-SEQUENCE '] Balance: ' ACCOUNT-BALANCE END-IF DISPLAY 'Debug [' DEBUG-SEQUENCE '] Exiting conditional logic' END-IF *> Verbose debugging with detailed information IF DEBUG-VERBOSE DISPLAY 'Verbose Debug Information:' DISPLAY 'Module: ' DEBUG-MODULE DISPLAY 'Timestamp: ' DEBUG-TIMESTAMP DISPLAY 'All Variables:' DISPLAY ' CUSTOMER-ID: ' CUSTOMER-ID DISPLAY ' CUSTOMER-NAME: ' CUSTOMER-NAME DISPLAY ' ACCOUNT-BALANCE: ' ACCOUNT-BALANCE DISPLAY ' TRANSACTION-AMOUNT: ' TRANSACTION-AMOUNT END-IF. DEMONSTRATE-STRUCTURED-LOGGING. MOVE 'STRUCTURED-LOG' TO DEBUG-MODULE *> Structured logging with levels SET LOG-INFO TO TRUE MOVE 'Processing customer transaction' TO DEBUG-MESSAGE PERFORM WRITE-LOG-ENTRY SET LOG-DEBUG TO TRUE STRING 'Customer ID: ' DELIMITED BY SIZE CUSTOMER-ID DELIMITED BY SIZE ' Balance: ' DELIMITED BY SIZE ACCOUNT-BALANCE DELIMITED BY SIZE INTO DEBUG-MESSAGE END-STRING PERFORM WRITE-LOG-ENTRY *> Error logging simulation IF ACCOUNT-BALANCE < TRANSACTION-AMOUNT SET LOG-ERROR TO TRUE STRING 'Insufficient funds - Balance: ' DELIMITED BY SIZE ACCOUNT-BALANCE DELIMITED BY SIZE ' Required: ' DELIMITED BY SIZE TRANSACTION-AMOUNT DELIMITED BY SIZE INTO DEBUG-MESSAGE END-STRING PERFORM WRITE-LOG-ENTRY END-IF. WRITE-LOG-ENTRY. ADD 1 TO LOG-COUNTER MOVE FUNCTION CURRENT-DATE TO DEBUG-TIMESTAMP STRING DEBUG-TIMESTAMP DELIMITED BY SIZE ' [' DELIMITED BY SIZE LOG-LEVEL DELIMITED BY SPACE '] ' DELIMITED BY SIZE DEBUG-MODULE DELIMITED BY SPACE ': ' DELIMITED BY SIZE DEBUG-MESSAGE DELIMITED BY SIZE INTO LOG-RECORD END-STRING *> Write to log file (simulated with DISPLAY) DISPLAY LOG-RECORD *> In real implementation, write to actual log file *> WRITE LOG-FILE-RECORD FROM LOG-RECORD. DEMONSTRATE-PERFORMANCE-MONITORING. MOVE 'PERFORMANCE' TO DEBUG-MODULE *> Performance monitoring with timing DISPLAY 'Performance Monitoring Started' DISPLAY 'Records Processed: ' LOG-COUNTER DISPLAY 'Debug Messages: ' DEBUG-SEQUENCE *> Memory usage simulation DISPLAY 'Memory Usage Simulation:' DISPLAY 'Variables allocated: 15' DISPLAY 'Working storage used: 2KB' *> Execution path tracing DISPLAY 'Execution Path:' DISPLAY '1. Initialize Debug System' DISPLAY '2. Display Alternatives' DISPLAY '3. Conditional Debugging' DISPLAY '4. Structured Logging' DISPLAY '5. Performance Monitoring' DISPLAY 'Performance Monitoring Completed'. LOG-DEBUG-MESSAGE. ADD 1 TO DEBUG-SEQUENCE MOVE FUNCTION CURRENT-DATE TO DEBUG-TIMESTAMP STRING '[' DELIMITED BY SIZE DEBUG-SEQUENCE DELIMITED BY SIZE '] ' DELIMITED BY SIZE DEBUG-TIMESTAMP DELIMITED BY SIZE ' ' DELIMITED BY SIZE DEBUG-MODULE DELIMITED BY SIZE ': Debug system initialized' INTO DEBUG-MESSAGE END-STRING DISPLAY DEBUG-MESSAGE.

Migration from EXHIBIT to Modern Debugging

cobol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
IDENTIFICATION DIVISION. PROGRAM-ID. EXHIBIT-MIGRATION-GUIDE. DATA DIVISION. WORKING-STORAGE SECTION. 01 MIGRATION-EXAMPLES. 05 SAMPLE-VARIABLE PIC 9(5) VALUE 12345. 05 SAMPLE-TEXT PIC X(20) VALUE 'SAMPLE DATA'. 05 SAMPLE-AMOUNT PIC 9(7)V99 VALUE 1000.50. PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM SHOW-MIGRATION-EXAMPLES STOP RUN. SHOW-MIGRATION-EXAMPLES. DISPLAY 'EXHIBIT to Modern Debugging Migration Examples:' DISPLAY '==============================================' *> OLD WAY: EXHIBIT statement *> EXHIBIT 'VARIABLE-VALUE' SAMPLE-VARIABLE *> NEW WAY: Enhanced DISPLAY with formatting DISPLAY 'VARIABLE-VALUE: ' SAMPLE-VARIABLE *> OLD WAY: EXHIBIT with multiple variables *> EXHIBIT 'MULTIPLE-VALUES' SAMPLE-VARIABLE SAMPLE-TEXT SAMPLE-AMOUNT *> NEW WAY: Structured display with clear formatting DISPLAY 'MULTIPLE-VALUES:' DISPLAY ' Variable: ' SAMPLE-VARIABLE DISPLAY ' Text: ' SAMPLE-TEXT DISPLAY ' Amount: ' SAMPLE-AMOUNT *> NEW WAY: Conditional debugging IF SAMPLE-VARIABLE > 10000 DISPLAY 'DEBUG: High value detected - ' SAMPLE-VARIABLE END-IF *> NEW WAY: Structured logging approach DISPLAY 'LOG: Processing sample data' DISPLAY 'LOG: Variable=' SAMPLE-VARIABLE ' Text=' SAMPLE-TEXT ' Amount=' SAMPLE-AMOUNT DISPLAY 'Migration examples completed'.

Best Practices and FAQ

Migration Strategies
  • • Replace EXHIBIT with DISPLAY statements
  • • Implement conditional debugging flags
  • • Use structured logging approaches
  • • Leverage modern IDE debugging tools
  • • Create comprehensive error handling
Modern Debugging Tools
  • • Integrated debuggers in IDEs
  • • Breakpoint and step debugging
  • • Variable watch windows
  • • Call stack analysis
  • • Performance profiling tools