I'm attempting to profile some c++ code on my mac (os x Lion) and I haven't been able to find anything useful. I'm looking for a profiler that will tell me what functions are taking up my cpu time (similar to the matlab profiler).
Here is what I have tried
- gprof. This is what I use on my linux machine, but it just gives me empty output on my mac (apparently a known problem)
- Instruments. I can't for the life of me figure out how to profile anything within my compiled binary. Nor can I find any sort of useful tutorial.
- (other searching revealed Shark, which is no longer available and Valgrind which is for memory).
Instruments is the tool to use. A full explanation of Instruments is outside the scope of this answer, but here's a quick start guide:
- Open Instruments.1
- Select the "Time Profiler" template.
- Select your application in the "Target" dropdown menu.2
- Hit the red circle ("record") button to start your application running.
- If applicable, do some stuff in your application that you need to profile.
- Hit the record button again to stop recording.
- Use the tools in Instruments to analyze your results.
Of the tools available, the ones that will be most frequently useful are:
- Expanding the call tree using the disclosure arrows
- Clicking the circled arrow on a function name to focus it
- Double-clicking a function to view the associated source
- The "Invert Call Tree" checkbox on the left-hand side
You can also start an invocation of instruments
on the command line:
instruments -l 30000 -t Time\ Profiler -p 5773
see instructions.
1 One easy way to open Instruments is to use Spotlight: Just click on the magnifying glass in the upper right corner of the taskbar (next to the clock) and type "Instruments".
2 Click "Choose Target..." and navigate to the path of your executable.