25

今天工作的时候,我好像突然不能再调试我们的应用程序了。有趣的是,如果我正常运行该应用程序,它会正常工作。澄清一下,我整个早上都在运行调试器,没有发生任何事故(除了偶尔的故障或崩溃)。然后午饭后它开始失败 100% 的时间。当然,我整天都在进行更改,因此上面的“似乎”。所以,这里有一些相关的细节:

  • Android Studio 2.1.1(2016 年 4 月 28 日构建)

  • 此应用程序以登录屏幕启动。然后,用户必须使用调用外部服务的用户名/密码进行身份验证。

  • 我可以进入登录屏幕,但应用程序总是会在身份验证过程中的同一点崩溃。

这是堆栈跟踪:

05-24 14:56:25.764 2399-2745/com.mycomp.myapp.test E/Crashlytics: Failed to execute task.
                    java.lang.InterruptedException
                        at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:375)
                        at java.util.concurrent.FutureTask.get(FutureTask.java:162)
                        at com.crashlytics.android.v.a(SourceFile:1936)
                        at com.crashlytics.android.v.uncaughtException(SourceFile:307)
                        at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
                        at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
05-24 14:56:25.764 2399-2745/com.mycomp.myapp.test E/AndroidRuntime: FATAL EXCEPTION: pool-5-thread-1
                       Process: com.mycomp.myapp.test, PID: 2399
                       java.lang.InterruptedException
                           at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:1991)
                           at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2025)
                           at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
                           at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1035)
                           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1097)
                           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                           at java.lang.Thread.run(Thread.java:820)

以下是我尝试解决的问题:

  • 退出我的所有更改(git stash)
  • 从手机卸载应用程序
  • 做一个干净的构建
  • 做一个 Gradle 项目重新同步
  • 删除所有断点(真的吗?)
    • 好的,我一直在添加断点以查看事情是如何工作的,所以谁知道呢?那里有一些优点。
  • 重启安卓工作室!(将其关闭并重新打开)

到目前为止,没有任何效果。但是,我怎么强调都不过分,如果我只是运行应用程序(播放按钮,^R)并在同一台设备上运行它,它就可以正常工作!登录没有问题。因此,这似乎不是代码问题。

此外,如果您查看堆栈跟踪,则没有任何内容指向我们的项目。

有任何想法吗?

4

4 回答 4

43

嗯,我想通了。事实证明,我选择了“暂停线程”作为选项之一的“Java 字段观察点”。请参阅随附的屏幕截图以进行说明。要点:

如您所见,我一直在使用一堆断点,所以它被埋在窗口中而我没有看到它。

我仍然不知道它是如何设置的。前一天我一直在用手表,但我把它们都删了。此外,我很确定我没有打开它,所以它是如何在一天中神秘地停止工作的仍然是一个谜。另外,我当然不会自己检查“挂起线程”。某种默认设置?

点仍然存在 - 如果您看到奇怪的堆栈跟踪,最好检查所有断点观察点设置。

我希望这可以帮助别人。

Android Studio 中 BreakPoint 窗口的屏幕截图

于 2016-05-25T15:49:39.640 回答
24

Instant Run 似乎是罪魁祸首(至少在我使用 Android Studio 2.3.3 的情况下)。尝试禁用 Instant Run,而不是禁用断点。一旦我这样做了,断点就不再导致崩溃。

有关详细信息,请参阅在调试模式下启动时 Android 应用程序崩溃。在 Mac OS X 下,我通过转到 Android Studio->Preferences->Build、Execution、Deployment->InstantRun 并取消选中“Enable Instant Run to hot swap ...”来禁用 Instant Run。

有一个“Instant Run 遇到问题?” 设置面板中显示的消息。我点击了“重新启用并激活额外的日志记录”,重现了崩溃,然后立即按照他们的要求使用“帮助 - 报告即时运行问题...”选项进行报告。

于 2017-07-16T01:19:00.247 回答
2

关闭即时运行,它会解决所有问题

于 2018-09-07T06:16:38.087 回答
1

我更改了模拟器(从 Android 8.1 到 Android 7.0)并且没有再次遇到这种情况。我在这上面浪费了 3 个小时。我希望我通过建议这个来帮助别人。

于 2018-10-26T21:21:07.530 回答