Using Valgrind and gdb in Scratchbox
({{delete}}, needs merging into Documentation/Maemo 5 Developer Guide/Kernel and Debugging Guide/Maemo Debugging Guide) |
|||
Line 1: | Line 1: | ||
+ | {{delete}} | ||
{{Midgard article}} | {{Midgard article}} | ||
Revision as of 15:45, 13 March 2010
This article has been marked for potential deletion. Please see the talk page for discussion. |
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.