2011-11-25 28 views
4

我试图在aix 6.1上使用g ++ 4.4.6编译代码。我没有安装gdb。 编译后,它显示分段错误: -如何调试g ++的分段错误?

../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 

但我无法调试。

请分享如何调试分段错误的良好实践。

谢谢。

+6

这是编译器崩溃,而不是程序重新编译。你将不得不删除代码,直到它修复它,然后找出导致错误的原因。更新GCC也可能修复它。 – Pubby

+0

4.4.6是gcc4.4系列中的最新版本。我同意。请分享分段错误做法 –

+0

无法更新至4.6? – Pubby

回答

1

我建议升级你的GCC编译器(因为你的旧4.4编译器崩溃)。试着让GCC 4.6 source code然后建立它。

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

如果你真的想自己调试你的编译器,从源头重建它与-g

1

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

2

简化代码以保留ICE仍然存在的最小值,并向GCC项目提交错误报告。他们解决问题的可能性要比你高。

+0

但是IIRC,4.4.6是GCC 4.4的最后一个版本。可能它们不会是4.4.7。而GCC 4.6与4.4差别很大! –

+0

当然,他们关心的质量足以不时发布bug修复版本吗? –

+0

海湾合作委员会的4.4系列已经很老了(从2009年开始)。目前的GCC是** 4.6 **(2012年春季应该会出现4.7)!我记得4.4.6是4.4系列中的最后一个......(但是如果你真的无法切换到GCC 4.6,那么你可以支付一些公司来维护你的版本,这会给GCC 4.4或4.5带来许多改进)。 –