Как отладить ошибку сегментации g++?

Я попытался скомпилировать код с помощью g++ 4.4.6 на aix 6.1. У меня не установлен 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

но я не смог отладить.

Пожалуйста, поделитесь передовым опытом по отладке ошибки сегментации.

Спасибо.


person crazy_prog    schedule 25.11.2011    source источник
comment
Это сбой компилятора, а не программы. Вам придется удалить код, пока он его не исправит, а затем выяснить, что вызывает ошибку. Обновление GCC также может исправить это.   -  person Pubby    schedule 25.11.2011
comment
4.4.6 — последняя версия в серии gcc4.4. Я согласен. Пожалуйста, поделитесь практиками ошибки сегментации   -  person crazy_prog    schedule 25.11.2011
comment
Мы решили пока использовать 4.4.6. Может ли кто-нибудь сказать мне, какая самая стабильная версия в серии gcc4.4?   -  person crazy_prog    schedule 25.11.2011


Ответы (3)


Я предлагаю обновить ваш компилятор GCC (поскольку ваш старый компилятор 4.4 дает сбой). Попробуйте получить исходный код GCC 4.6, а затем соберите его.

Не забывайте беспокоиться о зависимостях, а также внимательно читать и следовать инструкциям по установке (в частности, не строить в исходном каталоге!).

Если вы действительно хотите отлаживать свой компилятор самостоятельно, пересоберите его из исходного кода и перекомпилируйте с помощью -g

person Basile Starynkevitch    schedule 05.12.2011

Упростите код, чтобы оставить минимум, для которого все еще возникает ICE, и отправьте отчет об ошибке в проект GCC. У них гораздо больше шансов решить эту проблему, чем у вас.

person quant_dev    schedule 25.11.2011
comment
Но IIRC, 4.4.6 — это последний выпуск GCC 4.4. Никаких 4.4.7 наверное не будет. А GCC 4.6 сильно отличается от 4.4! - person Basile Starynkevitch; 06.12.2011
comment
Конечно, они заботятся о качестве настолько, чтобы время от времени выпускать релизы с исправлениями ошибок? - person quant_dev; 06.12.2011
comment
Серия 4.4 GCC довольно старая (начата в 2009 году). Текущий GCC — 4.6 (и версия 4.7 должна появиться весной 2012 г.)! Я помню, как читал, что 4.4.6 является последней из серии 4.4... (Но вы могли бы заплатить какой-нибудь компании за поддержку вашей версии, если вы действительно не можете переключиться на GCC 4.6, который дает много улучшений по сравнению с GCC 4.4 или 4.5). - person Basile Starynkevitch; 06.12.2011

Это всего лишь предположение, но стоит попробовать увеличить глубину шаблона с помощью -ftemplate-depth-103. Я не знаю, какое значение по умолчанию и насколько глубока ваша шаблонная структура.

person WebMonster    schedule 25.11.2011