手机重启后可以获取 logcat 日志吗?
Posted
技术标签:
【中文标题】手机重启后可以获取 logcat 日志吗?【英文标题】:Can I get logcat logs after phone reboots? 【发布时间】:2011-03-28 23:53:09 【问题描述】:我正在测试一个具有长期运行服务的 android 应用程序。我正在使用 Eclipse 并将 USB 线与坐在我旁边的电话连接起来。由于这是一项长期持续的服务,因此我在它运行时会做一些其他工作,并每隔一段时间检查一次 logcat 日志,以确保一切都按预期进行。
几分钟前,我注意到手机重新启动。我认为它之前已经这样做了,因为它会解释一些奇怪的应用程序行为。我迅速切换到 Eclipse 以查看发生了什么,发现 logcat 日志(似乎)在重新启动期间被清除。因此,没有日志记录我的应用程序是否崩溃(并关闭了手机?!),或者是否有其他问题导致手机和我的应用程序崩溃。
无论如何我可以找出发生了什么吗?这是一款开发手机,所以我不知道它是否经常自行重启/崩溃,或者仅在我的应用程序运行时。这是一个运行固件版本 2.1-update1 的摩托罗拉 Droid。
感谢您的帮助。
【问题讨论】:
***.com/questions/3361230/… 如果您知道如何打开手机控制台(对不起,我不知道),那么这可能会对您有所帮助。您可以添加 -f 参数并指定一个文件以将所有日志通过管道传输到,以便您可以在重新启动后获取它。 可能不是特别针对您的情况,但如果它对某人有帮助...我发现使用过多的系统资源会导致虚假重启,这些重启很难通过日志追踪。例如,如果你有一些东西会产生意图,但你没有听它们(例如,如果你的监听线程被阻塞了。) Android: How to get kernel logs after kernel panic?的可能重复 【参考方案1】:我不知道有什么方法可以做到这一点。但是,您可以使用 adb logcat -v time > logcat.txt
在 adb
中启动 logcat,然后再次运行您的应用程序。如果它第二次崩溃,那么您可以在您的机器上查看logcat.txt
中的输出。
【讨论】:
请注意,文件写入是缓冲的,因此重启前的最后一句话可能不会刷新到文件中。 @adamk:也是一个好点。有没有更清洁的方法来做到这一点(我猜是adb bugreport
)?
@eldarerathis:你猜对了 :) - 我用过几次,证明它很有用。顺便说一句 - 运行 adb shell logcat -f file.txt
可能比仅仅使用 shell 管道更好(在缓冲意义上),但这实际上只是一个猜测。
我遇到了崩溃,日志中的这一行:08-12 11:22:50.568 E/mdm_panicd( 1002): Modem has reset, reboot system!
谢谢!这有帮助。
@adamk:我得在某个时候测试一下。我的 Unix bash
语法如此卡在我的脑海中,以至于我只是自动使用 >
甚至没有考虑它。当然不是说我不爱bash
。【参考方案2】:
您可以使用adb bugreport
,它应该包含一些关于虚假重启的信息 - 例如,内核崩溃、最后的 logcat 条目等。
但请注意:此工具会输出大量信息,因此您必须深入挖掘才能找到所需的信息。
【讨论】:
哇。这给了我 20,000 多行。我确信这是很好的信息,虽然我不知道如何处理它! @Scott:我会先在您的应用程序包 ID、日志标签等内部搜索,看看是否有任何与您的应用程序相关的内容。 我现在正在查看它。不过,我在重新启动之前没有看到任何东西。也许我等得太久了?自上次重新启动以来已经过去了大约两个小时。【参考方案3】:我也遇到过这个问题。应该可以编写一个应用程序,将 logcat 输出连续保存到 SD 卡上的文件中。市场上有显示 logcat 输出的应用程序,所以我知道它可以从应用程序中访问。
@djv,我无法在手机的根目录或 /data 中找到 /log 目录。
【讨论】:
在 Android 中日志不会刷新到磁盘...它们存储为循环内存缓冲区。因此它们不会在您的手机重启后持续存在。 @AlexLockwood 这不太正确(不再)。看看***.com/a/10525021/529977/data/dontpanic
我的评论是基于我在本书中读到的信息:shop.oreilly.com/product/0636920021094.do 如果日志不断写入磁盘设备,性能会很差。所以我坚持我的评论。此外,这个答案肯定不再正确,因为自 API 16 以来应用程序不再能够访问 logcat。以上是关于手机重启后可以获取 logcat 日志吗?的主要内容,如果未能解决你的问题,请参考以下文章