|
|
1.1 root 1: .TI F77/ERROR_MSGS "Sep. 4, 1985"
2: Interpreting Execution Error Messages
3:
4: .SH
5: 1. Types of Errors
6: .LP
7: Execution error messages for Fortran programs are generated by the Fortran
8: I/O library (error number = -1 or > 99),
9: by the UNIX system routines ( 0 < error number < 99),
10: and by the UNIX signal handler (no error number printed).
11: .SH
12: 2. Fortran I/O Library Error Messages
13: .LP
14: Here are examples of two common I/O errors;
15: for a complete list of the Fortran I/O library error messages,
16: see "help f77 io_err_msgs".
17: The first error results from trying to read beyond the end of a file:
18: .nf
19:
20: dofio: [-1] end of file
21: logical unit 5, named 'stdin'
22: lately: reading sequential formatted external I/O
23: format: (i10)
24: *** Execution terminated
25:
26: .fi
27: The first line names the system routine, dofio(), that issued
28: the error message, gives the error message number, -1, and a short description
29: of the error.
30: The second line shows that the error involved Fortran logical unit 5
31: and file 'stdin' (standard input).
32: The other lines tell the type of I/O being attempted,
33: the format being used, and that execution was terminated due to the error.
34: If the program had been compiled with the '-g' flag for debugging,
35: the last line would instead be:
36:
37: Illegal instruction (core dumped)
38:
39: and an image of memory at the time of the error would be written to the
40: file 'core'.
41: .LP
42: The second example is a little more complex:
43: .nf
44:
45: dofio: [115] invalid data for integer format term
46: logical unit 5, named 'stdin'
47: lately: reading sequential formatted external I/O
48: format: (i10)
49: part of last data: 22|e8
50: *** Execution terminated
51:
52: .fi
53: The program tried to read ``22e8'' with an ``i5'' format term.
54: The I/O library is complaining that the letter ``e'' is not
55: a valid input character when reading integers.
56: There is a new line, listing the data being read, which was
57: not present in the previous error message.
58: A vertical bar, ``|'', is put next to the input character the
59: formatting routines were scanning when the error was detected.
60: This line is only generated when doing I/O with disk files.
61: In this example, the program was invoked by:
62:
63: a.out < data
64:
65: The program is reading a disk file via the redirection
66: of standard input.
67: .LP
68: Any error detected during I/O processing will cause the program
69: to abort unless the I/O statement included an 'err=' clause to
70: provide a branch on error or an 'iostat=' clause to save the
71: error code.
72: Read statements may include 'end=' to branch on end-of-file.
73: .SH
74: 3. Signal Handler Error Messages
75: .LP
76: Most arithmetic errors and other errors causing hardware interrupts cause a
77: signal to be sent to the process that caused the error.
78: If, as is typical with Fortran programs,
79: the process has not been set up to handle signals, then
80: the process is terminated with an
81: appropriate (although sometimes mysterious) error message.
82: These error messages usually appear with no numbers;
83: however under certain circumstances, the error numbers may also appear.
84: .LP
85: The most common of these messages are reproduced and explained here:
86:
87: .nf
88: *** Arithmetic Exception: Floating point overflow
89: *** Execution Terminated
90: .fi
91:
92: The program tried to generate a floating point number greater in absolute value
93: than approximately 1.7e+38.
94:
95: .nf
96: *** Arithmetic Exception: Integer divide by 0
97: *** Execution Terminated
98: .fi
99:
100: The program divided by an integer zero; this is mathematically undefined.
101:
102: .nf
103: *** Arithmetic Exception: Floating divide by zero
104: *** Execution Terminated
105: .fi
106:
107: The program divided by a floating point zero; this is mathematically undefined.
108:
109: .nf
110: *** Arithmetic Exception: Integer overflow
111: *** Execution Terminated
112: .fi
113:
114: The program tried to generate an integer outside the VAX's range of integers,
115: either greater than 2**31-1 (2147483647) or less than -2**31 (-2147483648).
116: This interrupt is not normally enabled; to catch this error, you need to
117: call subroutine traper() in each subprogram (see "man 3f traper").
118:
119: .nf
120: *** Arithmetic Exception: Floating point underflow
121: *** Execution Terminated
122: .fi
123:
124: The program tried to generate a floating point number whose absolute value
125: is less than 2.9e-39. This trap is not normally enabled; to enable it you
126: must call subroutine traper() in each subprogram (see "man 3f traper").
127:
128: .nf
129: *** Segmentation violation
130: *** Execution Terminated
131: .fi
132:
133: The program tried to reference beyond the current bounds of its memory.
134: This is usually caused by using invalid subscripts for an array;
135: recompiling and rerunning with the ``-C'' flag will catch many of these
136: errors.
137:
138: .nf
139: *** Bus error
140: *** Execution Terminated
141: .fi
142:
143: The program has tried to store in a protected area such as the code for
144: the program. This is often caused
145: by using an invalid subscript when storing into an array; recompiling and
146: rerunning with the ``-C'' option will find many of these errors.
147: This may also be caused by calling a subprogram passing fewer actual arguments
148: than are declared and used in the subprogram.
149: It can also occur when
150: a subroutine or function is passed as an argument to a subprogram when
151: the subprogram is expecting a variable or array and the
152: subprogram tries to store in the argument.
153: Storing on top of a constant, e.g.:
154: .nf
155:
156: call sub(0)
157: ...
158: subroutine sub(ival)
159: ival = min0(ival,3000)
160:
161: .fi
162: also causes this error.
163:
164: .nf
165: *** Illegal instruction
166: *** Execution Terminated
167: .fi
168:
169: This may mean that your program is overwriting itself. This is uncommon
170: because the program code and variable storage are in different areas of
171: memory and the program code is normally protected.
172:
173: .nf
174: *** Illegal operand
175: *** Execution Terminated
176: .fi
177:
178: An invalid floating point number (exponent value of 0, sign value of 1)
179: was used in a floating point computation. This is a reserved operand in
180: the floating point logic of the VAX. If an integer multiple of
181: 32768 is used as a real, this interrupt will be generated.
182: .LP
183: For a complete list of signals, see "man 2 sigvec" or "man 3c signal".
184: .LP
185: The user can regain control after signal handler errors via
186: the signal() subroutine (see "man 3f signal").
187: Unfortunately, after regaining control, there is currently no way to
188: resume exactly where you left off.
189: .SH
190: 4. Errors due to unsuccessful system calls
191: .LP
192: This type of message is less common than the other two types.
193: Here are two examples.
194: The following messages result from trying to read from a file for which
195: you do not have read permission:
196:
197: .nf
198: fort.1: [13] Permission denied
199: logical unit 1, named 'fort.1'
200: *** Execution Terminated
201: .fi
202:
203: and the following resulted when trying to read from unit 6, standard
204: output:
205:
206: .nf
207: read sfe: [9] Bad file number
208: logical unit 6, named 'stdout'
209: lately: reading sequential formatted external IO
210: format: (i5)
211: *** Execution Terminated
212: .fi
213:
214: Unfortunately, these errors are numbered using the same number range as
215: the signal errors described above. For example, an error 24 could either
216: be the system call error 24, too many files open, or signal message
217: 24, cpu time limit exceeded. The context usually makes it clear
218: which type of error has occurred; also the signal messages normally
219: appear without numbers.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.