java - 如何在 Eclipse 中有效地调试用 JNI 包装的 C 代码? (安卓开发)

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

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

提示? enter image description here

最佳答案

您可以使用 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 文件的路径。

关于java - 如何在 Eclipse 中有效地调试用 JNI 包装的 C 代码? (安卓开发),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4846080/

相关文章:

c - "for"循环中变量的范围

c - 通过引用调用指针不起作用

java - 使用正则表达式的澳大利亚区域所需的地址解析和验证技术

android - 如何将文本居中放置在单选按钮中

c - C 中的 rand() 函数即使在播种时也不是随机的

Javascript:滚动发生之前的事件?安卓/iPhone

android - 如何从文件资源管理器在我的应用程序中打开单个图像

Java 9 模块和类路径 hell : conflicting class names

java - Session 对象中的 ArrayList 似乎丢失了内容

如果id已经存在,Java更新mysql行