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