【问题标题】:How to debug segmentation fault of g++?如何调试g ++的分段错误?
【发布时间】:2012-01-06 07:07:00
【问题描述】:

我尝试在 aix 6.1 上使用 g++4.4.6 编译代码。我没有安装 gdb。 编译后,显示Segmentation Fault错误:-

../test/Corner.h: In member function 'void VirtualFlow<T>::vector_flow(typename T::Data**, typename T::Data**) [with T = NProcess<or_func<NetAndVal<ZVal2>, with_derivatives>, ConvexNoOverlapSize<16, 16, Multiply<65536l, AllPass<CornerT<NetAndVal<ZVal2> >, NoFlow<CornerT<NetAndVal<ZVal2> > > > > > >]':
../test/Corner.h:369: internal compiler error: Segmentation fault

我尝试使用 -g 选项来创建 .o 文件并查找问题。

opt/freeware/bin/g++ -g ConnectFlow2.C -o ConnectFlow2.o

但我无法调试。

请分享如何调试分段错误的良好做法。

谢谢。

【问题讨论】:

  • 那是编译器崩溃,而不是程序。您将不得不删除代码,直到它修复它,然后找出导致错误的原因。更新 GCC 也可能会修复它。
  • 4.4.6是gcc4.4系列的最新版本。我同意。请分享分段错误做法
  • 我们决定暂时使用 4.4.6。谁能告诉我gcc4.4系列哪个版本最稳定?

标签: c++ g++ segmentation-fault aix


【解决方案1】:

简化代码以保持 ICE 仍然发生的最低限度,并向 GCC 项目提交错误报告。他们解决问题的机会比你高得多。

【讨论】:

  • 但是 IIRC,4.4.6 是 GCC 4.4 的最后一个版本。他们可能不会是任何 4.4.7。而且 GCC 4.6 和 4.4 有很大的不同!
  • 当然,他们关心质量足以不时发布错误修复版本?
  • GCC 4.4 系列已经相当老了(2009 年开始)。当前的 GCC 是 4.6(4.7 应该会在 2012 年春季出现)!我记得我读过 4.4.6 是 4.4 系列的最后一个……(但是如果你真的不能切换到 GCC 4.6,你可以花钱请一些公司来维护你的版本,这对 GCC 4.4 或 4.5 有很多改进)。
【解决方案2】:

我建议升级您的 GCC 编译器(因为您的旧 4.4 编译器崩溃了)。尝试获取 GCC 4.6 source code 然后构建它。

不要忘记担心依赖关系,并仔细阅读并遵循installation instructions(特别是不要在源目录中构建!)。

如果你真的想自己调试你的编译器,从源代码重建它并用-g重新编译它

【讨论】:

    【解决方案3】:

    这只是一个猜测,但值得尝试使用-ftemplate-depth-103 增加模板深度。我不知道默认值是什么,以及你的模板结构有多深。

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      • 2013-01-06
      • 2013-05-19
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      相关资源
      最近更新 更多