|
|
| Line 1: |
Line 1: |
| {{delete}}
| | #REDIRECT [[Documentation/Maemo_5_Developer_Guide/Kernel_and_Debugging_Guide/Maemo_Debugging_Guide]] |
| {{Midgard article}}
| |
| | |
| = 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:
| |
| <pre>
| |
| 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
| |
| </pre>
| |
| | |
| 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:
| |
| <pre>
| |
| #!/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')
| |
| </pre>
| |
| | |
| == GSlice ==
| |
| | |
| When using Valgrind, set the environment variable G_SLICE:
| |
| | |
| export G_SLICE="always-malloc"
| |
| | |
| Otherwise Valgrind will report bogus leaks (see [http://bugzilla.gnome.org/show_bug.cgi?id=444444 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:
| |
| <pre>
| |
| #!/bin/sh
| |
| # use native gdb in Scratchbox
| |
| SBOX_REDIRECT_IGNORE=/usr/bin/gdb /usr/bin/gdb $*
| |
| </pre>
| |
| | |
| 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.
| |
| | |
| | |
| [[Category:Development]]
| |
| [[Category:Wiki page of the day]]
| |
| | |
| [[Category:Scratchbox]]
| |