|
|
1.1 root 1: .\" Copyright (c) 1980 Regents of the University of California.
2: .\" All rights reserved. The Berkeley software License Agreement
3: .\" specifies the terms and conditions for redistribution.
4: .\"
5: .\" @(#)error.1 6.2 (Berkeley) 5/5/86
6: .\"
7: .TH ERROR 1 "May 5, 1986"
8: .UC 4
9: .SH NAME
10: error \- analyze and disperse compiler error messages
11: .SH SYNOPSIS
12: .B error
13: [
14: .B \-n
15: ] [
16: .B \-s
17: ] [
18: .B \-q
19: ] [
20: .B \-v
21: ] [
22: .B \-t
23: suffixlist
24: ] [
25: .B \-I
26: ignorefile
27: ] [ name ]
28: .SH DESCRIPTION
29: .I Error
30: analyzes and optionally disperses the diagnostic error messages
31: produced by a number of compilers and language processors to the source
32: file and line where the errors occurred. It can replace the painful,
33: traditional methods of scribbling abbreviations of errors on paper, and
34: permits error messages and source code to be viewed simultaneously
35: without machinations of multiple windows in a screen editor.
36: .PP
37: .I Error
38: looks at the error messages,
39: either from the specified file \fIname\fR
40: or from the standard input,
41: and attempts to determine which
42: language processor produced each error message,
43: determines the source file and line number to which the error message refers,
44: determines if the error message is to be ignored or not,
45: and inserts the (possibly slightly modified) error message into
46: the source file as a comment on the line preceding to which the
47: line the error message refers.
48: Error messages which can't be categorized by language processor
49: or content are not inserted into any file,
50: but are sent to the standard output.
51: .I Error
52: touches source files only after all input has been read.
53: By specifying the
54: .B \-q
55: query option,
56: the user is asked to confirm any potentially
57: dangerous (such as touching a file) or verbose action.
58: Otherwise
59: .I error
60: proceeds on its merry business.
61: If the
62: .B \-t
63: touch option and associated suffix list is given,
64: .I error
65: will restrict itself to touch only those files with suffices
66: in the suffix list.
67: Error also can be asked (by specifying
68: .B \-v)
69: to invoke
70: .IR vi (1)
71: on the files in which error messages were inserted; this obviates
72: the need to remember the names of the files with errors.
73: .PP
74: .I Error
75: is intended to be run
76: with its standard input
77: connected via a pipe to the error message source.
78: Some language processors put error messages on their standard error file;
79: others put their messages on the standard output.
80: Hence, both error sources should be piped together into
81: .I error.
82: For example, when using the \fIcsh\fP syntax,
83: .IP
84: make \-s lint |\|& error \-q \-v
85: .LP
86: will analyze all the error messages produced
87: by whatever programs
88: .I make
89: runs when making lint.
90: .PP
91: .I Error
92: knows about the error messages produced by:
93: .I make,
94: .I cc,
95: .I cpp,
96: .I ccom,
97: .I as,
98: .I ld,
99: .I lint,
100: .I pi,
101: .I pc,
102: .I f77,
103: and
104: .I DEC Western Research Modula-2.
105: .I Error
106: knows a standard format for error messages produced by
107: the language processors,
108: so is sensitive to changes in these formats.
109: For all languages except
110: .I Pascal,
111: error messages are restricted to be on one line.
112: Some error messages refer to more than one line in more than
113: one files;
114: .I error
115: will duplicate the error message and insert it at
116: all of the places referenced.
117: .PP
118: .I Error
119: will do one of six things with error messages.
120: .TP 10
121: .I synchronize
122: Some language processors produce short errors describing
123: which file it is processing.
124: .I Error
125: uses these to determine the file name for languages that
126: don't include the file name in each error message.
127: These synchronization messages are consumed entirely by
128: .I error.
129: .TP 10
130: .I discard
131: Error messages from
132: .I lint
133: that refer to one of the two
134: .I lint
135: libraries,
136: .I /usr/lib/llib-lc
137: and
138: .I /usr/lib/llib-port
139: are discarded,
140: to prevent accidently touching these libraries.
141: Again, these error messages are consumed entirely by
142: .I error.
143: .TP 10
144: .I nullify
145: Error messages from
146: .I lint
147: can be nullified if they refer to a specific function,
148: which is known to generate diagnostics which are not interesting.
149: Nullified error messages are not inserted into the source file,
150: but are written to the standard output.
151: The names of functions to ignore are taken from
152: either the file named
153: .I .errorrc
154: in the users's home directory,
155: or from the file named by the
156: .B \-I
157: option.
158: If the file does not exist,
159: no error messages are nullified.
160: If the file does exist, there must be one function
161: name per line.
162: .TP 10
163: .I not file specific
164: Error messages that can't be intuited are grouped together,
165: and written to the standard output before any files are touched.
166: They will not be inserted into any source file.
167: .TP 10
168: .I file specific
169: Error message that refer to a specific file,
170: but to no specific line,
171: are written to the standard output when
172: that file is touched.
173: .TP 10
174: .I true errors
175: Error messages that can be intuited are candidates for
176: insertion into the file to which they refer.
177: .PP
178: Only true error messages are candidates for inserting into
179: the file they refer to.
180: Other error messages are consumed entirely by
181: .I error
182: or are written to the standard output.
183: .I Error
184: inserts the error messages into the source file on the line
185: preceding the line the language processor found in error.
186: Each error message is turned into a one line comment for the
187: language,
188: and is internally flagged
189: with the string ``###'' at
190: the beginning of the error,
191: and ``%%%'' at the end of the error.
192: This makes pattern searching for errors easier with an editor,
193: and allows the messages to be easily removed.
194: In addition, each error message contains the source line number
195: for the line the message refers to.
196: A reasonably formatted source program can be recompiled
197: with the error messages still in it,
198: without having the error messages themselves cause future errors.
199: For poorly formatted source programs in free format languages,
200: such as C or Pascal,
201: it is possible to insert a comment into another comment,
202: which can wreak havoc with a future compilation.
203: To avoid this, programs with comments and source
204: on the same line should be formatted
205: so that language statements appear before comments.
206: .PP
207: Options available with
208: .I error
209: are:
210: .TP 5
211: .B \-n
212: Do
213: .I not
214: touch any files; all error messages are sent to the
215: standard output.
216: .TP 5
217: .B \-q
218: The user is
219: .I queried
220: whether s/he wants to touch the file.
221: A ``y'' or ``n'' to the question is necessary to continue.
222: Absence of the
223: .B \-q
224: option implies that all referenced files
225: (except those referring to discarded error messages)
226: are to be touched.
227: .TP 5
228: .B \-v
229: After all files have been touched,
230: overlay the visual editor
231: .I vi
232: with it set up to edit all files touched,
233: and positioned in the first touched file at the first error.
234: If
235: .I vi
236: can't be found, try
237: .I ex
238: or
239: .I ed
240: from standard places.
241: .TP 5
242: .B \-t
243: Take the following argument as a suffix list.
244: Files whose suffixes do not appear in the suffix list are not touched.
245: The suffix list is dot separated, and ``*'' wildcards work.
246: Thus the suffix list:
247: .IP
248: \& ".c.y.foo*.h"
249: .IP
250: allows
251: .I error
252: to touch files ending with ``.c'', ``.y'', ``.foo*'' and ``.y''.
253: .TP 5
254: .B \-s
255: Print out
256: .I statistics
257: regarding the error categorization.
258: Not too useful.
259: .PP
260: .I Error
261: catches interrupt and terminate signals,
262: and if in the insertion phase,
263: will orderly terminate what it is doing.
264: .SH AUTHOR
265: Robert Henry
266: .SH FILES
267: .ta 2i
268: ~/.errorrc function names to ignore for \fIlint\fP error messages
269: .br
270: /dev/tty user's teletype
271: .SH BUGS
272: .PP
273: Opens the teletype directly to do user querying.
274: .PP
275: Source files with links make a new copy of the file with
276: only one link to it.
277: .PP
278: Changing a language processor's format of error messages
279: may cause
280: .I error
281: to not understand the error message.
282: .PP
283: .I Error,
284: since it is purely mechanical,
285: will not filter out subsequent errors caused by `floodgating'
286: initiated by one syntactically trivial error.
287: Humans are still much better at discarding these related errors.
288: .PP
289: Pascal error messages belong after the lines affected
290: (error puts them before). The alignment of the `\||\|' marking
291: the point of error is also disturbed by
292: .I error.
293: .PP
294: .I Error
295: was designed for work on CRT's at reasonably high speed.
296: It is less pleasant on slow speed terminals, and has never been
297: used on hardcopy terminals.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.