如何在Eclipse中有效地调试用JNI包装的C代码? (Android Dev)

时间:2011-01-30 22:44:34

标签: java android c java-native-interface android-ndk

我有一个段错误,但我完全不知道如何找到它。

提示? enter image description here

2 个答案:

答案 0 :(得分:10)

您可以使用Android NDK Stacktrace Analyzer获取导致崩溃的C函数的位置。

步骤在the wiki,但基本上你需要从logcat获取堆栈跟踪到一个文件(adb logcat > mycrash.log),然后将你的库转储到一个文本文件,然后运行该程序他们两个人。这是我用来做很多事情的shell脚本:

#!/bin/sh
if test $# -lt 2 ; then
    echo "Extract readable stack trace from Android logcat crash"
    echo "Usage $0 lib.so crash.log"
    exit 1
fi
of=$(mktemp)
echo "Disassemble $1"
~/tools/android-ndk-r5/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-objdump -S $1 > $of
echo "Parse stack trace in $2"
~/bin/parse_stack.py $of $2

根据需要更改Android NDK和parse_stack.py文件的路径。

答案 1 :(得分:6)

如何在Eclipse中有效调试Android JNI C / C ++代码:

  1. 将项目设置为混合的Java,C和C ++项目:

    http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/

  2. 设置项目以启用调试:

    http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-debugging/#more-23

  3. 注意:该站点的作者在Ubuntu上使用了Eclipse(Galileo)。我发现了一些差异 在MacOS上使用Eclipse(Helios)(尤其是使用调试设置)。设置完成后,Eclipse可以很好地用作JNI开发的IDE。