디버그 모드에서 시작할 때 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

답변:


321

나를 위해 중첩 함수에 중단 점이있을 때 발생했습니다. 제 경우에는 안에 Runnable.run() {}있었습니다. 다른 중첩 함수에서 발생하는지 확실하지 않습니다.

예:

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

run () func 내부의 줄에 중단 점이 있으면 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

2
중단 점을 제거하고 디버그를 누른 다음 앱이 제대로 실행되면 원하는 지점에 다시 추가 할 수도 있습니다. 그러면 제대로 작동합니다. 다시 시작하기 전에 제거해야합니다.
cometfish

3
에뮬레이터를 전환했는데 문제가 해결되었습니다. 원래 에뮬레이터로 다시 전환하면 문제가 다시 발생했습니다. 문제가 해결 방법으로 만 나타나면 (모든 중단 점을 지우는 것 외에는 감사하지 않음) 즉시 실행을 비활성화하는 것입니다. 문제 에뮬레이터에서 Instant Run을 다시 활성화하면 문제가 다시 발생합니다.
Andy

11
이 문제는 7.1.1의 다른 스레드에서 즉시 실행이 중단 된 중단 점입니다. 따라서 위의 3 중 하나를 변경하면 충돌이 중지됩니다.
Warpzit

187

내 경우에는 인스턴트 실행을 비활성화해야했습니다. 인스턴트 런에는 모든 종류의 부작용이있는 것 같으며이 중 하나 일 수 있습니다.


47
Android Studio에서 파일-> 설정-> 빌드, 실행, 배치-> 인스턴트 실행 아래에 있습니다.
shortstuffsushi

저의 경우이기도합니다! 감사합니다 : D
francisco_ssb

9
그것은 다시는 볼 수없는 내 인생의 시간이었다
게리 박

3
Google이 지속적으로 즉시 실행을 다시 적용하면서 여러 컴퓨터에서 작업 할 때 마지막으로 잃어버린 시간을 되 찾을 수 있도록 원격으로 작동 할 때 약 4216 % 더 효율적으로 만들 수 있어야합니다.
Anthony

정말 고마워요. 대답으로 틱해야합니다;)이 못생긴 기능은 당신에게 5 센트를 제공하고 당신에게 100 달러를 낭비합니다 :))
Amir Ziarati

50

문제는 Android 버전 7.x와 관련이 있으며 중첩 된 함수의 모든 중단 점을 제거하고 Android 버전 6.0으로 테스트했으며 문제없이 작동합니다.

Google 개발자 팀의 답변에 따르면 2016 년 12 월 1 일에 수정되어 다음 릴리스에 적용될 예정입니다.


위의 의견이 도움이되었습니다! 고마워요!
Stepan Maksymov 2013 년

작동했습니다.이 답변을 받아 들여야합니다. 감사 ! 또한 다른 솔루션으로 Instant Run을 제거 할 수 있습니다
Özer Özcan

;) "Google 개발자 팀 응답에 따르면 2016 년 12 월 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

이 단축키는 OS 및 키보드 설정에 따라 항상 작동하지 않습니다
flame3

8

정말 이상합니다. 즉석 실행을 비활성화하고 문제가 스스로 해결되었습니다.


예, Android 7.0 이하의 기기에서 즉시 실행하면이 문제가 매우 쉽게 발생할 수 있습니다
egorikem

4

내 문제는 수입 명세서에 중단 점이 있다는 것입니다


그리고 세 번째처럼 이것에
부딪쳤다

3

여기에 이미지 설명을 입력하십시오

창 5 : 디버그에서 "브레이크 포인트보기"버튼을 사용하십시오.

여기에 이미지 설명을 입력하십시오

모두 선택 해제

여기에 이미지 설명을 입력하십시오


1

가장 간단한 해결책은 해결 방법없이 매력적으로 작동 할 다른 장치 또는 에뮬레이터 (AVD Manager 덕분에 선택했습니다) 를 찾는 것입니다.


1

디버그 모드 일 때만 내 앱이 다운되었습니다. 3.5 버전은 "Instant Run"이 "Apply Changes"로 바뀌 었으므로 비활성화 할 수 없었습니다. 내 솔루션은 앱을 정상적으로 시작하고 (녹색 화살표로) 충돌했던 장소 바로 다음을 탐색 한 다음 디버거를 연결하는 것입니다.
여기에 이미지 설명을 입력하십시오


0

Runable.run ()에서 중단 점을 제거하면 문제가 해결되었습니다. Runable.run () 내에서 런타임에 중단 점을 사용할 수있었습니다. 그러나 컴파일 타임에는 아닙니다.


0

이 같은 문제가 발생했지만 내 중단 점이 중첩 함수의 첫 번째 줄이므로 다른 곳으로 이동하는 방법은 무엇입니까?

임시 개인 메서드를 만들고 해당 메서드를 함수에서 가장 먼저 호출 한 다음 해당 메서드에서 중단 점을 설정했습니다.

디버깅을 마치면 메소드와 호출을 제거했습니다.


0

긴 샷이지만 사용하지 않는 import 문이 있고 가져 오기에 네트워크 호출을 실행하는 코드가있는 경우 충돌이 발생했지만 제거하면 코드가 정상적으로 디버깅 할 수있었습니다.


0

디버거로 시작할 때만 충돌이 시작됩니다. Android Studio 2.3.2를 다시 시작했습니다. 실행 모드에서 정상적으로 실행됩니다. onCreate 직후에 Log.d ()를 넣었습니다 ... 문제가 해결되었습니다! 그림을 이동!


0

내 응용 프로그램에서 모든 디버그 지점 삭제가 정상적으로 작동합니다 .Ctrl + Shift + F6을 사용하여 모든 디버그 지점을 제거 할 수 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.