【问题标题】:Basics on using logcat in Android development在 Android 开发中使用 logcat 的基础知识
【发布时间】:2013-08-13 04:58:50
【问题描述】:

我刚开始使用 Android,我不明白如何使用这个 logcat 东西。

我正在开发模拟器,但将来可能也会在真实设备上工作。正在测试的程序之一 (SEE HERE) 在启动时挂断,其他用户建议我查看 logcat。但是我计算机中的 logcat 不断显示新文本并向上滚动。我不知道如何在所有这些混乱中寻找任何东西。有时,当我什至没有测试我的程序时,它会一直滚动。

如果我在模拟器中做任何事情,它会显示吗?模拟器已经很慢了,以至于很难弄清楚模拟器上的哪个事件导致了哪个消息。

另外,对于初学者来说,logcat 的详细程度是多少?断言不会显示任何内容(这可能是合乎逻辑的,因为我没有启用断言),所以我认为 Error 可能是最不冗长的模式,但即便如此,日志也有太多消息需要处理。

我需要将其设置为的最低详细级别是多少,是否有任何示例程序可以让我测试代码中的哪种事件在 logcat 中产生哪种 if 消息? (我在 IDE 中使用 logcat)

--- 编辑---

我看到logcat有这样的消息

08-12 08:24:26.699: I/Choreographer(528): Skipped 57 frames!  The application may be doing too much work on its main thread.  
08-12 08:25:02.550: I/Choreographer(528): Skipped 33 frames!  The application may be doing too much work on its main thread.  
08-12 08:25:07.950: I/Choreographer(528): Skipped 37 frames!  The application may be doing too much work on its main thread.  
08-12 08:25:08.022: E/SoundPool(287): error loading /system/media/audio/ui/Effect_Tick.ogg  
08-12 08:25:08.022: W/AudioService(287): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg  
08-12 08:25:08.022: E/SoundPool(287): error loading /system/media/audio/ui/Effect_Tick.ogg  
08-12 08:25:08.022: W/AudioService(287): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg  

这是信息模式,详细模式有更多难以理解的文字,所以我没有包含它。看起来它找不到包含按下后退按钮时要播放的声音效果的文件,它显示在日志上。如何删除与手机操作系统用户界面相关的此类不必要的消息,并仅显示与我正在测试的程序相关的消息以及导致它在代码中调用 onCreate() 之前挂断的原因?我现在希望能够从 IDE 执行此操作。

【问题讨论】:

    标签: android android-emulator logcat android-logcat


    【解决方案1】:

    Log.v() - 详细

    Log.d() - 调试

    Log.i() - 信息

    Log.w() - 警告

    Log.e() - 错误


    提示:一个好的约定是在你的类中声明一个 TAG 常量:

    private static final String TAG = "MyActivity";
    

    提示:当你打电话时不要忘记这一点

    Log.e(TAG, "index=" + i);
    

    使用Log.e();,因为它以红色显示您可以轻松识别所有日志中的错误


    您也可以在 eclipse 中使用 flitter Logs 进行检查。

    更多详情请查看Developer Site。

    【讨论】:

      【解决方案2】:

      在处理有问题的应用程序时,我会在 logcat 中切换到 ERROR 模式,并为我的应用程序的 package 名称添加过滤器,例如。 com.something.blah。这样我只会看到与我的应用相关的错误消息。

      当然,有时这些信息还不够,但当您需要更多信息时,您应该可以轻松地使用 logcat :)

      对于手动记录(使用Log.*),非常独特的标签(类似于ThisIsAVeryUniqueTag1234)可以节省大量时间。只需过滤此标签,它应该是您看到的唯一消息。有关如何使用标签和手动记录的完整信息,请参阅 Log。

      【讨论】:

        【解决方案3】:
        adb -d logcat <your package name>:<log level> *:S
        

        -d 表示实际设备,-e 表示仿真器。如果运行的模拟器超过 1 个,您可以使用 -s emulator-&lt;emulator number&gt;(例如,-s emulator-5558)

        示例:adb -d logcat com.example.example:I *:S

        或者,如果您使用System.out.print 将消息发送到日志,您可以使用adb -d logcat System.out:I *:S 仅显示对System.out 的调用。

        您可以在此处找到所有日志级别和更多信息:http://developer.android.com/guide/developing/tools/adb.html#logcat

        你应该在你的代码中使用Log.&lt;log level&gt;(TAG, message),标签可以是任何东西,但我总是使用包名。

        示例: Log.i("com.example.example", "message");

        【讨论】:

        • 我知道我可以将我的自定义消息发布到日志 cat 并且由于我使用 IDE 来处理所有内容,因此我可以通过 IDE 上的按钮将其清除。令人困惑的是,即使我没有运行我的程序,它也会继续滚动消息。即使当我按下返回按钮、按下主页按钮等时,它似乎也会显示很多消息。这些类型的消息会引起混乱。
        • 那么是否可以过滤 logcat,以便只显示与我正在测试的程序相关的消息?
        • 是的,这是可能的。我已经编辑了我的答案。请检查。但它适用于控制台。
        • 如果有帮助,请采纳答案,以便其他人快速了解正确答案。谢谢
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-18
        • 2022-09-29
        相关资源
        最近更新 更多