Valgrind is a popular set of tools for debugging and profiling C/C++ programs. One of its tools is callgrind, which can be used to profile a program to find out which calls are taking most of the time. In addition, the profiler output can be beautifully visualized using the tool KCacheGrind.
$ sudo apt-get install valgrind kcachegrind
Run the program using
callgrind, you should expect this execution to be 10-100x slower:
$ valgrind --tool=callgrind ./foobar
The profiler output is written to a file named
XYZ is the process ID of this invocation. This is helpful because you can run this tool multiple times and have the profiler output of all those executions stored separately.
Open the profiler output file using KCacheGrind:
$ kcachegrind callgrind.out.XYZ
KCacheGrind displays the profiler output information in a 3-pane window. On the left is the function call list. You typically click
main here. In the bottom-right pane, you see the functions called by the function you chose in the left pane (
main in this case). The function which took the most time is at the top and the list is sorted accordingly. You can also view this same information in a call graph or tree map by using the Call Graph and Call Map options.