ric*_*chq 10

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

这些步骤在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
Run Code Online (Sandbox Code Playgroud)

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


Chr*_*ris 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

注意:该站点的作者在Ubuntu上使用了Eclipse(Galileo).我在MacOS上使用Eclipse(Helios)时发现了一些差异(特别是在调试设置中).设置完成后,Eclipse作为JNI开发的IDE非常有效.

  • 好吧,他们可以让设置更难吗?我仍然无法让它用于调试. (4认同)