Android技巧之一——如何查看Logcat

当错误出现时我们在错误的瞎搜索什么?

在很多情况下,出现错误,应当立即的先判断,然后再将自己的问题准确描述出来,不是上来就胡乱搜索一番,先动脑筋思考比什么都重要。

在Android的世界里,运行出现问题,先看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 ComponentInfo{com.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)

我还记得第一次看到这个问题的时候,我的想法是:“我去,怎么这么多问题?”卧槽,还能不能简单一点啊,这个error提示也太不人性化了吧!”

但是,BUG还是要除掉,那么怎么先通过分析得出大致的原因呢?


首先扫描一眼:发现有三行不一样,对了一个是

<span style="font-size:14px;">FATAL EXCEPTION: </span>
<span style="font-size:14px;">main 后面巴拉巴拉一行</span>
<span style="font-size:14px;">然后是Caused By</span>


<span style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 17.804800033569336px; background-color: rgb(238, 238, 238);">Caused by: </span><code style="margin: 0px; padding: 1px 5px; border: 0px; font-size: 14px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; white-space: pre-wrap; line-height: 17.804800033569336px; background: rgb(238, 238, 238);">java.lang.NullPointerException  这说明了出现该有引用的值变成了Null。</code>
<code style="margin: 0px; padding: 1px 5px; border: 0px; font-size: 14px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; white-space: pre-wrap; line-height: 17.804800033569336px; background: rgb(238, 238, 238);">接下来的几行便出现了问题所在大致地点  </code>
<code style="margin: 0px; padding: 1px 5px; border: 0px; font-size: 14px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; white-space: pre-wrap; line-height: 17.804800033569336px; background: rgb(238, 238, 238);"><code style="margin: 0px; padding: 1px 5px; border: 0px; font-size: 14px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; white-space: pre-wrap; line-height: 17.804800033569336px; background: rgb(238, 238, 238);">at com.paad.whereami.WhereAmI.updateWithNewLocation(WhereAmI.java:290)</code><br style="font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 17.804800033569336px; background-color: rgb(238, 238, 238);" /><code style="margin: 0px; padding: 1px 5px; border: 0px; font-size: 14px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; white-space: pre-wrap; line-height: 17.804800033569336px; background: rgb(238, 238, 238);">at com.paad.whereami.WhereAmI.onCreate(WhereAmI.java:216)</code>
</code>
<code style="margin: 0px; padding: 1px 5px; border: 0px; font-size: 14px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; white-space: pre-wrap; line-height: 17.804800033569336px; background: rgb(238, 238, 238);"><code style="margin: 0px; padding: 1px 5px; border: 0px; font-size: 14px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; white-space: pre-wrap; line-height: 17.804800033569336px; background: rgb(238, 238, 238);">
</code></code>
<span style="font-family:Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;"><span style="font-size: 14px; line-height: 17.804800033569336px; white-space: pre-wrap; background-color: rgb(238, 238, 238);">去查找</span></span><pre name="code" class="html"><code style="margin: 0px; padding: 1px 5px; border: 0px; font-size: 14px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; white-space: pre-wrap; line-height: 17.804800033569336px; background: rgb(238, 238, 238);"><code style="margin: 0px; padding: 1px 5px; border: 0px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">WhereAmI.java的290行和216行(函数名为updateWithNewLocation,</code></code><pre name="code" class="html"><code style="margin: 0px; padding: 1px 5px; border: 0px; font-size: 14px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; white-space: pre-wrap; line-height: 17.804800033569336px; background: rgb(238, 238, 238);"><code style="margin: 0px; padding: 1px 5px; border: 0px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">onCreate</code></code><span style="font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; white-space: pre-wrap; background-color: rgb(238, 238, 238);">)</span>

 
 

原帖地址  http://stackoverflow.com/questions/6065258/how-to-interpret-logcat


再不比如这个比较常见的问题


<pre name="code" class="html">07-27 16:04:35.139: E/AndroidRuntime(19490): FATAL EXCEPTION: main
07-27 16:04:35.139: E/AndroidRuntime(19490): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.twocucao.todolist/com.twocucao.todolist.TodoActivity1}: java.lang.ClassNotFoundException: Didn't find class "com.twocucao.todolist.TodoActivity1" on path: DexPathList[[zip file "/data/app/com.twocucao.todolist-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.twocucao.todolist-2, /vendor/lib, /system/lib]]
07-27 16:04:35.139: E/AndroidRuntime(19490): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2137)
07-27 16:04:35.139: E/AndroidRuntime(19490): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
07-27 16:04:35.139: E/AndroidRuntime(19490): 	at android.app.ActivityThread.access$600(ActivityThread.java:141)
07-27 16:04:35.139: E/AndroidRuntime(19490): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
07-27 16:04:35.139: E/AndroidRuntime(19490): 	at android.os.Handler.dispatchMessage(Handler.java:99)
07-27 16:04:35.139: E/AndroidRuntime(19490): 	at android.os.Looper.loop(Looper.java:137)
07-27 16:04:35.139: E/AndroidRuntime(19490): 	at android.app.ActivityThread.main(ActivityThread.java:5103)
07-27 16:04:35.139: E/AndroidRuntime(19490): 	at java.lang.reflect.Method.invokeNative(Native Method)
07-27 16:04:35.139: E/AndroidRuntime(19490): 	at java.lang.reflect.Method.invoke(Method.java:525)
07-27 16:04:35.139: E/AndroidRuntime(19490): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
07-27 16:04:35.139: E/AndroidRuntime(19490): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-27 16:04:35.139: E/AndroidRuntime(19490): 	at dalvik.system.NativeStart.main(Native Method)
07-27 16:04:35.139: E/AndroidRuntime(19490): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.twocucao.todolist.TodoActivity1" on path: DexPathList[[zip file "/data/app/com.twocucao.todolist-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.twocucao.todolist-2, /vendor/lib, /system/lib]]
07-27 16:04:35.139: E/AndroidRuntime(19490): 	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
07-27 16:04:35.139: E/AndroidRuntime(19490): 	at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
07-27 16:04:35.139: E/AndroidRuntime(19490): 	at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
07-27 16:04:35.139: E/AndroidRuntime(19490): 	at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
07-27 16:04:35.139: E/AndroidRuntime(19490): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128)
07-27 16:04:35.139: E/AndroidRuntime(19490): 	... 11 more


 

问题可以看出来,是
<strong><span style="font-size:14px;">at java.lang.ClassLoader.loadClass(ClassLoader.java:501)</span></strong>
<strong><span style="font-size:14px;">显然,这个错误时classloader过程中不能找到路径,新手估计再怎么判断也猜不出来为什么,但是隐隐约约感觉到这个与activity有关,因为log上面说的是不能实例化activity,还有什么路径问题,一看出错代码位置,并不是你写的代码位置,但既然问题出现了,肯定是你代码的问题,不在java文件中,就在xml文件中,于是寻找Menifest文件配置,看看是不是配置的问题(源于,出现这个问题之前manifest设置了相关路径,一查,果然,是activity的name名字拼错了。)</span></strong>
<strong><span style="font-size:14px;">
</span></strong>
<strong><span style="font-size:14px;">以上就是使用简单的Logcat判断出错的方法,这里的错误,仅仅是 “运行时错误”。如果是比较难排查的逻辑性错误,那我们还需要使用log日志的方法排查,log方法我们以后再说</span></strong>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值