2010-05-03 88 views
7

我不明白gprof的文檔,關於如何編譯用gprof進行分析的程序。在g ++中,除了-pg選項之外,是否需要使用-g選項(調試信息)進行編譯?在每種情況下,我都會得到不同的結果,我希望看到應用程序中的瓶頸處於釋放模式,而不是調試模式,編譯器忽略了許多優化(例如內聯)在g ++中編譯爲gprof

+0

http://stackoverflow.com/questions/1777556/alternatives-to-gprof/1779343#1779343 – 2010-05-04 11:31:46

+1

'-g'並不意味着優化已關閉。 「-O」控制着最佳化。例如,您可以用'-g'和'-O2'進行編譯。 – 2014-10-08 00:59:04

回答

5

documentation顯示你也可以做,注意你需要-g爲line by line profiling。所以如果你想在釋放條件下進行配置文件,並且可以不接受逐行操作,那麼你應該可以在不使用-g的情況下進行編譯。

+0

我只對函數調用感興趣,而不是逐行分析。如果沒有-g選項,許多正在調用的函數都不顯示。我不認爲這是由內聯引起的,因爲許多這些方法都是大的(50多行代碼)。 – myahya 2010-05-03 20:16:18

+1

@myahya,我認爲它可能是內聯。默認情況下,GCC可以長達400個內部GCC指令的內聯函數(我知道它們不直接映射到代碼行);請參閱http://bazaar.launchpad.net/~vcs-imports/gcc/trunk/annotate/99780/gcc/params.def#L58。另外,你正在使用哪些編譯標誌? – 2010-05-03 21:58:11