2011-01-30 84 views
14

我有段错误,但我绝对不知道如何找到它。如何在Eclipse中有效地调试用JNI包装的C代码? (Android Dev)

小贴士? enter image description here

+0

我试过下面这个http://stackoverflow.com/questions/3902066/how-to-call-java-methods-from-c-in-jni/3902495#3902495,但我甚至在我得到机会致电logcat:/ – 2011-01-30 23:01:16

+0

私有变量不能传递给本地函数。 D'哦。 – 2011-01-30 23:20:01

+0

简单且不那么快捷的方法:尝试以一步一步的方式隔离本地层中的呼叫,并检查哪个呼叫出错。另外值得一试的是: /docs/NDK-GDB.HTML - 介绍如何使用本机代码调试器 – TheCottonSilk 2011-01-31 07:14:43

回答

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文件。

6

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

  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

注意:该网站的作者在Ubuntu上使用了Eclipse(Galileo)。当在MacOS上使用Eclipse(Helios)时(尤其是在调试设置中),我发现了一些差异 。一旦设置好了,Eclipse就可以很好地用作JNI开发的IDE。

相关问题