手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

error(1)

名称

error - 在恰当的源行上插入编译器错误消息

用法概要

error [-n] [-q] [-s] [-v] [-t suffixlist] [-I ignorefile] 
     [filename]

描述

error 分析由大量编译器和语言处理器产生的错误消息。它取代了在纸上记下错误缩写这种费力的传统方法,允许同时查看错误消息和源代码。

error 可以从指定的文件 filename 或标准输入中查看错误消息,并且:

  • 确定每个错误消息是由哪个语言处理器产生的。

  • 确定文件名和错误行的行号。

  • 将错误消息插入到源文件中错误行的正前方。

无法按语言处理器或内容进行分类的错误消息不会插入到任何文件中,但将被发送到标准输出中。只有在读取所有输入后,error 才会触动源文件。

error 被设计为使用其标准输入运行,其标准输入通过管道连接到错误消息源。一些语言处理器将错误消息放置在它们的标准错误文件中,而其他语言处理器将其消息放置在标准输出中。因此,这两种错误源都应通过管道连接到 error。例如,使用 csh 语法时,以下命令会分析在生成 lint 时 make(1S) 所运行的所有程序产生的所有错误消息。

example% make –s lint | & error –q –v

error 了解由 as(1)cpp(1)ld(1)make(1S) 和其他编译器产生的错误消息。对于除 Pascal 之外的所有语言,都将错误消息限制为一行。某些错误消息引用了多个文件中的多个行,在这种情况下,error 会复制错误消息,并将其插入到所有相应的位置。

选项

–n

触动任何文件;所有错误消息将被发送到标准输出。

–q

error 询问是否应该触动文件。需要回答 "y" 或 "n" 以继续操作。不使用 –q 选项意味着将触动所有被引用的文件(那些引用了被丢弃的错误消息的文件除外)。

–s

输出关于错误类别的统计信息。

–v

在触动所有文件之后,打开可视化编辑器 vi,将其设置为用于编辑所触动的所有文件,并定位到所触动的第一个文件中的第一个错误。如果无法找到 vi(1),则从标准位置尝试 ex(1)ed(1)

–t suffixlist

采用以下参数作为后缀列表。不触动其后缀没有出现在后缀列表中的文件。后缀列表以点分隔,可以使用 "*" 通配符。因此,后缀列表:

.c.y.f*.h

允许 error 触动以 ".c"、".y"、".f*" 和 ".h" 结尾的文件。

error 捕捉中断和终止信号,并以有序的方式地进行终止。

示例

示例 1 使用 error 命令

在以下 C shell (/usr/bin/csh) 示例中,error 从 FORTRAN 编译器获取输入:

example% f77 –c any.f |& error options

以下是使用 Korn shell (/usr/bin/ksh) 的同一示例:

example% f77 –c any.f 2>&1 | error options

用法

error 对错误消息执行以下六项操作之一。

synchronize

一些语言处理器会产生一些简短错误,描述它们正在处理的文件。error 使用这些错误来为每个错误消息中不包括文件名的那些语言确定文件名。这些同步消息完全由 error 使用。

discard

丢弃来自 lint 的引用了两个 lint 库(/usr/lib/lint/llib-lc/usr/lib/lint/llib-port)之一的错误消息,以防止意外触动这些库。同样,这些错误消息完全由 error 使用。

nullify

如果来自 lint 的错误消息引用了一个特定的函数,并且已知该函数生成不受关注的诊断信息,则可以废除这些错误消息。被废除的错误消息不会插入到源文件中,但会写入到标准输出中。要忽略的函数名称是从用户的起始目录中名为 .errorrc 的文件或从由 –I 选项指定的文件中获取的。如果该文件不存在,则不会废除任何错误消息。如果该文件存在,必须是每个函数名称占用一行。

not file specific

无法凭直觉知晓的错误消息将被分组到一起,并在触动任何文件之前写入到标准输出中。它们不会插入到任何源文件中。

file specific

当触动某个特定文件时,将引用该文件的错误消息写入到标准输出,但不将引用特定行的错误消息写入到标准输出。

true errors

可以凭直觉知晓的错误消息可供插入到它们引用的文件中。

只将真正的错误消息插入到源文件中。其他错误消息完全由 error 使用或被写入到标准输出中。error 将错误消息插入到源文件中的行上,并将放在错误消息中的行号之前。每个错误消息将被变成一行语言注释,在错误的开头和结尾分别以字符串 ###%%% 进行内部标记。这样,可以使用编辑器更方便地以模式搜索方式查找错误,并可以方便地删除消息。此外,每个错误消息包含该消息引用的行的源行号。格式合理的源程序在重新编译后可以仍将错误消息包含在其中,并且这些错误消息本身不会导致新的错误。对于以自由格式语言(例如 C 或 Pascal)编译的格式很差的源程序,可能会将一个注释插入到另一个注释中,这会严重破坏以后的编译。要避免这种情况,应对源程序进行格式设置,使注释的结尾所在的行上不存在任何语言语句。

文件

~/.errorrc

lint 错误消息中要忽略的函数名称

设备/dev/tty

用户的电传打字机

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
developer/base-developer-utilities

另请参见

as(1)cpp(1)csh(1)ed(1)ex(1)make(1S)ld(1)vi(1)attributes(5)

已知问题

直接打开 tty 设备进行用户输入。

具有多个链接的源文件生成一个新的文件副本,该副本仅具有一个到该文件的链接。

更改语言处理器的错误消息格式可能会导致 error 无法理解该错误消息。

error,由于它是纯机械的,无法过滤出由微小的语法错误所开启的“水闸”导致的后续错误。在丢弃这些相关的错误方面,还是人类更为擅长。

Pascal 错误消息应当放置在受影响的行后,但 error 将它们放置在受影响的行前。error 还打乱了用来标记错误点的  `|'  的对齐。

error 是为以相当高的速度在 CRT 上运行而设计的。它不太适合低速终端,也不适用于硬拷贝终端。