Using Valgrind and gdb in Scratchbox

(Re-write page for tone. Remove {{Template:Midgard article}} and Category:Midgard wiki)
Line 75: Line 75:
[[Category:Development]]
[[Category:Development]]
[[Category:Wiki page of the day]]
[[Category:Wiki page of the day]]
 +
 +
[[Category:Scratchbox]]

Revision as of 21:55, 25 October 2009

Image:Ambox_content.png
This is an article from the old midgard wiki that hasn't yet been fully updated for this wiki, please update it.
Please see the talk page for discussion.


Contents

Hints for using valgrind tools in Maemo Scratchbox

Running Valgrind and gdb

The standard way to use Valgrind and gdb is the af-sb-init.sh script. af-sb-init.sh supports parameters for running the software we're interested in with tools:

af-sb-init.sh start --valgrind=my_app
af-sb-init.sh start --gdb=my_app

Valgrind will store the results in /tmp/valgrind-my_app.log*. gdb will show its prompt on loading my_app.

Debugging applets

To debug a panel applet:

af-sb-init.sh start --valgrind=maemo_af_desktop

You'll get the results in /tmp/valgrind-maemo_af_desktop.log*

Other Valgrind front ends

To use other Valgrind front-ends, set the following environment variables:

  • VALGRINDCMD: the command you want to run inside valgrind.
  • VALGRIND: the valgrind command and parameters, including the front-end to use.

For example, to run massif on maemo_af_desktop:

 export VALGRINDCMD=maemo_af_desktop
 export VALGRIND="valgrind --tool=massif --num-callers=50
        --trace-children=yes --depth=5 --format=html -log-file=/tmp/massif
        --alloc-fn=g_malloc --alloc-fn=g_malloc0 --alloc-fn=g_realloc
        --alloc-fn=g_slice_alloc --alloc-fn=g_try_malloc
        --alloc-fn=g_slice_alloc0"
 af-sb-init.sh start
 ... do your stuff ...
 af-sb-init.sh stop

Your massif reports will be generated in /tmp (logs) and $PWD (html and postscripts).

Debug packages

When gdb uses "realpath" on libraries in Scratchbox, the path returned starts with "/targets//", which causes some issues. You can see the effect of this if you run Valgrind or gdb through strace. This causes problems when using debug packages.

To use debug packages with Valgrind and gdb in Scratchbox, run this script:

 #!/bin/sh
 # symlinks for debug symfiles in sbox
 mkdir -p /usr/lib/debug/targets
 cd /usr/lib/debug/targets
 ln -sf /usr/lib/debug $(sh -c '. /targets/links/scratchbox.config;echo $SBOX_TARGET_NAME')

GSlice

When using Valgrind, set the environment variable G_SLICE:

export G_SLICE="always-malloc"

Otherwise Valgrind will report bogus leaks (see this bug in Gnome Bugzilla for more information on Glib Gslice and Valgrind).

Analysing ARM core dumps

The cross-gdb used by default when it is installed in Scratchbox cannot debug ARM (EABI) core dumps. You need a natively compiled gdb to do this. To avoid using the cross-compiled gdb if it is installed, run your command with this script:

 #!/bin/sh
 # use native gdb in Scratchbox
 SBOX_REDIRECT_IGNORE=/usr/bin/gdb /usr/bin/gdb $*

To check which gdb you are running, run "gdb -v". If you see "--host=i686-pc-linux-gnu" when you are on ARM, then you are running cross-gdb.