2013-02-11 5 views
8

Komentarze na temat wielu pytań StackOverflow wskazują, że adres faultd00d wskazuje celowe przerwanie VM.Android JNI: root-cause deadd00d (dvmAbort)

I DEBUG : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadd00d 

I rzeczywiście, gdy uruchomiony dzienniki poprzez NDK stosu, widzę, że w górnej części ramki stosu dekoduje do:

Stack frame #00 pc 00050b0e /system/lib/libdvm.so (dvmAbort) 

Następnie komentarze powiedzieć patrzeć wcześniej w dziennikach dla problem. Czego dokładnie szukam - czy istnieje konkretny tag lub ciąg do wyszukania? (dalvikvm być może?) Przeszukałem wiele stron kłód, nie znajdując niczego istotnego - czy to normalne, czy powinno być tuż przed błędem?

Najczęściej zdarza się, że deadd00d znajduje się wewnątrz określonego połączenia z GetObjectClass(). Próbowałem wywoływać env-> ExceptionCheck bezpośrednio przed tą linią, ale nie zgłaszał żadnych wcześniejszych błędów.

Ja również próbował włączeniu CheckJNI z

adb shell setprop debug.checkjni 1 

za instrukcjami here i here, ale kiedy zabijanie i ponownego uruchomienia aplikacji, nie widzę oczekiwaną wiadomość

D Late-enabling CheckJNI 

ale raczej

D AndroidRuntime: CheckJNI is OFF 

Korzystanie adb shell getprop oznacza, że ​​nieruchomość jest włączona, więc nie jestem pewien, co się tam dzieje.

Odpowiedz

0

jeśli jest rodzimy awarii, można znaleźć „ślad” będzie to punkt, w którym natywne metody kod katastrofy, niż należy przeanalizować metody,