【问题标题】:How to instruct GCC to stop after 5 errors?如何指示 GCC 在 5 个错误后停止?
【发布时间】:2011-03-14 12:24:01
【问题描述】:

是否可以指示 GNU c++ 编译器在发现 5 个错误后停止?在文档中找不到这个。

【问题讨论】:

    标签: c++ gcc g++


    【解决方案1】:

    命令行选项-fmax-errors=<em>N</em> 指示编译器在N 个错误后放弃。此选项存在于 GCC 4.6 及更高版本中。

    命令行选项-Wfatal-errors 指示编译器在一个错误后放弃。此选项存在于 GCC 4.0 及更高版本中。

    在这两种情况下,警告都不计入限制,除非您还指定 -Werror

    【讨论】:

    • 除了关于-Werror 的声明之外,我会给这个+1。我相信警告绝对应该被视为错误,因为大多数警告都表明代码有错误。
    • @greyfade,我也认为警告通常应该被视为必须修复,但不幸的是,gcc 的一些警告可能会触发或不触发,具体取决于优化级别、系统标头的内容以及任意数量的其他你无法轻易控制的事情。因此,您可能会在您的规范构建平台上收到所有警告,但随后一些可怜的 schmuck 试图在更奇特的环境中构建并且它爆炸了。
    • @Zack,这不是 -Wno-system-headers 的用途吗?
    • 我听到的关于没有初始化编译器得到-Wuninitialized误报的变量的论点是:它浪费了I-cache在死但不可证明的死存储指令上;如果某些变化使警告成为真正的肯定,我们希望 valgrind 能够捕捉到它。
    • 不幸的是,链接器不支持-fmax-errors 标志(从 arm-none-eabi-gcc 5.4.1 开始)。我正在使用选项-finstrument-functions,但由于未定义的__cyg_profile_func_enter 函数而出现数百个错误。
    【解决方案2】:

    您可以使用 gcc 选项:

    -fmax-errors=5
    

    为此目的。

    【讨论】:

    • @Telthien 为什么?这对我来说似乎是一个答案。
    • @Telthien stackoverflow.com/questions/how-to-answer 说“任何让提问者朝着正确方向前进的答案都是有帮助的”和“简洁是可以接受的”。答案旨在提供解决方案,有时可以在一个句子中完成。
    • 如果它是有用的,那么就没有理由延长答案。尤其不是为了冗长或要求 tldr。
    • 感谢您让我知道自从我写下我的答案以来已经添加了一项新功能。
    【解决方案3】:

    我也欢迎这样的选择。目前,我使用以下解决方法来获取前五个错误:

    <make> 2>&1|grep error|head -5
    

    【讨论】:

      【解决方案4】:

      我不得不问你为什么要这样做。有时代码中存在的错误不是第一个,甚至不是前五个错误中发现的。有时它会超出此范围,只有在您向下滚动列表时才能识别。如果您对编译时间感到困扰,更好的方法可能是分解您的代码并将其放入较小的库中。或者,如果您担心从命令行屏幕上滚动的内容,请使用“>>”运算符将消息通过管道传输到文件中。

      【讨论】:

      • 这只是错误日志可读性的问题。至少在我的情况下,5 个错误足以理解问题:)
      • 真的吗?我的经验恰恰相反——尤其是在 C++ 中,除非我正在做特定类型的重构工作,这些工作会产生大量离散错误(将参数更改为常用方法,例如)第一个错误很可能是唯一有用的。
      • @FaZend.com 我明白了,很抱歉我当时没有提供答案。 Zack 在下面的答案可能是你能得到的最好的答案,除非你要编写一个小脚本来解析这些错误并在输出 5 个错误后终止进程。 (虽然我可能对这句话一无所知。)
      • 人们似乎对这个问题的想象力非常有限。这个场景怎么样?您刚刚首次将程序移植到新环境。你得到几个错误并且编译中止。您不知道旧环境和新环境之间有多少不兼容。您想知道的是情况有多糟糕以及您的代码中有多少问题。您希望将所有错误汇总到一个巨大的列表中,以便估计修复所有错误需要多长时间。
      • @PhillApley 这样做的问题是,单个错误通常会引发一连串的错误(有些带有大量 STL 建议),所以如果您根据错误和警告的数量来判断,您可能会高估所需的努力并放弃。
      猜你喜欢
      • 1970-01-01
      • 2020-01-09
      • 2018-02-11
      • 1970-01-01
      • 2012-11-09
      • 2019-10-17
      • 1970-01-01
      • 2018-09-12
      • 2014-12-16
      相关资源
      最近更新 更多