我有一個非常複雜的跨平臺應用程序。最近,我和我的團隊一直在進行壓力測試,並且遇到過幾次崩潰(以及隨之而來的核心轉儲)。其中一些核心轉儲非常精確,並向我顯示發生崩潰的確切位置,其中包含大約10個或更多的堆棧幀。其他人有時只有一個堆棧框架?是唯一的象徵!如何增加Linux核心轉儲匹配符號的概率?
我想知道的是:
- 是否有增加核心轉儲在正確的方向指向的概率的方法嗎?
- 爲什麼報告的堆棧幀數不一致?
- 任何最佳實踐建議管理核心轉儲。
以下是我編譯的二進制文件(在釋放模式):
- 編譯器和平臺:G ++用glibc-2.3.2-95.50在CentOS 3.6 x86_64的 - 這可以幫助我保持與舊的兼容性Linux版本。
- 所有文件都使用-g標誌進行編譯。
- 調試符號從最終的二進制文件中剝離並保存在一個單獨的文件中。
- 當我有一個核心轉儲時,我使用GDB和創建核心的可執行文件以及符號文件。 GDB從不抱怨核心/二進制/符號之間存在不匹配。
然而,我有時會得到沒有符號的核心轉儲!可以理解的是,我正在鏈接libstdC++和libgcc的非調試版本,但如果至少堆棧跟蹤顯示我在代碼中發生錯誤指令調用的位置(雖然它最終可能以?結束) 。
這極有可能是問題要容易得多 - 如果堆棧幀已經被錯誤搗爛,然後就不見了。 – caf 2011-01-06 13:21:58