4

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

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

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

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

我需要将其设置为的最低详细级别是多少,是否有任何示例程序可以让我测试代码中的哪种事件在 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 执行此操作。

4

3 回答 3

4

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。

在此处输入图像描述

在此处输入图像描述

有关更多详细信息,请查看开发者网站

于 2013-08-13T05:13:33.617 回答
1

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

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

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

于 2013-08-13T13:22:50.033 回答
1
adb -d logcat <your package name>:<log level> *:S

-d表示实际设备,-e表示仿真器。如果运行的模拟器超过 1 个,您可以使用-s emulator-<emulator number>(例如,-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.<log level>(TAG, message)在你的代码中使用标签可以是任何东西,但我总是使用包名。

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

于 2013-08-13T05:05:20.817 回答