2015-05-14 39 views
1

我使用的是Ubuntu和gcc。我的應用程序崩潰,我只在控制檯中有Segmentation fault消息。 (之前已報告Segmentation fault (core dumped),但現在只更改爲Segmentation fault)。gcc分段錯誤 - 我如何找到它發生的行?

有沒有問題的提示,所以我不明白我應該如何解決這個問題。我需要一些提示來找出造成這種情況的原因 - 理想情況下完整的堆棧跟蹤或至少是對象類型/方法或類似的東西。

解決此類問題的正確方法是什麼? (可能是一些額外的標誌編譯,運行一些工具,收集核心轉儲,不管​​怎樣分析嗎?)

+2

使用'-g'編譯並使用gdb。 –

+1

不知道問題是什麼?使用調試器? – Klaus

+0

valgrind&-g3幫助並顯示堆棧跟蹤。由於某種原因,這個建議已被作者刪除,所以我沒有回答接受 – javapowered

回答

2

你可能會需要啓用與

ulimit -c unlimited 

核心轉儲一旦你有一個核心轉儲,您可以看一下程序狀態GDB:

gdb my_prog core 

你應該再有,如果你在GDB下運行的程序,直到它墜毀,你將不得不同樣的觀點 - 你可以只做到這一點,而不是收集核心轉儲。特別是,它會告訴你哪一行導致了段錯誤,以及當時調用堆棧的狀態。

要獲得最佳調試視圖,應該告訴編譯器包含調試符號(-g)並禁用優化(-O0)。

+0

我收到'核心:沒有這樣的文件或目錄錯誤。我不知道我該如何強制linux創建核心文件 – javapowered

+0

@javapowered因此'ulimit -c unlimited'不會強制linux創建核心文件?如果是這樣,你應該在你的問題中提到這一點。沒有-g和-O0建築物的 – anatolyg

-2

您可以使用gdb工具來幫助調試。在終端 運行GDB ./your_app_name如果您已經安裝了GDB,你會看到一些信息來源如下:

..... 

類型「中肯字」來搜索與「詞」的命令...... 閱讀符號來自./gsvod_client...done。 (gdb)

然後輸入「r」啓動您的應用程序,如果它再次崩潰,您可以鍵入'bt'來查看發生問題的行。

+1

,這裏沒有任何意義 – zoska

相關問題