openSUSE:GCC 错误报告

跳转到:导航搜索
本文档讨论如何提交 GCC 错误报告。

报告 GCC 错误

我们需要至少三个要素来提交关于 GCC 的错误报告

  • 一个测试用例
  • 一个测试用例
  • 一个测试用例

测试用例

测试用例应该简短。它不是访问该网站,下载这个压缩包,编译,查看错误。一个好的测试用例只包含一个自包含的文件。请考虑这一点,一个文件。这意味着,没有包含文件。因此它必须经过预处理。使用

 gcc -E [other options ...] source.c > source.i

或者使用-save-tempsC++ 预处理后的文件命名为source.ii.

此外,它需要简短。它应该只包含显示错误的源代码。没有额外的函数或声明。删除所有不必要的块。首先删除整个函数,然后删除顶层声明,然后简化发生错误的函数。删除结构体或类中的非必要成员,这可能需要代码更改。只要它仍然显示错误,就可以。请记住,只有必要的函数会被编译。较新的 GCC 不会编译从未使用过的静态函数。因此,您可能需要将函数设为非静态。

任何超过 200 行的代码可能都太长了。100 行的错误报告更好。包含超过三个函数的代码可能没有尽可能地减少。再努力一下。减少代码需要时间,但如果您不这样做,我们必须这样做,而我们已经是瓶颈。这意味着,如果您的错误报告太长,我们可能不会非常热情地查看它。

通用建议

像所有好的错误报告一样,它应该遵循基本的风格

 When compiling this:
   <source code> or mention an attachment
 with this command:
   % gcc [your options] bla.i
 this happens:
   <outcome>
 with this system:
   <gcc -v output>
   <uname -a output>
 I instead expect this to happen:
   <expected outcome>
 because of <reason why you think so>.

有时预期的结果是显而易见的,不应该提及。例如,如果您报告内部编译器错误,预期的结果当然是,这个 ICE 不会发生。无需提及。如果您怀疑是错误编译,请将测试用例设计为运行时测试,该测试具有一些可见的效果(例如,在计算出错误结果时调用 abort,或打印结果,说明您期望的结果)。

请粘贴您使用的确切命令行,粘贴 -v 输出,以及 uname -a 输出。我们不想要使用 -O2 编译,即用您的语言描述,当完全可以更精确地说使用# gcc -c -O2 -fPIC -funny-options bla.i,其中命令是从终端中原样复制粘贴的。

不要忘记系统细节。我提到过我们需要一个测试用例了吗?

锦上添花

我们使用的编译器通常在 FSF GCC 的基础上进行修改。但通常情况下,FSF GCC 会显示完全相同的错误。如果您有条件验证这一点,请这样做,并将错误直接报告到 GCC 的 bugzilla

此外,请参阅 http://gcc.gnu.org/bugs.html,了解更多关于如何编写好的 GCC 错误报告的信息。