Gcc

剝離符號時的核心文件

  • June 9, 2011

我正在使用 g++ 4.3 建構一個應用程序。我正在使用最大可能的優化級別,而不是使用該-g選項,並且在建構後我正在剝離符號。

如果我不從我的應用程序和庫中刪除符號,核心文件是否仍然有用?(當它們在應用程序崩潰時生成。)

如果我以最大可能的優化編譯我的應用程序,這些核心文件會有用嗎?(無-g選項且無剝離符號。)

從廣義上講,核心文件是程序使用的整個記憶體加上 CPU 寄存器狀態的轉儲。因此,一般來說,您可以從核心文件中檢索到的資訊與通過在程序崩潰之前將調試器附加到程序中可以獲得的資訊相同。

如果我不我的應用程序和庫中刪除符號,核心文件是否仍然有用?

從維基百科頁面核心轉儲

``在現代類 Unix 作業系統上,管理員和程序員可以使用 GNU Binutils 二進製文件描述符庫 (BFD) 讀取核心轉儲文件,

$$ … $$該庫將從核心轉儲中提供記憶體區域中給定地址的原始數據;它對該記憶體區域中的變數或資料結構一無所知,因此使用該庫讀取核心轉儲的應用程序必須確定變數的地址並確定資料結構本身的佈局,例如通過使用符號表用於正在調試的程序。’' 所以你的第一個問題的答案是:*不,*如果你從執行檔中刪除符號,核心轉儲文件幾乎沒有用。

但是,符號只佔用一些磁碟空間,不會影響性能:您可以同時進行最大優化 -g編譯。

如果我以最大可能的優化編譯我的應用程序,這些核心文件會有用嗎?

由於核心文件只是應用程序崩潰時記憶體和處理器狀態的轉儲,因此適用於優化和調試的一般警告:調試器只會找到資訊(例如,變數的值,或在堆棧回溯),如果它沒有被優化出來。

引用自:https://unix.stackexchange.com/questions/14670