14
A
回答
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:
设置你的项目是一个混合的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。
相关问题
- 1. 如何在Eclipse中调试R包(使用C和C++代码)?
- 2. 如何使用Eclipse在Android上调试C++代码?
- 3. Android的 - 如何让安装的软件包中JNI的C代码
- 4. 如何在Android eclipse中使用ndk-r8d调试jni文件
- 5. 如何调试C++代码的C++/CLI包装
- 6. 在Eclipse中调试Android Widget代码
- 7. 从C++函数调用C函数在Android中JNI/NDK代码
- 8. 将GDB附加到Eclipse以调试JNI C++代码
- 9. 关于在Eclipse中调试SWIG包装的C++代码的提示?
- 10. 如何在Eclipse中调试R代码
- 11. 如何在eclipse中调试php代码?
- 12. 有条件地在C++中调用JNI
- 13. 在eclipse上部署java JNI(包含C++代码)应用程序
- 14. Android JNI上有/ dev/random替代吗?
- 15. 如何在Java代码中调用C++方法从JNI
- 16. 如何防止在我的android jni调用中停止代码?
- 17. 通过JNI调用调试Java代码
- 18. 从C++代码中调用Python调试的有效方法
- 19. Eclipse编译调试与本地调试(C++代码)
- 20. 如何调试JNI/C库?
- 21. 在eclipse中编译样本JNI代码
- 22. 如何在Eclipse中循环后调试android代码
- 23. 调试混合JNI代码的方法?
- 24. Android JNI APK包装
- 25. 如何将C代码转换为JNI兼容的C代码?
- 26. 在eclipse中调试Android JNI/C++应用程序的最佳方式是什么?
- 27. 使用Jni包装C++库
- 28. 如何在NDK中调试JNI C文件android
- 29. 如何在Android中使用eclipse调试
- 30. 的Eclipse和Android NDK编译的C++代码比JNI
我试过下面这个http://stackoverflow.com/questions/3902066/how-to-call-java-methods-from-c-in-jni/3902495#3902495,但我甚至在我得到机会致电logcat:/ – 2011-01-30 23:01:16
私有变量不能传递给本地函数。 D'哦。 – 2011-01-30 23:20:01
简单且不那么快捷的方法:尝试以一步一步的方式隔离本地层中的呼叫,并检查哪个呼叫出错。另外值得一试的是: /docs/NDK-GDB.HTML - 介绍如何使用本机代码调试器 –
TheCottonSilk
2011-01-31 07:14:43