如何解释 Logcat

Posted

技术标签:

【中文标题】如何解释 Logcat【英文标题】:How to interpret Logcat 【发布时间】:2011-05-19 21:50:22 【问题描述】:

谁能告诉我应该如何阅读 Logcat 中的错误?我想了解我的问题出在哪里。

目前,我试图阅读它,但找不到崩溃的原因。

这是我不明白的 Logcat:

05-18 18:29:44.160: ERROR/androidRuntime(2145): FATAL EXCEPTION: main
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): java.lang.RuntimeException: Unable to start activity ComponentInfocom.paad.whereami/com.paad.whereami.WhereAmI: java.lang.NullPointerException
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at android.os.Looper.loop(Looper.java:130)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at android.app.ActivityThread.main(ActivityThread.java:3683)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at java.lang.reflect.Method.invokeNative(Native Method)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at java.lang.reflect.Method.invoke(Method.java:507)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at dalvik.system.NativeStart.main(Native Method)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): Caused by: java.lang.NullPointerException
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at com.paad.whereami.WhereAmI.updateWithNewLocation(WhereAmI.java:290)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at com.paad.whereami.WhereAmI.onCreate(WhereAmI.java:216)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)

【问题讨论】:

【参考方案1】:

在这种情况下,日志的第二个“部分”将成为对您重要的部分。

原因: java.lang.NullPointerException

这意味着在您的代码中某处设置了 null 并且您尝试使用它,就好像它不是一样。

接下来的几行告诉您在代码中的何处可以找到错误。

at com.paad.whereami.WhereAmI.updateWithNewLocation(WhereAmI.java:290)at com.paad.whereami.WhereAmI.onCreate(WhereAmI.java:216)

这应该意味着您在第 216 行从 onCreate 调用了一个名为 updateWithNewLocation 的方法。错误来自第 290 行的此方法内部。请查看代码中的第 290 行。无论您在那条线上尝试做什么都会导致异常,因为不应该是null

【讨论】:

【参考方案2】:

文档

Android 收集/分析日志的基本工具是 logcat。

HERE是Android关于logcat的页面

如果你使用android Studio,也可以查看这个LINK。

捕获

基本上,您可以使用以下命令手动捕获 logcat(或仅检查 AndroidStudio 中的 AndroidMonitor 窗口):

adb logcat

您可以在命令中添加很多参数,以帮助您过滤和显示您想要的消息...这是个人的...我总是使用下面的命令来获取消息时间戳

adb logcat -v time

您可以将输出重定向到文件并在文本编辑器中对其进行分析。

分析

您的应用正在崩溃,您收到如下错误:

05-18 18:29:44.160: ERROR/AndroidRuntime(2145): FATAL EXCEPTION: main
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): java.lang.RuntimeException: Unable to start activity ComponentInfocom.paad.whereami/com.paad.whereami.WhereAmI: java.lang.NullPointerException
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at android.os.Looper.loop(Looper.java:130)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at android.app.ActivityThread.main(ActivityThread.java:3683)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at java.lang.reflect.Method.invokeNative(Native Method)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at java.lang.reflect.Method.invoke(Method.java:507)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at dalvik.system.NativeStart.main(Native Method)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145): Caused by: java.lang.NullPointerException
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at com.paad.whereami.WhereAmI.updateWithNewLocation(WhereAmI.java:290)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at com.paad.whereami.WhereAmI.onCreate(WhereAmI.java:216)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-18 18:29:44.160: ERROR/AndroidRuntime(2145):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)

这部分日志显示了很多信息:

何时

问题发生时间:05-18 18:29:44.160

检查问题发生的时间很重要...您可能会在日志中发现几个错误...您必须确保您检查的消息正确:)

哪个应用程序

崩溃的应用:com.paad.whereami

这样,您就知道哪个应用程序崩溃了(以确保您正在检查有关您的消息的日志)

哪个错误

错误:java.lang.NullPointerException

空指针异常错误

哪个文件导致了这个错误

通常,我们只读取堆栈跟踪的第一行。但是,您的日志是一个很好的例子,我们需要检查整个日志。在下面的行中,我们可以看到空指针是否发生:

Caused by: java.lang.NullPointerException
    at com.paad.whereami.WhereAmI.updateWithNewLocation(WhereAmI.java:290)
    at com.paad.whereami.WhereAmI.onCreate(WhereAmI.java:216)

文件WhereAmI.java 中发生错误,在updateWithNewLocation() 方法中的行:290(stacktrace 显示发生错误的行)

堆栈跟踪

你可以看到哪个方法调用了updateWithNewLocation()。这很有用,因为有时在调用方法时会产生错误。在您的示例中,它被称为:

at com.paad.whereami.WhereAmI.onCreate(WhereAmI.java:216)

等等……

概述

这只是一个概述...并非所有日志都很简单等...只是分享想法并为您提供入门级信息...

希望能帮到你... 问候

【讨论】:

以上是关于如何解释 Logcat的主要内容,如果未能解决你的问题,请参考以下文章

logcat中的“真实对象已被删除”

Android 应用程序中的 OutOfMemoryError

如何获取 Admob 的设备 ID

JavaScript解释器如何解释代码?

JAVA 里面如何 使用jni 给个例子 加 解释。谢谢

将 json 解释为字符串,如何将其解释为 json? [复制]