在调试模式下启动时,Android应用程序崩溃


290

调试模式下运行时,应用程序崩溃,但在正常运行时,它可以正常运行。我认为问题是在连接调试器时发生的。

日志:

A/art: art/runtime/jdwp/jdwp_event.cc:661] Check failed: Thread::Current() != GetDebugThread() (Thread::Current()=0x7f44a18400, GetDebugThread()=0x7f44a18400) Expected event thread
A/art: art/runtime/runtime.cc:422] Runtime aborting...
A/art: art/runtime/runtime.cc:422] Aborting thread:
A/art: art/runtime/runtime.cc:422] "JDWP" prio=5 tid=4 WaitingForDebuggerSend
A/art: art/runtime/runtime.cc:422]   | group="" sCount=0 dsCount=0 obj=0x12c60280 self=0x7f44a18400
A/art: art/runtime/runtime.cc:422]   | sysTid=24137 nice=0 cgrp=default sched=0/0 handle=0x7f4b904450
A/art: art/runtime/runtime.cc:422]   | state=R schedstat=( 132066712 16401043 106 ) utm=9 stm=2 core=3 HZ=100
A/art: art/runtime/runtime.cc:422]   | stack=0x7f4b80a000-0x7f4b80c000 stackSize=1005KB
A/art: art/runtime/runtime.cc:422]   | held mutexes= "abort lock"
A/art: art/runtime/runtime.cc:422]   native: #00 pc 000000000047e2cc  /system/lib64/libart.so (_ZN3art15DumpNativeStackERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEEiP12BacktraceMapPKcPNS_9ArtMethodEPv+220)
A/art: art/runtime/runtime.cc:422]   native: #01 pc 000000000047e2c8  /system/lib64/libart.so (_ZN3art15DumpNativeStackERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEEiP12BacktraceMapPKcPNS_9ArtMethodEPv+216)
A/art: art/runtime/runtime.cc:422]   native: #02 pc 0000000000452434  /system/lib64/libart.so (_ZNK3art6Thread9DumpStackERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEEbP12BacktraceMap+480)
A/art: art/runtime/runtime.cc:422]   native: #03 pc 00000000004403ac  /system/lib64/libart.so (_ZNK3art10AbortState10DumpThreadERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEEPNS_6ThreadE+56)
A/art: art/runtime/runtime.cc:422]   native: #04 pc 0000000000440228  /system/lib64/libart.so (_ZNK3art10AbortState4DumpERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEE+668)
A/art: art/runtime/runtime.cc:422]   native: #05 pc 0000000000433bfc  /system/lib64/libart.so (_ZN3art7Runtime5AbortEPKc+148)
A/art: art/runtime/runtime.cc:422]   native: #06 pc 00000000000e597c  /system/lib64/libart.so (_ZN3art10LogMessageD2Ev+1592)
A/art: art/runtime/runtime.cc:422]   native: #07 pc 00000000002f8458  /system/lib64/libart.so (_ZN3art4JDWP9JdwpState24AcquireJdwpTokenForEventEm+624)
A/art: art/runtime/runtime.cc:422]   native: #08 pc 00000000002f7b1c  /system/lib64/libart.so (_ZN3art4JDWP9JdwpState29SendRequestAndPossiblySuspendEPNS0_9ExpandBufENS0_17JdwpSuspendPolicyEm+248)
A/art: art/runtime/runtime.cc:422]   native: #09 pc 00000000002fcb08  /system/lib64/libart.so (_ZN3art4JDWP9JdwpState16PostClassPrepareEPNS_6mirror5ClassE+1380)
A/art: art/runtime/runtime.cc:422]   native: #10 pc 0000000000124a9c  /system/lib64/libart.so (_ZN3art11ClassLinker11DefineClassEPNS_6ThreadEPKcmNS_6HandleINS_6mirror11ClassLoaderEEERKNS_7DexFileERKNS9_8ClassDefE+804)
A/art: art/runtime/runtime.cc:422]   native: #11 pc 0000000000381d04  /system/lib64/libart.so (_ZN3artL25DexFile_defineClassNativeEP7_JNIEnvP7_jclassP8_jstringP8_jobjectS7_S7_+344)
A/art: art/runtime/runtime.cc:422]   native: #12 pc 00000000001dd40c  /system/framework/arm64/boot-core-libart.oat (???)
A/art: art/runtime/runtime.cc:422]   at dalvik.system.DexFile.defineClassNative(Native method)
A/art: art/runtime/runtime.cc:422]   at dalvik.system.DexFile.defineClass(DexFile.java:296)
A/art: art/runtime/runtime.cc:422]   at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:289)
A/art: art/runtime/runtime.cc:422]   at dalvik.system.DexPathList.findClass(DexPathList.java:418)
A/art: art/runtime/runtime.cc:422]   at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54)
A/art: art/runtime/runtime.cc:422]   at com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader.findClass(IncrementalClassLoader.java:90)
A/art: art/runtime/runtime.cc:422]   at com.android.tools.fd.runtime.IncrementalClassLoader.findClass(IncrementalClassLoader.java:62)
A/art: art/runtime/runtime.cc:422]   at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
A/art: art/runtime/runtime.cc:422]   at java.lang.ClassLoader.loadClass(ClassLoader.java:367)
A/art: art/runtime/runtime.cc:422]   at java.lang.ClassLoader.loadClass(ClassLoader.java:367)
A/art: art/runtime/runtime.cc:422]   at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
A/art: art/runtime/runtime.cc:422] Dumping all threads without appropriate locks held: thread list lock mutator lock

我不知道发生了什么,但现在可以解决。魔法!!!
Maxim Rabtsun

我遇到了同样的问题,这是完整的BS。即使重启模拟器也无济于事。在删除了一堆代码然后一次读取一个代码块之后,我回到了原始代码,问题就消失了。我觉得只需要重建类对象。编译出错。我猜一个“干净”的项目可能会解决它。
Dakusan

将近3年后,此错误仍然存​​在。
阿提拉(Attila Tanyi)

Answers:


321

对我来说,它是在嵌套函数中有断点时发生的。就我而言,它在内Runnable.run() {}。不知道它是否在其他嵌套函数中发生。

例:

public class TouchEvent {
    public boolean HandleEvent(MotionEvent Event) {
        new Runnable() { @Override public void run() {
            int i=5;
            i++;
        }};
    }
}

如果run()函数内部的任何行上都有断点,则它会崩溃并显示error A/art: art/runtime/jdwp/jdwp_event.cc:661] Check failed: Thread::Current() != GetDebugThread() (Thread::Current()=0x########, GetDebugThread()=0x########) Expected event thread

第一次遇到该类时发生此错误,而不是在遇到断点时发生。因此,在我new TouchEvent();运行任何TouchEvent的代码之前(在构造方法之前),进入具有的行时,这对于我来说是发生的。

解决方案是删除断点(并将其放置在其他位置)。

编辑:

忘了提了,它似乎与API25有联系,但也有关于API26和API27的报道。

编辑:

另一个解决方案是禁用Instant Run,但是请在下面提供@ toobsco42的积分。


28
这已在code.google.com上报告,我正在努力将其修复。code.google.com/p/android/issues/detail?id=227513
Dakusan

4
我有SDK 23和构建工具25.0.1-同样的问题。删除断点可以解决此问题。
Bonton255 '16

2
您还可以删除断点,按Debug,然后在应用程序运行正常后,将其重新添加到所需的位置。然后可以正常工作,只是记得在重新启动之前将其删除。
cometfish

3
我切换了仿真器,问题消失了-切换回原始仿真器,问题又回来了。一旦出现问题,解决该问题的唯一方法(清除所有断点-不用了,谢谢)是禁用即时运行。在问题模拟器上重新启用Instant Run,可以使问题重新出现。
安迪

11
问题是7.1.1上其他线程的断点与即时运行混合在一起。因此,更改以上3项中的任何一项,它将停止崩溃。
Warpzit

187

就我而言,我必须禁用即时运行。看来Instant Run有各种各样的副作用,这可能是其中之一。


47
请注意,在Android Studio中,位于文件->设置->生成,执行,部署->即时运行下。
shortstuffsushi

这也是我的情况!谢谢:D
francisco_ssb

9
那是我一生的一个小时,我再也见不到
Gary Bak

3
在多台机器上工作时,由于Google不断重新应用即时运行功能,因此我需要它可以使我最终的效率提高4216%,因为它最终可以远程弥补损失的时间。
安东尼

非常感谢。应该打勾作为答案;)这个丑陋的功能给您带来了5美分,浪费了您100美元:))
Amir Ziarati

50

问题与Android版本7.x有关,我删除了嵌套函数中的所有断点,并且它也可以工作,并且也与Android版本6.0一起进行了测试,并且工作正常。

根据Google开发人员小组的回复,此问题已于2016年1月1日修复,并将在下一个版本中应用。


尽一切可能,以上评论有帮助!非常感谢!
Stepan Maksymov,

它的工作,这应该被接受的答案。谢谢 !此外,您还可以删除即时运行的另一个解决方案
泽尔奥兹坎

如果附上一个链接来支持此操作就很好了;)“根据Google开发人员小组的回复,该问题已在2016年1月1日修复,并将在下一个版本中应用。”
jabu.hlong

可能是电子邮件回复,今天仍然出现此错误,不得不删除断点
Jim Factor

Android 7.1.1仍然是Pixelbook上运行的Android版本。我一直在Pixelbook上的Android Studio中进行开发!
Jeff Lockhart,

21

我删除了所有断点,并使用Emulator Pixel API 25进行了测试。

要删除所有断点:

  • 转到调试器选项。

  • 单击下面的红色图标以停止调试。

  • 您会看到一个窗口,您可以在其中删除所有断点。

在此帖子中查看更多信息:https : //stackoverflow.com/a/42478994/5749462


16

这是由于调试点存在一些问题。删除所有调试点,然后它应该工作。


3
您可以使用快捷键CTRL + SHIFT + F8轻松取消标记所有断点。
brunoramonalmeida

此快捷方式不起作用所有的时间因您的操作系统和键盘设置
flame3

8

它真的很奇怪,我禁用了Instant Run,问题得以解决。


是的,在低于Android 7.0的设备上即时运行可能很容易导致此问题
egorikem '18

4

我的问题是我在import语句中有一个断点


并第三次遇到这个问题...基本上,任何断点有时都可能导致此情况,因此解决方案可能只是删除所有/最近的断点
egorikem '18


1

最简单的解决方案是尝试找到其他设备或仿真器(感谢AVD Manager,我们可以选择),这些设备或仿真器可以在没有解决方法的情况下发挥作用


1

我的应用程序也仅在调试模式下崩溃。至于3.5版本-“即时运行”已替换为“应用更改”,因此无法禁用它。我的解决方案是正常启动应用程序(带有绿色箭头),在它曾经崩溃的位置之后导航,然后将调试器附加到该应用程序:
在此处输入图片说明


0

从Runable.run()删除断点为我解决了这个问题。我可以在运行时在Runable.run()中使用断点。但不是在编译时


0

遇到同样的问题,但我的断点是嵌套函数的第一行,那么如何将其移至其他位置?

我创建了一个临时的私有方法,并在函数中首先调用了该方法,然后在该方法中设置了断点。

完成调试后,我删除了该方法及其调用。


0

这是一个很长的路,但是对我来说,当我有一个未使用的导入语句,并且该导入具有运行网络调用的代码时,它对我来说是崩溃的,但是在删除它时,该代码能够正常调试。


0

仅在使用调试器启动时启动崩溃。重新启动Android Studio 2.3.2 ...保持崩溃。在运行模式下运行良好。我在onCreate之后放了一个Log.d(),它解决了这个问题!去搞清楚!


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.