Editing Using Valgrind and gdb in Scratchbox

Warning: You are not logged in. Your IP address will be recorded in this page's edit history.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 1: Line 1:
-
#REDIRECT [[Documentation/Maemo_5_Developer_Guide/Kernel_and_Debugging_Guide/Maemo_Debugging_Guide]]
+
=Some hints for using valgrind tools in Scratchbox+Maemo=
 +
These commands work in the 386 scratchbox target.
 +
 
 +
First, standard way to use valgrind and gdb. af-sb-init.sh supports parameters for using these tools with a piece of software we want to study:
 +
 
 +
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 load of my_app. This way you can debug/valgrind the program you want.
 +
 
 +
An interesting example would be: "I want to valgrind my status bar applet". And this is easy:
 +
 
 +
af-sb-init.sh start --valgrind=maemo_af_desktop
 +
 
 +
You'll get the results in /tmp/valgrind-maemo_af_desktop.log*
 +
 
 +
If you want to run other valgrind tools, you would better use these environment variables: * VALGRINDCMD: the command you want to run inside valgrind. * VALGRIND: the valgrind command and parameters.
 +
 
 +
For example, if you want to run massif of maemo_af_desktop, you would run:
 +
<pre>
 +
export VALGRINDCMD=maemo_af_desktop
 +
export VALGRIND="valgrind <del>tool=massif </del>num-callers=50
 +
        <del>trace-children=yes </del>depth=5 <del>format=html </del>log-file=/tmp/massif
 +
        <del>alloc-fn=g_malloc </del>alloc-fn=g_malloc0 --alloc-fn=g_realloc
 +
        <del>alloc-fn=g_slice_alloc </del>alloc-fn=g_try_malloc
 +
      - -alloc-fn=g_slice_alloc0"
 +
af-sb-init.sh start
 +
... do your stuff ...
 +
af-sb-init.sh stop
 +
</pre>
 +
And you'll get your massif reports in /tmp (logs) and $PWD (html and postscripts).
 +
 
 +
If you want valgrind and gdb to find debug packages in Scratchbox, you need to do something like this:
 +
<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>
 +
This is because when Gdb uses "realpath" on libraries in Sbox it gets a path starting with /targets//... You can see the effect of this if you "strace" Valgrind (or Gdb).
 +
 
 +
When using Valgrind, you need to remember to use:
 +
 
 +
export G_SLICE="always-malloc"
 +
 
 +
Otherwise Valgrind will report bogus leaks (see Gnome Bugzilla for more information on Glib Gslice and Valgrind).
 +
 
 +
Another thing to remember about Gdb is that the Maemo Sbox cross-gdb cannot debug ARM (EABI) core dumps. You need target Gdb for this. However, because Sbox will use the host (cross-gdb) binary if it exists, you need to tell Sbox to ignore that:
 +
<pre>
 +
#!/bin/sh
 +
# use native Gdb in Scratchbox
 +
SBOX_REDIRECT_IGNORE=/usr/bin/gdb /usr/bin/gdb $*
 +
</pre>
 +
You can check which Gdb is used with "gdb -v". If it says "--host=i686-pc-linux-gnu" on ARM target, it's a cross-gdb.
 +
 
 +
 
 +
 
 +
[[Category:HowTos]]
 +
[[Category:Midgard wiki]]

Learn more about Contributing to the wiki.


Please note that all contributions to maemo.org wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see maemo.org wiki:Copyrights for details). Do not submit copyrighted work without permission!


Cancel | Editing help (opens in new window)