bugfix> android > 投稿

コードに直接リンクされていないクラッシュが発生し、ネイティブクラッシュであることがわかりました。バックトレースはこんな感じ

Abort message: '[FATAL:jni_android.cc(259)] Please include Java exception stack in crash report
    '
        r0 00000000  r1 00003c12  r2 00000006  r3 00000008
        r4 7cb80978  r5 00000006  r6 7cb80920  r7 0000010c
        r8 7cb7ffad  r9 7cb7ffac  sl 7cb80408  fp 7cb80404
        ip 0000000b  sp 7cb7ff38  lr b3eab4b7  pc b3eadd20  cpsr 600f0010
A/DEBUG: backtrace:
        #00 pc 0004ad20  /system/lib/libc.so (tgkill+12)
        #01 pc 000484b3  /system/lib/libc.so (pthread_kill+34)
        #02 pc 0001dd89  /system/lib/libc.so (raise+10)
        #03 pc 00019511  /system/lib/libc.so (__libc_android_abort+34)
        #04 pc 00017150  /system/lib/libc.so (abort+4)
        #05 pc 0079a29b  /data/app/com.android.chrome-1/base.apk (offset 0xfa5000)

私はこれをどのように活用して問題を見つけるのに役立つのでしょうか?私はこれが広すぎて、コード内の問題を見つけるのが難しいことを知っています。だから、誰かがこのログを利用するための指示や指示を与えることができるのだろうかと思っていますか?より多くの情報を提供するために、クラッシュ時に複数のWebビューがありますが、メモリフラグメンテーションエラーの可能性はありますか?もしそうなら、私は何をすべきですか?ウェブビューを再作成しますか? この前に何かがあるようです

System.err: java.lang.IllegalStateException: get field slot from row 25 col 46 failed
        at net.sqlcipher.CursorWindow.getLong_native(Native Method)
05-29 15:38:24.016 22757-23608/com.boxer.email W/System.err:     at net.sqlcipher.CursorWindow.getLong(CursorWindow.java:450)
        at net.sqlcipher.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:110)
        at net.sqlcipher.AbstractCursor.moveToPosition(AbstractCursor.java:201)
        at net.sqlcipher.AbstractCursor.moveToNext(AbstractCursor.java:230)
05-29 15:38:24.017 22757-23608/com.boxer.email W/System.err:     at android.database.CursorWrapper.moveToNext(CursorWrapper.java:202)
        at android.database.CursorWrapper.moveToNext(CursorWrapper.java:202)
        at android.database.CursorWrapper.moveToNext(CursorWrapper.java:202)
        at android.database.CursorWrapper.moveToNext(CursorWrapper.java:202)

回答 2 件
  • onDestroy() でwebviewを破壊しようとする   これは、WebViewクライアントまたはChromiumクライアントが、アクティビティまたはフラグメントが破壊された後でもデータをロードしているためです。

    これを試して :

    @Override
    protected void onDestroy() {
        if (myWbView != null)
            myWbView.destroy();
        super.onDestroy();
    }
    
    

    または

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        webView=null; // remove webView, prevent chromium to crash
    }
    
    

  • シンボル付きのファイルがある場合は、ndk-stackの使用を検討してください サンプル使用法: adb logcat | 〜/ Library/Android/android-ndk-r17/ndk-stack -sym/armeabi-v7a /

    これにより、クラッシュのある機能が表示されます。

    公式リンク:https://developer.android.com/ndk/guides/ndk-stack

あなたの答え