【发布时间】:2014-12-20 16:23:25
【问题描述】:
我正在尝试修复我的应用中看似随机的崩溃。问题是,我已经将它连接到 Android Studio 中的调试器几个小时,它不会崩溃。事实上,它只有在应用程序不在最前沿时才会崩溃。我很确定它必须与我的广播接收器有关,但我无法随意复制它。
如果我在崩溃后附加调试器,有什么方法可以从崩溃中恢复 logcat?有没有一种简单的方法可以记录到持久文件?
【问题讨论】:
-
当您将设备连接到您的计算机时,您应该仍然可以看到崩溃的 logcat,您不必在崩溃时连接它就可以接收输出。
-
“有没有一种简单的方法可以记录到持久文件?”:logcat 缓冲区 IS 持久...嗯,部分持久 -至少到一个点,因为它是循环的,最终会被覆盖。正如@Egor 所提到的,如果您在崩溃后立即连接设备,您应该能够看到最新的 logcat 条目。在连接和调试时没有发生崩溃有点不祥 - 它表明由于单步调试不会出现多线程或异步代码,您有一个“竞争”条件。
-
我认为 logcat 不持久的原因原来是因为我在使用 Android Studio 时遇到的持续问题以及 logcat 滞后。我没有看到错误消息,因为即使错误发生在我开始调试之前,它也出现在 logcat 之后关于更新包并将调试器连接到进程的消息。
-
就我的错误的随机性而言,事实证明它发生在我的代码的两个部分中。第一个是在启动接收器中,它在我的启动顺序中的某个地方触发(考虑到我安装和卸载东西的频率是半随机的)和一个我什至没有意识到仍然存在的遗留方法,但只是被解雇了在晦涩难懂的情况下。实际错误是我试图从一个不存在的游标中获取一列。