m |
|
(One intermediate revision not shown) |
Line 1: |
Line 1: |
- | {{Midgard article}}
| + | #REDIRECT [[Documentation/Maemo_5_Developer_Guide/Kernel_and_Debugging_Guide/Maemo_Debugging_Guide]] |
- | | + | |
- | = 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]]
| + | |