VALGRIND

valgrind

Date Published:
Last Modified:

Overview

Valgrind is a tool that can be used to detect memory management and threading bugs.

The Valgrind logo.

The Valgrind logo.

Installation

  1. Download the latest Valgrind source code from http://valgrind.org/downloads/. For example, this downloads version 3.12.0:

    ~$ wget http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2
    
  2. Unpack the tarball with tar:

    ~$ tar -jxvf valgrind-3.12.0.tar.bz2
    
  3. cd into the root directory of the unpacked source code.

    ~$ cd valgrind-3.12.0
    
  4. Run configure with

    ~/valgrind-3.12.0$ /configure
    
  5. Run make with:

    ~/valgrind-3.12.0$ make
    
  6. Install valgrind onto your system with:

    ~/valgrind-3.12.0$ sudo make install
    
  7. Done! You should now be able to run valgrind by typing:

    ~/valgrind
    

    from any directory in your shell.

Profiling With Valgrind

The most simple way to run a program with Valgrind is to call valgrind and pass in the executable at the only parameter:

~$ valgrind ./profiling_test

This will run Memcheck, a memory error detector. Expect your program to run 4-10x slower!

To run callgrind, use the following command:

~$ valgrind --tool=callgrind ./profiling_test

The order of the optional parameters to valgrind is important! Make sure --tool=callgrind comes BEFORE the path to your executable.

This will generate a profile data file called callgrind.out.<pid> in the same folder as the exectuable. To display the results of the profiling:

~$ callgrind_annotate callgrind.out.<pid>

--dump-instr=yes allows you to get profile information at the instruction level.

However, this text can be hard to analyze! Thankfully, there is a visual tool called kcachegrind which can create visual graphs from the callgrind output (yes, kCACHEgrind can display the results of CALLgrind). kcachegrind can be installed on Ubuntu with:

$ sudo apt install kcachegrind

Be warned, kcachegrind could require around 350MB of space! I recommend you install kcachegrind on your development machine rather than embedded Linux.

kcachegrind can then be started by calling kcachegrind in the same directory as the cachegrind output data file:

$ kcachegrind

You should then be presented with wonderful profiling data as shown below!

The callgrind profiling output data being displayed in kcachegrind for a simple test application (with Fibonacci calculation and looping).

The callgrind profiling output data being displayed in kcachegrind for a simple test application (with Fibonacci calculation and looping).


Like this page? Upvote with shurikens!

Tags:

comments powered by Disqus