1 Profiling your code {#profiling}
6 On linux you can use [gperftools](http:
7 - install `gperftools` (available as a pre-built
package on most platforms)
8 - make sure debugging symbols are being included in your build by, with `g++` or `clang++` adding `-g` to your `CMAKE_CXX_FLAGS`.
10 then if you are using a program that used the IMP flags support
11 - you can add the flag `--cpu-profiling` to profile the whole program
15 - either use environment variables to control profiling as in the web page above
16 - or add `-DCMAKE_EXE_LINKER_FLAGS=-ltcmalloc_and_profiler -DCMAKE_SHARED_LINKER_FLAGS=-ltcmalloc_and_profiler -DCMAKE_REQUIRED_FLAGS=-ltcmalloc_and_profiler` to your `cmake` invocation to add the required library to all compilations. This will activate control via %IMP flags and classes. Note that the name of the library might be different on your system. More explanations here: http:
18 To profile a specific piece of code use:
20 `#include <IMP/benchmark/Profiler.h>`
22 add a Profiler before the code you want to profile:
24 `IMP::benchmark::Profiler pp("prof_out");`
26 This will produce a prof_out file that can be viewed with pprof tool.
28 For detection of memory leaks, run your program
this way:
30 `env HEAPCHECK=normal your_program_exe`
32 it will output the leaks and also produce output file that can be viewed with pprof.
36 On a Mac, you can use the `Instruments` program that is part of the developer tools. It is pretty straight forwards to use and can
do cpu profiling, memory profile, leak checking etc. It is currently located in `/Applications/Xcode.app/Contents/Applications/Instruments.app/`.