2012-06-14 56 views
0

C++應用程序/ linux的調試文件一直是我的一個謎,缺乏一些基本的理解。 (1)我們是否需要用-g標誌編譯應用程序,而不用核心文件就不能提供任何有用的信息?但是我發現,即使我們不用-g標誌編譯,也會生成核心文件 - 所以除了佔用磁盤空間外,它們還必須具有某種功能。有關調試核心文件的一些基本問題C++/linux?

Wikipedia說:「在計算中,核心轉儲,內存轉儲或存儲轉儲由計算機程序在特定時間的工作內存的記錄狀態組成,通常當程序異常終止時(崩潰)」 。

這應該表示不管我們用-g標誌編譯,我們仍然有狀態。如果我們有堆棧跟蹤,我們仍然應該能夠知道哪個函數導致了錯誤。

回答

2

-g選項與核心文件無關,只是將調試信息放在程序中。也就是說,生成的可執行文件將包含所有符號(例如函數和變量名稱)以及行號信息(以便您可以找出發生崩潰的行)。

實際的核心轉儲只包含內存轉儲。是的,你可以和程序一起得到堆棧跟蹤信息,但除非程序有調試信息,否則你不能看到函數名或行號,只能看到它們的地址。

+0

這取決於。如果您還沒有剝離可執行文件,公共符號(那些在C++中具有外部鏈接的符號)仍然可用。 –

1

所以必須分開佔用的空間在磁盤上服務某種目的

您可以限制核心文件的大小與ulimit -c $limit命令和你的核心文件將不佔用你的硬盤空間。

而且,Joachim已經說過-g選項只包含調試符號和檢查程序。