如何有效地调试 Eclipse 中用 JNI 包装的 C 代码?(安卓开发)
2022-09-04 02:54:19
我有一个segfault,但我完全不知道如何找到它。
技巧?
我有一个segfault,但我完全不知道如何找到它。
技巧?
您可以使用 Android NDK 堆栈跟踪分析器获取导致崩溃的 C 函数的位置。
这些步骤在wiki上,但基本上你需要将堆栈跟踪从logcat获取到一个文件(),然后将你的库转储到一个文本文件,然后在它们两个上运行程序。以下是我用来做很多事情的 shell 脚本:adb logcat > mycrash.log
#!/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文件。
如何在 Eclipse 中有效地调试 Android JNI C/C++ 代码:
将项目设置为混合的 Java、C 和 C++项目:
http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/
设置项目以启用调试:
http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-debugging/#more-23
注意:该网站的作者在Ubuntu上使用Eclipse(Galileo)。在MacOS上使用Eclipse(Helios)时,我发现了一些差异(特别是在调试设置中)。一旦设置好了,Eclipse就可以很好地作为JNI开发的IDE。