Giter Site home page Giter Site logo

valdroid's Introduction

Valdroid 3.8.1 / r8e

Valdroid is a binary build of Valgrind to Android on ARMv7.

This version was built from Valgrind 3.8.1 using the Android NDK r8e toolchain on Linux 32 bits.

Valdroid is meant as a convenience to Android NDK developers working with plain native executables, who might be looking for a quick setup in order to profile their applications. However I provide no guarantees this will work for you, other than that I use it myself and it does work for me. It goes without saying I am not in any way associated to Valgrind, I'm just a random user sharing a solution to a problem I had. In case of problems I am not the person to ask for help, all I did was follow the steps from Valgrind's Android README with minor variations; if it doesn't work your guesses are as good as mine, and you'd better contact the Valgrind community for support.

That said I have tried to make this manual reasonably sound and document all pitfalls I met along the way; if something else pops up on future releases, I'll make a point to keep it updated. Also if you find a problem not described here and figure a solution to it, I'd appreciate if you could share it. I am happy to pass along solutions to problems I have already faced, just don't expect me to bother with your problem if it isn't my problem too.

Usage

Note: I have only ever used Valgrind on rooted Android devices, and have not bothered looking into whether the steps below (or some variation thereof) would work otherwise. As you're looking into profiling a plain native app on Android I figure you must be savvy enough to find your way around if it doesn't, but be warned.

Clone the repository, open a command prompt to its base folder and type the commands below to copy Valdroid to your Android device:

adb shell mkdir -p /data/local/valdroid
cd valdroid
adb push . /data/local/valdroid
adb shell chmod 777 /data/local/valdroid/bin/*
adb shell chmod 777 /data/local/valdroid/lib/valgrind/*-arm-linux

Now, assuming your application foo is in folder /data/local and you want to use callgrind to profile its runtime performance, the command below will start it in profile mode with initial argument --bar=fubar:

adb shell /data/local/valdroid/bin/valgrind \
    --callgrind-out-file=/data/local/callgrind.out \
    --tool=callgrind /data/local/foo --bar=fubar

During application startup you may see the message below:

--XXXX-- WARNING: Serious error when reading debug info
--XXXX-- When reading debug info from /data/local/valdroid/lib/valgrind/vgpreload_core-arm-linux.so:
--XXXX-- Can't make sense of .data section mapping

I have no idea what it means, but the profiler seems to work nevertheless, so I haven't bothered looking into it. I'd appreciate a clarification if you happen to know what it's about.

Profile data will be recorded to file /data/local/callgrind.out and can be recovered with the command below:

adb pull /data/local/callgrind.out .

Build from Source

As I mentioned before Valgrind's Android README is the authoritative reference on how to build Valgrind for Android. I have however introduced my own variations to the process, which I document below.

As already noted I have used version r8e of the Android NDK for this build. I have no idea whether the steps below will work for other versions.

Download the Android NDK toolchain and extract it to $HOME/bin, then run the commands below to create a new stand-alone toolchain:

mkdir -p $HOME/bin/android-14-ndk-4.7
$HOME/bin/android-ndk-r8e/build/tools/make-standalone-toolchain.sh \
    --toolchain=arm-linux-androideabi-4.7 --platform=android-14 \
    --install-dir=$HOME/bin/android-14-ndk-4.7

Download Valgrind's source archive and extract it. Open a prompt to the extracted folder and type the commands below:

NDK=$HOME/bin/android-14-ndk-4.7
BIN=$NDK/bin
SYS=$NDK/sysroot
AR=$BIN/arm-linux-androideabi-ar
CC="$BIN/arm-linux-androideabi-gcc --sysroot=$SYS"
CXX="$BIN/arm-linux-androideabi-g++ --sysroot=$SYS"
LD=$BIN/arm-linux-androideabi-ld

./autogen.sh

./configure CC="$CC" CXX="$CXX" CPPFLAGS="-DANDROID_HARDWARE_generic" \
    --prefix=/data/local/valdroid --host=armv7-unknown-linux \
    --target=armv7-unknown-linux --with-tmpdir=/sdcard

make -j2
make -j2 install DESTDIR=`pwd`/android

If everything works, compiled files will be written to android/data/local/valdroid under the base source folder.

If you get errors about undefined number types (uint32_t etc), open header file $HOME/bin/android-14-ndk-4.7/sysroot/usr/include/elf.h, add a line #include <sys/types.h> before #include <sys/exec_elf.h> (somewhere around line 55), clean the project with make clean and try again. If the thought of fiddling with toolchain-wide headers bothers you, know that I completely understand how you feel, and I don't care.

Notes

After you get Valgrind running your logical next step is getting some tools to make sense of output files. See here for a list of GUI display tools. A binary build of KCacheGrind for Windows is availble here.

valdroid's People

Contributors

xperroni avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.