我刚刚开始Android,我不明白如何使用这个 logcat 的东西。
我正在使用模拟器,但将来也可能会在真正的设备上工作。其中一个正在测试的程序(SEE HERE)在启动时挂断,其他用户建议我查看logcat。但是我的计算机中的logcat会继续显示新文本并向上滚动。我不确定如何在所有混乱中寻找任何东西。有时候,当我甚至没有测试我的程序时,它会继续滚动。
如果我在模拟器中做了什么,它会显示出来吗?模拟器已经很慢了,很难弄清楚模拟器上的哪个事件导致了哪个消息。
另外,对于初学者来说,logcat的冗长程度是多少?断言断言没有显示任何内容(这可能是合乎逻辑的,因为我没有启用断言)所以我假设错误可能是最不详细的模式,但即使这样,日志也有太多要处理的消息。
我需要设置它的最低详细级别是什么,是否有任何示例程序可以让我测试代码中的哪种事件会产生什么样的logcat中的消息? (我在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中执行此操作。
答案 0 :(得分:4)
Log.v() - VERBOSE
Log.d() - DEBUG
Log.i() - INFO
Log.w() - WARN
Log.e() - ERROR
提示:一个好的约定是在类中声明一个TAG常量:
private static final String TAG = "MyActivity";
提示:当您拨打电话时不要忘记
Log.e(TAG, "index=" + i);
使用Log.e();
,因为它以红色显示您可以轻松识别所有日志中的错误
有关详情,请查看Developer Site。
答案 1 :(得分: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");
答案 2 :(得分:1)
在处理有问题的应用时,我所做的是在logcat中切换到ERROR模式,并为我的应用程序的包名称添加过滤器,例如。 com.something.blah
。这样我只能看到与我的应用程序相关的错误消息。
当然有时候这个信息不够,但是当你需要更多信息时,你应该习惯使用logcat:)
对于手动记录(使用Log.*
),非常独特的标签(类似ThisIsAVeryUniqueTag1234
)可以节省大量时间。只需过滤此标记,它就应该是您看到的唯一消息。有关如何使用标记和手动记录的完整信息,请参阅Log。