2011-11-25 49 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帶來許多改進)。 –