我在儀器時間分析器中有一個相對較長的功能。有沒有辦法給這個函數添加額外的符號,這樣抽樣會顯示分配給函數不同部分的時間?我正在尋找類似於(1)年前教授存在的MARK宏。如何在使用儀器時間分析器時細分功能
回答
使用宏:
#define MARK(K) asm("M."#K":");
已經爲我運作良好。這實際上只是我在原始問題中提到的舊MARK宏的簡化。放置MARK(LOOP1);函數中的某處將添加一個新符號M.LOOP1,該符號將顯示在由鯊魚或樂器顯示的函數列表中。
我聽說鯊魚能做到這一點,所以儀器也應該,但你必須告訴它做什麼:
做採樣,對掛鐘時間(不只是CPU時間) ,函數調用堆棧(不只是程序計數器PC)。
告訴你在很多堆棧樣本中出現的代碼行(不僅僅是函數)。
一個堆棧樣本包括PC和每個調用指令導致PC在哪裏。 堆棧中的每條指令都共同負責這段時間。
因此,任何負責X%時間的代碼行都會佔用堆棧X%的時間。如果它足夠大,值得一看,你會在樣本上看到它。你可能會得到很多樣品,但實際上並不需要太多。這是因爲定位問題比測量精度要更重要。
如果您最大的問題是固定的,可以爲您節省5%,它會出現在約5%或更多的樣本上。如果它小於這個值,那麼你的代碼非常優化。機會比這大得多,所以你不會有任何困難,看到它在哪裏。
添加:一個分析器的例子,牆壁時間堆棧採樣和逐行顯示是Zoom,所以我建議你看那個視頻。然後,嘗試讓樂器做同樣的事情。
我最近發現,在儀器中的時間分析器中,如果你雙擊一個方法,它會顯示你的源代碼和在每一行花費的時間百分比。
http://douglasheriot.com/blog/2011/04/xcode-4-instruments-awesomeness/
我發現它是非常有用的,但我不知道這是你問什麼。
UPDATE:
我已經更新了代碼,並創建一個單獨的項目:
https://github.com/nielsbot/Profiler
我有一些代碼,可以在這裏做到這一點:我有一些代碼,你可能會魚翅在這裏可以這樣做:https://gist.github.com/952456 HTH
你可以使用這樣的代碼來剖析你的函數的部分:
-(void)myMethod
{
ProfilerEnter(__PRETTY_FUNCTION__);
// ... code ...
{
ProfilerEnter("operation x");
// your code here
// ...
ProfilerExit("operation x");
}
ProfilerExit(__PRETTY_FUNCTION__);
}
- 1. 解釋Xcode 7儀器中的時間分析器
- 2. 如何啓用PostgreSQL功能分析器?
- 3. 分析和儀器
- 4. 儀器,CPU時間分析,不會顯示Obj-C調用
- 5. Apache Spark,時間序列分析功能
- 6. 時間分析器與CPU採樣器?
- 7. 使用儀器進行內存分析
- 8. 如何在運行時(運行時)生成詞法分析器和分析器?
- 9. SICP,Scheme,DrRacket問題:定時器/分析器功能?
- 10. 分析儀器讀數
- 11. 如何延長使用Watson音頻分析儀的超時時間
- 12. 如何在JavaCC分析器中使用JFlex詞法分析器?
- 13. Lucene標準分析儀在時間段上分割
- 14. 性能分析器:如何使用unsigned long來測量微秒級的時間?
- 15. 在解析器/子語法分析器開始時使用argparse.REMAINDER
- 16. 如何在使用json4s時設置Jackson解析器功能?
- 17. 如何使用儀器分析內存使用情況和性能?
- 18. 如何在測試時使用儀器?
- 19. 如何在使用子分析器時使argparse參數可選?
- 20. 使用'時間分析器'時的BLANK儀器屏幕。最新版本的Xcode 6
- 21. 線性時間一般分析器
- 22. NetBeans分析器 - 時間有些丟失?
- 23. Codeigniter分析器執行時間錯誤?
- 24. 時間簡檔在儀器
- 25. Xcode儀器不分析任何東西
- 26. 使用javascript細分和隔離時間
- 27. 分析Joda時間部分
- 28. F#性能分析器儀器不工作
- 29. LR分析器GOTO功能和Epsilon
- 30. Postgresql查詢分析器功能
Shark將執行每行報告,但我希望能夠調整粒度並獲取我指定的代碼段的報告。它不會出現儀器可以進行每行報告。 – Scott 2011-04-03 19:48:51
@Scott:真的嗎?我認爲樂器是鯊魚等等的一切。如果他們剔除每一行的報告,我很困惑。在任何情況下,我依賴的方法是[random-pausing](http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in-linux/378024# 378024)。您可能需要調整粒度,但我會建議真正起作用的方法是堆棧的掛鐘時間(而非CPU)採樣。我看單個樣本(並且不需要太多),並查看多個樣本上顯示的線條。 – 2011-04-03 22:01:06