我正在尝试在我的Mac(OS X Lion)上对一些C++代码进行性能分析,目前还没有找到有用的工具。我需要一个能够告诉我哪些函数占用了CPU时间的分析器(类似于Matlab分析器)。
我已经尝试过以下工具:
- gprof。这是我在Linux机器上使用的工具,但在我的Mac上只会输出空内容(显然是一个已知的问题)。
- Instruments。我无法弄清如何在编译后的二进制文件中进行性能分析,也找不到任何有用的教程。
- 其他搜索结果提到的Shark已经不再可用,而Valgrind则只能做内存分析。
我正在尝试在我的Mac(OS X Lion)上对一些C++代码进行性能分析,目前还没有找到有用的工具。我需要一个能够告诉我哪些函数占用了CPU时间的分析器(类似于Matlab分析器)。
我已经尝试过以下工具:
可用的工具中,最常用的工具是:
您还可以在命令行上启动instruments
的调用:
instruments -l 30000 -t Time\ Profiler -p 5773
请查看说明。
1 打开Instruments的一种简单方法是使用Spotlight:只需点击任务栏右上角(时钟旁边)的放大镜,然后键入“Instruments”。
2 点击“选择目标...”,然后导航到可执行文件的路径。
iprofiler
命令行工具可以收集跟踪信息,并且这些信息可以在 Instruments 应用程序中查看。由于 man -k profiler
没有包含它在结果中,因此很难发现它的存在。 - Kurtis Raderinstruments
。例如,instruments -t "Time Profiler" ./a.out foo.txt 20
— 这比在 GUI 中设置参数和工作目录更容易。之后,生成的 instrumentscli0.trace
可以通过 Instruments GUI 打开,甚至可以通过命令行打开 GUI:open -a Instruments instrumentscli0.trace
。 - ShreevatsaRinstruments
命令行工具(我也在寻找它,但迄今没有成功)。 - Paul R sample
程序,它像其他程序一样对调用堆栈进行采样。工具是解决问题的关键。 为了避免空白痕迹的问题,请确保从XCode中打开工具:
Xcode > Open Developer Tool > Instruments
如果您使用上一个版本的XCode之前固定在dock中的旧Instruments图标打开Instruments,它将给您空白的跟踪结果。