2014-05-08 52 views
0

我有用C編寫的這個應用程序,應該調整它以提高性能。我查看了Linux中的一些性能分析器,發現GNU profiler,valgrind就是其中的一部分。問題是他們都只給出了功能級別的分析信息,而不是我需要的語句級別分析。有沒有可以提供這些信息的工具?Ubuntu Box上的應用程序分析

回答

1

將代碼編譯爲-g以獲取調試符號,並使用-O0優化程序不會擾亂代碼。

然後運行它的GDB調試器下,並且它正在緩慢而,通過按下Ctrl-C中斷它。 它將在另一個線程上停止,因此輸入thread 1即可進入活動線程。 然後輸入bt來顯示調用堆棧。 仔細看一下,瞭解它在做什麼,以及它爲什麼這樣做,當你停止它。

做這幾次,你就會擁有它是如何花費的時間非常精確的想法。 這就是random pausing技術,如果你仔細閱讀那裏的評論,你會看到它的工作效果。 另外,FWIW,我做了一個short video of it

正如你指出的那樣,大多數剖析不給你行級信息。一個我知道,給你一個)線路電平信息,B)包容時間(「自我時間」幾乎是無用的),C)上掛鐘時間(這樣你就不會盲目的I/O)的Zoom。 也許別人可以做到,我不確定。

即使探查器給你所有的,它給你珍貴的小語境和上下文是你必須能夠認識到當被花費的時間實際上是你可以擺脫什麼。 隨機暫停爲您提供完整的上下文。 它從事承認正在發生的事情你的大腦,而最重要的爲什麼,而這只是給你數字或圖形總結,並希望就足以找到的加速。

當你擠出每個循環時,你仍然可以看到一小部分樣本終止於編譯器編譯的代碼中,然後打開-O3並讓優化器完成它的工作。

0

PERF工具開始爲這剖析偉大的方式link

oprofile的也是不錯的,但你需要爲root訪問權限,這是link

,如果你想看到的每line profiling better to use annotate options .try使用非strip二進制文件並使用-g -static標誌編譯.is這就是你想要的或不同的答案。

+0

由於某些原因,它不能在我的ubuntu內核3.13.0-24-generic上工作。它失敗了很多警告「stalled-cycles-front-event event不被內核支持」 –

+0

@dreamer是兩個分析工具的問題,或者你是在說特定的一個分析工具? – user2760375

+0

我認爲profiler已經完成了任務,如果你知道哪個函數是性能密集型的,那麼如果函數定義很簡單,你應該能夠計算出哪些語句需要花費時間,如果不是,那麼你可以使用記錄器來查找所需的語句。 –