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

Max*_*sun 285 debugging android android-debug android-studio android-debugging

当我在调试模式下运行时,应用程序崩溃了,但是当我正常运行它时它会起作用.我认为附加调试器时会出现问题.

日志:

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
Run Code Online (Sandbox Code Playgroud)

Dak*_*san 319

对我来说,当我在嵌套函数中有一个断点时就会发生这种情况.就我而言,它位于Runnable.run(){}中.不确定它是否发生在其他嵌套函数中.

例:

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

如果run()func中的任何一行都有断点,它会因错误而崩溃Runnable.run() {}.

第一次遇到类时会发生此错误,而不是在遇到断点时.因此,当我A/art: art/runtime/jdwp/jdwp_event.cc:661] Check failed: Thread::Current() != GetDebugThread() (Thread::Current()=0x########, GetDebugThread()=0x########) Expected event thread在任何TouchEvent的代码运行之前(在构造函数之前)进入一条线时,就会发生这种情况.

解决方案是删除断点(并将其放在其他地方).

编辑:

忘了提,它似乎与API25有关,但也有针对API26和API27的报道.

编辑:

另一个解决方案是禁用即时运行,但请为下面的toobsco42信用额度.

  • 这已在code.google.com上报告,我正在努力将其修复.https://code.google.com/p/android/issues/detail?id=227513 (28认同)
  • 问题是7.1.1上的其他线程中的断点混合,即时运行.因此,改变上述3中的任何一个,它将停止崩溃. (11认同)
  • 我有sdk 23和构建工具25.0.1 - 同样的问题.删除断点可以解决这个问题. (4认同)
  • 我切换了模拟器并且问题消失了 - 切换回原始模拟器并且问题又回来了.一旦出现问题只能克服它(除了清除所有断点 - 不,谢谢)是禁用即时运行.在问题模拟器上重新启用Instant Run可以解决问题. (3认同)
  • 您也可以删除断点,按Debug,然后在应用程序运行正常后,将其重新添加到您想要的位置.然后工作正常,只需记住在重新启动之前删除它. (2认同)
  • 我可以在API 26和buildToolsVersion`26.0.2`上确认这一点. (2认同)

too*_*o42 186

在我的情况下,我不得不禁用即时运行.似乎Instant Run有各种各样的副作用,这可能就是其中之一.

  • 请注意,在Android Studio中,位于文件 - >设置 - >构建,执行,部署 - >即时运行. (47认同)
  • 那是我生命中的一小时,我再也见不到了 (9认同)
  • 在多台计算机上工作,谷歌不断重新应用即时运行,我需要它使我的效率大约提高4216%,因为它最终可以远程接近让我失去的时间. (3认同)

hck*_*knl 47

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

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

  • 删除所有断点,它再次工作,谢谢 (2认同)

小智 21

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

要删除所有断点:

  • 转到调试器选项.

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

  • 您将看到一个窗口,您可以删除所有断点.

请参阅此帖子中的更多内容:https://stackoverflow.com/a/42478994/5749462


fla*_*me3 16

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

  • 您可以使用快捷键CTRL + SHIFT + F8轻松取消标记所有断点. (3认同)

mbp*_*lin 8

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