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 2016年

私は同じ問題に遭遇し、それは完全なBSでした。エミュレーターを再起動しても助けにはなりませんでした。一連のコードを削除し、一度に1ブロックずつ読み取ると、元のコードに戻り、問題は解消しました。再構築する必要があるクラスオブジェクトを感じています。コンパイルが失敗しました。プロジェクトは「クリーン」でおそらく修正されたと思います。
Dakusan 2016年

ほぼ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内の任意の行にブレークポイントがある場合、エラーでクラッシュします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についても報告されています。

編集:

もう1つの解決策はInstant Runを無効にすることですが、以下の@ toobsco42クレジットを提供してください。


28
これはcode.google.comで報告されており、修正に取り組んでいます。code.google.com/p/android/issues/detail?id=227513
Dakusan

4
私はsdk 23とビルドツール25.0.1を持っています-同じ問題。ブレークポイントを削除すると、これが修正されます。
Bonton255 2016

2
ブレークポイントを削除して[デバッグ]を押し、アプリが正常に実行されたら、目的の場所に追加し直すこともできます。正常に機能するので、再起動する前に必ず削除してください。
コメットフィッシュ2017年

3
エミュレータを切り替えて問題は解消しました-元のエミュレータに切り替えて問題が戻ってきました。(すべてのブレークポイントをクリアする以外に)問題を解決する唯一の方法が表示されたら、インスタントランを無効にすることです。問題のあるエミュレータでInstant Runを再度有効にすると、問題が再び発生します。
アンディ

11
問題は、7.1.1の他のスレッドのブレークポイントとインスタント実行が混在していることです。したがって、上記の3つのいずれかを変更すると、クラッシュが停止します。
Warpzit 2017

187

私の場合、インスタントランを無効にする必要がありました。Instant Runにはあらゆる種類の副作用があるようで、これもその1つです。


47
Android Studioでは、[File]-> [Settings]-> [Build、Execution、Deployment]-> [Instant Run]にあります。
shortstuffsushi 2017

それも私の場合でした!ありがとう:D
francisco_ssb 2017

9
それは私が二度と見ることのない私の人生の1時間でした
Gary Bak

3
複数のマシンで作業していて、Googleは常にインスタントランを再適用しているので、最終的に機能してリモートで失われた時間を取り戻せるようになると、約4216%効率が上がるようにする必要があります。
アンソニー

ありがとうございます。答えとしてチェックする必要があります;)この醜い機能はあなたに5セントを与え、100ドルを無駄にします:))
Amir Ziarati

50

問題はAndroidバージョン7.xに関連しており、ネストされた関数のすべてのブレークポイントを削除しました。これは機能し、Androidバージョン6.0でもテストされましたが、問題なく機能しています。

google開発者チームの回答によると、2016年12月1日に修正され、次のリリースで適用される予定です。


上記のコメントを参考にして、可能な限りすべてを試しました!どうもありがとう!
ステパンマクシモフ2017年

うまくいきました、これは受け入れられるべき答えです。よろしくお願いします!また、あなたは別の解決策として、インスタント実行]を削除することができます
OZER Ozcan氏

これをサポートするためにリンクが添付されていると便利です;)「Google開発者チームの回答によると、それは2016年12月1日に修正され、次のリリースで適用されます。」
jabu.hlong 2018

おそらく電子メールの返答でしたが、今日でもこのバグが発生していて、ブレークポイントを削除する必要がありました
Jim Factor

Android 7.1.1は、Pixelbookで実行されているAndroidのバージョンです。PixelbookのAndroid Studioで常に開発しています。
ジェフロックハート、

21

すべてのブレークポイントを削除しましたが、機能し、エミュレーターPixel API 25でテストされました。

すべてのブレークポイントを削除するには:

  • デバッガオプションに移動します。

  • デバッグを停止するには、下にある赤いアイコンをクリックしてください。

  • そこで、すべてのブレークポイントを削除できるウィンドウが表示されます。

この投稿で詳細をご覧くださいhttps : //stackoverflow.com/a/42478994/5749462


16

これは、デバッグポイントに問題があるためです。すべてのデバッグポイントを削除すると、機能するはずです。


3
ショートカットCTRL + SHIFT + F8を使用すると、すべてのブレークポイントのマークを簡単に解除できます。
brunoramonalmeida

このショートカットは、OSとキーボードの設定によっては、常に機能するとは限りません
flame3

8

本当に奇妙なことに、私はインスタントランを無効にしましたが、問題は自動的に解決しました。


はい、Android 7.0より前のデバイスでインスタントランを実行すると、この問題が非常に簡単に発生する可能性があります
egorikem

4

私の問題は、インポートステートメントにブレークポイントがあったことでした


3回目と同じようにこれに遭遇しました...基本的に、ブレークポイントは時々これを引き起こす可能性があります。したがって、解決策はすべて/最近のブレークポイントを削除することです
egorikem

3

ここに画像の説明を入力してください

ウィンドウ5:デバッグで、[ブレークポイントの表示]ボタンを使用します

ここに画像の説明を入力してください

UnSelectAll of them

ここに画像の説明を入力してください


1

最も簡単な解決策は、回避策なしで魅力的に機能する別のデバイスまたはエミュレーター見つけることです(AVD Managerのおかげで選択できます)。


1

また、アプリがデバッグモードのときにのみクラッシュしました。3.5バージョンについて-「即時実行」が「変更を適用」に置き換えられたため、無効にできませんでした。私の解決策は、アプリを通常どおり(緑の矢印で)起動し、クラッシュした場所の直後に移動してから、デバッガーをアプリに接続することでした。
ここに画像の説明を入力してください


0

Runable.run()からブレークポイントを削除すると、問題が解決しました。Runable.run()内で実行時にブレークポイントを使用することができました。しかし、コンパイル時ではありません


0

これと同じ問題に遭遇しましたが、私のブレークポイントはネストされた関数の最初の行だったので、他の場所に移動するにはどうすればよいですか?

一時的なプライベートメソッドを作成し、そのメソッドを関数の最初の呼び出しにしてから、そのメソッドにブレークポイントを設定しました。

デバッグが終了したら、メソッドとその呼び出しを削除しました。


0

それは長いショットですが、私にとって、使用されていないインポートステートメントがあり、そのインポートにネットワークコールを実行するコードがある場合、クラッシュしましたが、削除すると、コードは正常にデバッグできました。


0

デバッガーで開始した場合にのみクラッシュを開始します。Android Studio 2.3.2を再起動しました...クラッシュし続けました。実行モードで正常に実行されます。onCreateの直後にLog.d()を挿入すると、問題が解決しました。ゴーゴー!


0

アプリケーションのすべてのデバッグポイントを削除しますctrl + shift + f6を使用してすべてのデバッグポイントを削除できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.