300

当我在调试模式下运行时,应用程序崩溃了,但是当我正常运行它时,它可以工作。我认为问题发生在附加调试器时。

日志:

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
4

15 回答 15

328

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

例子:

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

如果 run() 函数内的任何行上有断点,它会崩溃并显示错误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信用。

于 2016-11-18T00:40:20.487 回答
187

就我而言,我不得不禁用即时运行。Instant Run 似乎有各种副作用,这可能就是其中之一。

于 2017-01-11T09:48:11.273 回答
50

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

根据谷歌开发者团队的回复,它已于 2016 年 12 月 1 日修复,并将在下一个版本中应用。

于 2016-12-01T10:49:39.030 回答
21

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

要删除所有断点:

  • 转到调试器选项。

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

  • 您将在那里看到一个窗口,您可以删除所有断点。

在这篇文章中查看更多信息:https ://stackoverflow.com/a/42478994/5749462

于 2017-09-29T13:04:34.567 回答
16

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

于 2018-01-15T10:45:04.130 回答
8

真的很奇怪,我禁用了 Instant Run,问题就自行解决了。

于 2017-08-15T08:52:21.687 回答
4

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

于 2017-09-08T11:40:41.660 回答
3

在此处输入图像描述

在窗口 5:调试中,使用“查看断点”按钮

在此处输入图像描述

取消全选

在此处输入图像描述

于 2018-06-29T15:27:26.467 回答
1

最简单的解决方案是尝试找到另一个设备或模拟器(感谢 AVD Manager,我们有一个选择),它可以在没有变通方法的情况下发挥魅力

于 2018-03-22T16:17:20.223 回答
1

我的应用程序也仅在调试模式下崩溃。至于 3.5 版本——“Instant Run”被“Apply Changes”取代,所以我无法禁用它。我的解决方案是正常启动应用程序(使用绿色箭头),在它曾经崩溃的位置之后导航,然后将调试器附加到它:
在此处输入图像描述

于 2019-10-09T16:35:01.403 回答
0

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

于 2017-06-12T06:55:23.680 回答
0

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

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

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

于 2017-08-24T15:31:24.713 回答
0

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

于 2017-11-08T16:30:36.413 回答
0

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

于 2017-11-14T21:01:38.617 回答
0

删除我的应用程序上的所有调试点工作正常您可以使用 ctrl+shift+f6 删除所有调试点

于 2019-09-06T05:40:57.887 回答