今天工作的时候,我好像突然不能调试我们的应用程序了。有趣的是,如果我正常运行应用程序,它会工作得很好。澄清一下,我整个上午都在运行调试器,没有发生任何意外(除了偶尔出现的故障或崩溃)。午餐后,它开始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项目重新同步
- 删除所有断点(认真吗?)
- 好吧,我一直在添加断点,看看事情是如何工作的,所以谁知道呢?这是有价值的。
- 重新启动Android Studio!(关闭并再次打开)
到目前为止,都没有任何工作。然而,我不能强调足够的是,如果我只是运行应用程序(播放按钮,^R),并在同一设备上运行它,它的工作刚刚好!登录没有问题。这似乎不是代码问题。
此外,如果您查看堆栈跟踪,没有任何指向我们的项目的东西。
有什么想法吗
5条答案
按热度按时间zphenhs41#
我想明白了原来我有一个“Java Field Watchpoint”,选择了“Suspend Thread”作为选项之一。请参见随附的屏幕截图以进行说明。要点:
正如你所看到的,我一直在使用一堆断点,所以它被埋在窗口中,我没有看到它。
我还是不知道它是怎么固定的。前一天我一直在使用手表,但我已经把它们都删除了。此外,我很确定我没有打开它,所以它是如何在中午神秘地停止工作的仍然是一个谜。另外,我肯定不会自己检查“挂起线程”。某种默认设置?
点剩余-如果你看到奇怪的堆栈跟踪,最好检查所有的断点 * 和 * 观察点设置。
我希望这对某人有帮助。
x1c 0d1x的数据
aoyhnmkz2#
Instant Run似乎是罪魁祸首(至少在我使用Android Studio 2.3.3的情况下)。尝试禁用Instant Run,而不是禁用断点。一旦我这样做了,断点就不再导致崩溃。
详情请参见Android app crashes when launched in debug mode。在Mac OS X下,我通过进入Android Studio->Preferences->Build,Execution,Deployment->InstantRun并取消选中“Enable Instant Run to hot swap...”来禁用Instant Run。
出现“Instant Run有问题吗?”消息。我点击了“重新启用并激活额外的日志记录”,再现了崩溃,然后立即使用“帮助-报告即时运行问题...”选项报告。
mnemlml83#
关闭即时运行,它会解决所有的问题
wlsrxk514#
我更换了模拟器(从Android 8.1到Android 7.0),没有再遇到这种情况。我在这上面浪费了三个小时。我希望我的建议能帮助到一些人。
klr1opcd5#
我今天遇到了同样的问题。经过几个小时的努力,终于找到了解决办法。我目前正在使用多个线程,断点被设置为“all”而不是“thread”。我不确定,但它似乎在某种程度上干扰了一个活动被更改,并阻止了新活动的创建。一旦我切换到“线程”,没有更多的错误!x1c 0d1x的数据