Question

I'm trying to use gprof to profile a c++ application I've written but I can't figure out for the life of me how to download and install it. I've googled everything I can think of and can't even find a download link. Someone please help!

Was it helpful?

Solution

It seems there are two components to gprof. One is a part of the GCC compiler itself, invoked by using the -pg argument. The other is the gprof command, which apparently is part of GNU binutils. I'll leave it to you to figure out how to install GCC and binutils on OSX...

OTHER TIPS

I did not find a MacOS solution for gprof and gcov did not work for me, but gperftools (Google Performance Tools) do work. Here is how to install them on MacOS:

brew install google-perftools graphviz ghostscript gv
brew link --overwrite ghostscript

Next, run the profiler on a program:

CPUPROFILE=program_name.prof DYLD_INSERT_LIBRARIES=/usr/local/Cellar/gperftools/2.6.3/lib/libprofiler.dylib ./program_name
pprof --pdf program_name program_name.prof > program_name.pdf

You can find more options for gperftools here. Finally, open the program_name.pdf file in a PDF viewer such as Preview to enjoy the fancy graphviz output.

Obviously, running the profiler on a program can be automated very easily with a Bash script, as there only is the one program_name parameter and the shared library location is constant. Here is an example script called profile.sh that does exactly that, but includes compiling and adds a second variable so that you can compile .cpp files with a different name:

#!/bin/bash
g++-7 -fopenmp -O3 -o $1 $2.cpp
CPUPROFILE=$1.prof DYLD_INSERT_LIBRARIES=/usr/local/Cellar/gperftools/2.6.3/lib/libprofiler.dylib ./$1
pprof --pdf $1 $1.prof > $1.pdf
echo "Profiling results: $1.pdf"

Next, modify the permissions so it can run from any folder:

chmod +x profile.sh

The script can be invoked from the command line as follows, automating the full process:

./profile.sh program_name cpp_name

You may want to separate the compilation and profiling steps, which is easy enough to do by removing the g++-7 line in the shell script.

Since gprof does not work on OS X at the moment, use Google Performance Tools, now known as gperftools.

Also gcov works "out of the box" if you have gcc installed.

$ gcc -fprofile-arcs -ftest-coverage your_program.c
$ a.out
$ gcov your_program.c
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top