logcat是Android中一个命令行工具,可以用于得到程序的log信息。 一、logcat 结构 1、 这个结构在AS或者exlipse上面看的更清楚 二、logcat中地址反差backtrace 当程序崩溃的时候会在loacat中打印出backtrace,如下图所示 这个backtrace在墓碑文件tombstone中更清楚 这个地址就是程序崩溃时的调用栈,如果用带符号表的so文件,可以通过地址反查找到程序崩溃时的代码位置,如下图 地址反查的命令: 32位: 本机所使用的ndk\toolchains\arm-linux-androideabi-4.6\prebuilt\windows-x86_64\bin\arm-linux-androideabi-addr2line -C -e XXX.so -f 0xXXXXXX 64位: 本机所使用的ndk\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-addr2line -C -e XXXX.so -f 0XXXXXX 以下例子中把本机所使用的ndk\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin设置到了环境变量中,所以可以直接使用addr2line命令。 在ndk目录下还看到了其他的addr2line不知道为什么用这两个而不用其他的,希望走过路过了解的朋友解答一下。
三、问题的切入点 beginning of crash、has died、DeadObjectException、No implementation found等 Logcat一般都比较大,不可能一行一行分析,一般是找到问题发生的时间点,然后根据一些错误的信息,往前分析。喔目前遇到的错误信息,以下几种。 1、beginning of crash --------- beginning of crash 这个时候已已经发生了crash,找原因从这里往前找,写墓碑文件是往下找(就是第二条说的backtrace那里)。 有时候的崩溃打印不出来back trace,也就发查不到地址,这个时候只能继续分析logcat 2、has died 07-21 14:48:48.905 2464 3610 I ActivityManager: Process com.android.systemui (pid 2656) has died 这种时候进程已经死掉了,找原因往上找。 1、2都是说找crash或者进程死掉的地方,找原因就是下面的3、4 3、android.os.DeadObjectException 07-21 14:48:48.875 2464 2480 W BroadcastQueue: android.os.DeadObjectException 这是说有对象或者进程为已经死掉了,一般是指针为空造成的。 4、No implementation found 有接口的实现没有找到,一般会出现在jni里面,就是在java中声明,在c中实现的接口找不到。这个jni中c和java是怎么互相调用的。准备单独再写一篇文章,敬请期待。
|
|
来自: QomoIT > 《Android Studio》