2010-03-08 47 views
15

我想用valgrind做一些分析,因爲它不需要重新編譯程序。 (我要分析的程序已建立與「-g「)如何使用callgrind來分析只有一段時間的程序執行?

但是的valgrind(callgrind)是相當慢的......所以這是我做的事:

  1. 啓動服務器(我想到配置文件服務器)
  2. 一種附加到服務器
  3. 我做服務器的一些操作前,開始收集的個人資料數據的操作完成
  4. 後,最終收集的個人資料數據
  5. 分析分析數據。

我可以在Solaris上使用sun studio來做這種事情。 (使用dbx)。我只想知道是否可以使用valgrind(callgrind)做同樣的事情?

感謝

+1

什麼操作系統? – 2010-03-08 08:26:08

+0

是的,這是Linux – superb 2010-03-08 09:01:16

+0

我希望Valgrind不是您唯一的選擇。 你有沒有考慮過這種技術:(http://stackoverflow.com/questions/375913/what-c​​an-i-use-to-profile-c-code-in-linux/378024#378024) 你也可以使用* * pstack **或** lsstack **做同樣的事情。對於金錢,你可以得到很好的RotateRight/Zoom。 – 2010-03-08 16:08:59

回答

4

你不說什麼操作系統 - 我假設Linux的 - 在這種情況下,你可能想看看在oprofile的(免費)或Zoom(不是免費的,但你可以得到一個評估許可證) ,這兩者都是採樣分析器,可以在不重新編譯的情況下分析現有代碼。縮放更好,更易於使用(它有一個GUI和一些不錯的附加功能),但是你的系統中可能已經有了oprofile。

+0

是的,我只是看到其他人推薦這2個工具。對我來說,使用valgrind的關鍵是它不是root訪問,因爲我使用公共服務器來執行分析... – superb 2010-03-08 08:32:54

+0

我認爲你只需要root權限就可以安裝*這些工具 - 你應該可以運行它們而不需要根訪問,不是? (我使用一個普通的非root帳戶的縮放,但這是本地分析,所以我不能確定遠程分析案例。) – 2010-03-08 08:44:08

+0

我明白了,謝謝。但我仍然想知道是否可以使用valgrind來做同樣的事情。有時當我無法重現性能問題時,我需要直接看看測試機,但是安裝性能分析軟件(它收集硬件計數器)可能會影響系統性能,並且很多基準線需要調整,這是不允許的。所以valgrind是如果我可以用我在問題中描述的方式使用它,仍然是最好的選擇。 – superb 2010-03-08 08:51:44

27

你應該看看callgrind documentation,並閱讀關於callgrind_control。

  1. 啓動您的應用程序:valgrind --tool=callgrind --instr-atstart=no your_server.x
  2. 請1.
  3. 開始收集的個人資料數據callgrind_control -i on
  4. 年底收集的個人資料數據callgrind_control -i off
  5. kcachegrind分析數據callgrind_annotate/cg_annotate
相關問題