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

时间:2011-12-01 08:48:45

标签: android java-native-interface

我正在编写JNI应用程序。 Logcat表示日志文件存在data / log / dumpstate_app_native.txt 也是系统墓碑中的东西。当我将Samsung Infuse作为媒体设备访问时,我看不到任何此类文件。实际上我也没有看到我的应用程序数据文件?它们在哪里,我确实看到了其他应用程序包,但在数据期间并不多。这是我在logcat中看到的:

dumpstate /data/log/dumpstate_app_native.txt 复制/ data / tombstones / tombstone_01到DropBox(SYSTEM_TOMBSTONE) 将堆栈跟踪写入'/data/anr/traces.txt

我在设备上搜索了* .txt的媒体设备但没有找到任何内容。

2 个答案:

答案 0 :(得分:11)

除非您使用模拟器或root电话,否则您将无法读取逻辑删除文件。 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
...

这是缩写的堆栈跟踪。您需要使用NDK中的addr2line工具来确定这些十六进制地址所引用的函数,文件和行号。在我的OSX系统上,获取stacktrace第一行的命令如下所示:

/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 的版本,其中包含行号信息。

答案 1 :(得分:0)

查看此链接http://bytesthink.com/blog/?p=133

确保你有正确的符号与收集的墓碑同步。