如何解释 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的主要内容,如果未能解决你的问题,请参考以下文章