2011-06-06 14 views
8

我有一個用於Linux的C代碼可執行文件。在使用-g -O和strip與僅使用-O編譯時,是否存在缺陷

對於釋放,我可以有兩種選擇:

之一是建立與-g -O3,條帶調試(條-g)和發送輸出作爲釋放。 二是直接用-O3編譯發佈。

如果我理解正確,第一個選項的優點是我可以在剝離之前使用該exe來進行遠程調試或分析核心轉儲。

的問題是,如果在這個approachi.e任何缺點,是有運行與-g建設,然後

由於剝離時的性能開銷。

+0

請記住,只要語義相同,允許優化重寫代碼;並且非常積極。因此,即使有調試信息,編譯後的代碼也可能與您的源代碼非常匹配,從而使調試「具有挑戰性」。查看GCC中各個單獨優化開關的文檔,瞭解可以更改多少代碼。 – Carsten 2011-06-06 09:10:15

+0

謝謝。我意識到這個問題,但仍然比調試裸優化的可執行文件更容易進行調試。 – eran 2011-06-06 09:32:15

回答

8

使用-g沒有運行時間性能命中。調試信息位於可執行文件的單獨部分,如果您執行該文件,甚至不會加載該文件。

但是,如果你願意,你可以分開調試信息和可執行文件(這仍然不會產生任何性能差異)。我的Gentoo Linux以這種方式處理它,原因是將所使用的磁盤空間減到最小,這使得我可以在小型快速磁盤上擁有所有二進制文件,同時仍然可以在單獨的分區中保留從未使用過的調試信息。

objcopy --only-keep-debug foo foo.debug 
strip -g foo 

現在你有一個foo可執行文件和一個包含調試符號的foo.debug。

+0

在單獨的分區上調試信息?漂亮的核心。 +1 – 2011-06-06 09:42:08

+0

@Hendel:在每一個更新,更快的磁盤技術的生命週期中,有一個短暫的時間,其中一個磁盤的價格足以容納操作系統安裝是痛苦的;-)另外,更小,更便宜的設備,這段時間越長越好,因爲花式快速磁盤的成本比整體成本更高。 – 2011-06-06 10:04:36

+0

這個更具吸引力的優點是分發包只包含二進制文件,另一個包只包含調試信息。只有少數用戶需要下載第二個,對於那些用戶來說,它比下載單獨的包含二進制+調試代碼的代碼要好得多。 – Juliano 2011-06-06 18:00:37

相關問題