Android如何读取JNI核心转储文件

Android如何读取JNI核心转储文件,android,java-native-interface,Android,Java Native Interface,我正在编写JNI应用程序。Logcat表示日志文件存在data/log/dumpstate\u app\u native.txt 还有系统墓碑中的东西。当我访问Samsung Infuse as媒体设备时,我没有看到任何此类文件。事实上,我也看不到我的应用程序数据文件?它们在哪里,我确实看到了其他的应用程序包,但在数据周期内并没有太多。以下是我在logcat中看到的内容: dumpstate/data/log/dumpstate\u app\u native.txt 将/数据/墓碑/墓碑01复制

我正在编写JNI应用程序。Logcat表示日志文件存在data/log/dumpstate\u app\u native.txt 还有系统墓碑中的东西。当我访问Samsung Infuse as媒体设备时,我没有看到任何此类文件。事实上,我也看不到我的应用程序数据文件?它们在哪里,我确实看到了其他的应用程序包,但在数据周期内并没有太多。以下是我在logcat中看到的内容:

dumpstate/data/log/dumpstate\u app\u native.txt 将/数据/墓碑/墓碑01复制到DropBox(系统墓碑) 将堆栈跟踪写入“/data/anr/traces.txt”


我在作为媒体设备的设备上搜索了*.txt,但什么也没找到

除非您使用的是仿真器或根手机,否则您将无法读取墓碑文件。 Logcat在调试级别打印墓碑(就是“复制墓碑”消息之前的那个大内核转储)。应该有这样一个部分:

01-18 16:28:04.334 16759 16759 I DEBUG   :  scr 80000012
01-18 16:28:04.334 16759 16759 I DEBUG   : 
01-18 16:28:04.384 16759 16759 I DEBUG   :          #00  pc 00007f84  /data/data/com.myapp/lib/myjnilib.so
01-18 16:28:04.384 16759 16759 I DEBUG   :          #01  pc 00008f80  /data/data/com.myapp/lib/myjnilib.so
01-18 16:28:04.394 16759 16759 I DEBUG   :          #02  pc 00002c6a  /data/data/com.myapp/lib/myjnilib.so
01-18 16:28:04.394 16759 16759 I DEBUG   :          #03  pc 00002ea8  /data/data/com.myapp/lib/myjnilib.so
01-18 16:28:04.394 16759 16759 I DEBUG   :          #04  pc 00003178  /data/data/com.myapp/lib/myjnilib.so
01-18 16:28:04.394 16759 16759 I DEBUG   :          #05  pc 00011e74  /system/lib/libdvm.so
...
/opt/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/bin/arm-linux-androideabi-addr2line -f -e myJNIproject/obj/local/armeabi/myjnilib.so 0x00007f84
这是stacktrace的缩写。您需要在NDK中使用addr2line工具来确定这些十六进制地址所引用的函数、文件和行号。在我的OSX系统上,获取stacktrace第一行的命令如下所示:

01-18 16:28:04.334 16759 16759 I DEBUG   :  scr 80000012
01-18 16:28:04.334 16759 16759 I DEBUG   : 
01-18 16:28:04.384 16759 16759 I DEBUG   :          #00  pc 00007f84  /data/data/com.myapp/lib/myjnilib.so
01-18 16:28:04.384 16759 16759 I DEBUG   :          #01  pc 00008f80  /data/data/com.myapp/lib/myjnilib.so
01-18 16:28:04.394 16759 16759 I DEBUG   :          #02  pc 00002c6a  /data/data/com.myapp/lib/myjnilib.so
01-18 16:28:04.394 16759 16759 I DEBUG   :          #03  pc 00002ea8  /data/data/com.myapp/lib/myjnilib.so
01-18 16:28:04.394 16759 16759 I DEBUG   :          #04  pc 00003178  /data/data/com.myapp/lib/myjnilib.so
01-18 16:28:04.394 16759 16759 I DEBUG   :          #05  pc 00011e74  /system/lib/libdvm.so
...
/opt/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/bin/arm-linux-androideabi-addr2line -f -e myJNIproject/obj/local/armeabi/myjnilib.so 0x00007f84
其中myJNIproject/obj/local/armeabi/myjnilib.so是包含行号信息的myjnilib.so版本。

查看此链接


只需确保收集到正确的符号与墓碑同步。

还有
ndk堆栈
,它包含在ndk中