3

私のアプリケーションにandroid-support-v4.jar/libsしかありません。他のライブラリは使用しません。

アプリケーションが SIGNAL 11 エラーでクラッシュします。android-ndk のaddr2lineユーティリティを使いたいです。このツールを使用して Java ファイルの関数と行番号を見つけることはできますか? どんな助けでもここでとても役に立ちます

私のアプリケーションはwritingBluetooth Socket であり、その合間に を閉じています がソケットの後に呼び出されるsocketため、エラーが発生しています しかし、クラッシュの正確な行または機能を見つけることができませんどこで間違っているかを確認するにはどうすればよいですかwrite()close()

Logcat トレース:

D/CrashAnrDetector(831): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000008
D/CrashAnrDetector(831):     r0 00000000  r1 00000002  r2 00000008  r3 7a0efef0
D/CrashAnrDetector(831):     r4 6d6a4800  r5 00000000  r6 4025df88  r7 00000000
D/CrashAnrDetector(831):     r8 7b1d6b10  r9 791d3cc4  sl 79265220  fp 7b1d6b24
D/CrashAnrDetector(831):     ip 401f004c  sp 7b1d6ac8  lr 4172f41f  pc 4172f426  cpsr 600f0030
D/CrashAnrDetector(831):     d0  0000000000000000  d1  0000000000000000
D/CrashAnrDetector(831):     d2  0000000000000000  d3  0000000000000000
D/CrashAnrDetector(831):     d4  0100000000000000  d5  0000001000020000
D/CrashAnrDetector(831):     d6  3e4ccccd01fe1000  d7  400000004bfb9b10
D/CrashAnrDetector(831):     d8  0000000000000000  d9  0000000000000000
D/CrashAnrDetector(831):     d10 0000000000000000  d11 0000000000000000
D/CrashAnrDetector(831):     d12 0000000000000000  d13 0000000000000000
D/CrashAnrDetector(831):     d14 0000000000000000  d15 0000000000000000
D/CrashAnrDetector(831):     d16 0064006e00650073  d17 002e0067006e0069
D/CrashAnrDetector(831):     d18 006f006900730072  d19 00310027003d006e
D/CrashAnrDetector(831):     d20 002000270030002e  d21 006f0063006e0065
D/CrashAnrDetector(831):     d22 0067006e00690064  d23 007400750027003d
D/CrashAnrDetector(831):     d24 0031003200320031  d25 0036003500340033
D/CrashAnrDetector(831):     d26 0000000000000000  d27 0000000000000000
D/CrashAnrDetector(831):     d28 001e001d001c001b  d29 0020001f001d001e
D/CrashAnrDetector(831):     d30 0036003600360036  d31 0000000000000000
D/CrashAnrDetector(831):     scr 80000013
D/CrashAnrDetector(831): backtrace:
D/CrashAnrDetector(831):     #00  pc 0004f426  /system/lib/libdvm.so
D/CrashAnrDetector(831):     #01  pc 00001dad  /system/lib/libnativehelper.so (jniGetFDFromFileDescriptor+80)
D/CrashAnrDetector(831):     #02  pc 00075d11  /system/lib/libandroid_runtime.so
D/CrashAnrDetector(831):     #03  pc 00020e4c  /system/lib/libdvm.so (dvmPlatformInvoke+112)
D/CrashAnrDetector(831):     #04  pc 00051aef  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
D/CrashAnrDetector(831):     #05  pc 00000214  /dev/ashmem/dalvik-jit-code-cache (deleted)
4

1 に答える 1

1

Java プログラミング言語で記述されたコードのスタック トレースを Dalvik VM のネイティブ スタック トレースから取得することはできません。これは、Dalvik がネイティブ スタックとマネージド スタックに異なるメモリを使用するという単純な理由によるものです。(Art は共有スタックを使用するため、Art クラッシュから取得することは可能だと思いますが、確実なことは言えません。)

フォルト アドレスはヌル ポインターの逆参照を示唆し、呼び出しスルーjniGetFDFromFileDescriptor()はファイル アクティビティを示します。このメソッドのソース コードは、こちらで確認できます。GetIntFieldあなたの疑いと一致する null オブジェクトを呼び出していると思います。

CheckJNIを有効にすると役立つ場合があります。JNI チェッカーが問題を発見した場合、通常、VM を強制終了する前に、現在のスレッドのスタック トレースをログ ファイルにダンプします。

于 2015-05-07T15:59:05.613 に答える