Android Fatal signal 11(SIGSEGV)at 0x636f7d89(code = 1)。どのように追跡できますか?


221

私はSIGSEGV、Androidアプリでを取得する理由を追跡することに関する他の投稿を読んでいます。Canvasの使用に関連するNullPointersを探すためにアプリを精査する予定ですが、SIGSEGV毎回異なるメモリアドレスを調べます。プラス私が見てきたcode=1code=2。メモリアドレスがだった場合0x00000000、私はそれがNullPointerであるという手掛かりを得るでしょう。

私が手に入れた最後のものはcode=2

A/libc(4969): Fatal signal 11 (SIGSEGV) at 0x42a637d9 (code=2)

これを追跡する方法に関する提案はありますか?

私には容疑者がいますが、まだ実験に熱心ではありません。私のアプリは、オフラインマッピングにOSMDroid APIを使用しています。OverlayItemクラスは、マップ上のマーカー/ノードを表します。ネットワークを介してデータを収集し、OverlayItemに入力するサービスがあります。これは、マップに表示されます。デザインを簡略化するために、OverlayItemを自分のNodeOverlayItemクラスに拡張しました。これには、UIアクティビティとサービスで使用する追加の属性がいくつか含まれています。これにより、UIとサービスのアイテム情報が一元化されました。インテントを使用してアクティビティにブロードキャストし、何かが変更されたときにUIマップを更新しました。アクティビティはサービスにバインドし、NodeOverlayItemのリストを取得するためのServiceメソッドがあります。OSMDroid APIのOverlayItemの使用かもしれません。と私のサービスは同時にノード情報を更新します。(同時実行の問題)

これを書いていると、それが本当に問題だと思います。頭痛の種は、NodeOverlayItemからNodeとOverlayItemを分けているのではなく、Serviceが保持するのは、アクティビティがノードからのデータを必要とするということです。さらに、アクティビティが作成されるとき(onResumeなど)、OverlayItemオブジェクトは、アクティビティが存在しないときにサービスが維持していたノードデータから再作成する必要があります。たとえば、アプリを起動すると、サービスがデータを収集し、UIがそれを表示し、ホームに戻ってアプリに戻ります。アクティビティは、最新のサービスノードデータからOverlayItemをプルして再作成する必要があります。

これは素晴らしい質問でも明確な質問でもありません。それは私のすべてのSOの質問がニッチまたはあいまいであるようです。誰かがこれらのSIGSEGVエラーを解釈する方法について提案があれば、それは大歓迎です!

更新これ は、デバッグセッション中にキャプチャされた最新のクラッシュです。私はこれらのデバイスのうち3つをテストに使用していますが、開発およびテスト中にすべてが確実にクラッシュするわけではありません。GCのログを記録できるように、少しだけ余分に追加しました。問題はおそらくメモリの枯渇に関連していないことがわかります。

03-03 02:02:38.328: I/CommService(7477): Received packet from: 192.168.1.102
03-03 02:02:38.328: I/CommService(7477): Already processed this packet. It's a re-broadcast from another node, or from myself. It's not a repeat broadcast though.
03-03 02:02:38.406: D/CommService(7477): Checking OLSRd info...
03-03 02:02:38.460: D/CommService(7477): Monitoring nodes...
03-03 02:02:38.515: D/dalvikvm(7477): GC_CONCURRENT freed 2050K, 16% free 17151K/20359K, paused 3ms+6ms
03-03 02:02:38.515: I/CommService(7477): Received packet from: 192.168.1.102
03-03 02:02:38.515: D/CommService(7477): Forwarding packet (4f68802cf10684a83ac4936ebb3c934d) along to other nodes.
03-03 02:02:38.609: I/CommService(7477): Received packet from: 192.168.1.100
03-03 02:02:38.609: D/CommService(7477): Forwarding packet (e4bc81e91ec92d06f83e03068f52ab4) along to other nodes.
03-03 02:02:38.609: D/CommService(7477): Already processed this packet: 4204a5b27745ffe5e4f8458e227044bf
03-03 02:02:38.609: A/libc(7477): Fatal signal 11 (SIGSEGV) at 0x68f52abc (code=1)
03-03 02:02:38.914: I/DEBUG(4008): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
03-03 02:02:38.914: I/DEBUG(4008): Build fingerprint: 'Lenovo/IdeaTab_A1107/A1107:4.0.4/MR1/eng.user.20120719.150703:user/release-keys'
03-03 02:02:38.914: I/DEBUG(4008): pid: 7477, tid: 7712  >>> com.test.testm <<<
03-03 02:02:38.914: I/DEBUG(4008): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 68f52abc
03-03 02:02:38.914: I/DEBUG(4008):  r0 68f52ab4  r1 412ef268  r2 4d9c3bf4  r3 412ef268
03-03 02:02:38.914: I/DEBUG(4008):  r4 001ad8f8  r5 4d9c3bf4  r6 412ef268  r7 4c479df8
03-03 02:02:38.914: I/DEBUG(4008):  r8 4d9c3c0c  r9 4c479dec  10 46cf260a  fp 4d9c3c24
03-03 02:02:38.914: I/DEBUG(4008):  ip 40262a04  sp 4d9c3bc8  lr 402d01dd  pc 402d0182  cpsr 00000030
03-03 02:02:38.914: I/DEBUG(4008):  d0  00000001000c0102  d1  3a22364574614c7d
03-03 02:02:38.914: I/DEBUG(4008):  d2  403fc0000000007d  d3  363737343433350a
03-03 02:02:38.914: I/DEBUG(4008):  d4  49544341223a2273  d5  6f6567222c224556
03-03 02:02:38.914: I/DEBUG(4008):  d6  3a223645676e6f4c  d7  000000013835372d
03-03 02:02:38.914: I/DEBUG(4008):  d8  0000000000000000  d9  4040000000000000
03-03 02:02:38.914: I/DEBUG(4008):  d10 0000000000000000  d11 4040000000000000
03-03 02:02:38.914: I/DEBUG(4008):  d12 4040000000000000  d13 0000000000000021
03-03 02:02:38.914: I/DEBUG(4008):  d14 0000000000000000  d15 0000000000000000
03-03 02:02:38.914: I/DEBUG(4008):  d16 3fe62e42fefa39ef  d17 3ff0000000000000
03-03 02:02:38.914: I/DEBUG(4008):  d18 3fe62e42fee00000  d19 0000000000000000
03-03 02:02:38.914: I/DEBUG(4008):  d20 0000000000000000  d21 3ff0000000000000
03-03 02:02:38.914: I/DEBUG(4008):  d22 4028000000000000  d23 3ff0000000000000
03-03 02:02:38.914: I/DEBUG(4008):  d24 0000000000000000  d25 3ff0000000000000
03-03 02:02:38.914: I/DEBUG(4008):  d26 0000000000000000  d27 c028000000000000
03-03 02:02:38.914: I/DEBUG(4008):  d28 0000000000000000  d29 3ff0000000000000
03-03 02:02:38.914: I/DEBUG(4008):  d30 3ff0000000000000  d31 3fecccccb5c28f6e
03-03 02:02:38.914: I/DEBUG(4008):  scr 60000013
03-03 02:02:39.046: I/DEBUG(4008):          #00  pc 0006b182  /system/lib/libcrypto.so (EVP_DigestFinal_ex)
03-03 02:02:39.046: I/DEBUG(4008):          #01  pc 0006b1d8  /system/lib/libcrypto.so (EVP_DigestFinal)
03-03 02:02:39.054: I/DEBUG(4008):          #02  pc 0001f814  /system/lib/libnativehelper.so
03-03 02:02:39.054: I/DEBUG(4008):          #03  pc 0001ec30  /system/lib/libdvm.so (dvmPlatformInvoke)
03-03 02:02:39.054: I/DEBUG(4008):          #04  pc 00058c70  /system/lib/libdvm.so (_Z16dvmCallJNIMethodPKjP6JValuePK6MethodP6Thread)
03-03 02:02:39.054: I/DEBUG(4008): code around pc:
03-03 02:02:39.054: I/DEBUG(4008): 402d0160 0003151e 4604b570 f7ff460d 4620ff81  ....p..F.F.... F
03-03 02:02:39.054: I/DEBUG(4008): 402d0170 f7ff4629 bd70ff93 4604b570 460e6800  )F....p.p..F.h.F
03-03 02:02:39.054: I/DEBUG(4008): 402d0180 68834615 dd062b40 21fa4810 44784a10  .F.h@+...H.!.JxD
03-03 02:02:39.054: I/DEBUG(4008): 402d0190 f7c8447a 6821f80f 698a4620 47904631  zD....!h F.i1F.G
03-03 02:02:39.054: I/DEBUG(4008): 402d01a0 b1154606 68836820 6822602b b12b6a13  .F.. h.h+`"h.j+.
03-03 02:02:39.054: I/DEBUG(4008): code around lr:
03-03 02:02:39.054: I/DEBUG(4008): 402d01bc 68e06821 21006c4a ea0af7c4 bd704630  !h.hJl.!....0Fp.
03-03 02:02:39.054: I/DEBUG(4008): 402d01cc 00031492 000314b5 4604b570 ffcef7ff  ........p..F....
03-03 02:02:39.054: I/DEBUG(4008): 402d01dc 46204605 ff12f7ff bd704628 4604b573  .F F....(Fp.s..F
03-03 02:02:39.054: I/DEBUG(4008): 402d01ec 2102460d fb36f002 42ab6823 b123d020  .F.!..6.#h.B .#.
03-03 02:02:39.054: I/DEBUG(4008): 402d01fc b1136c5b f7c868e0 68a0fccf 05c26025  [l...h.....h%`..
03-03 02:02:39.054: I/DEBUG(4008): memory map around addr 68f52abc:
03-03 02:02:39.054: I/DEBUG(4008): 4d8c5000-4d9c4000 
03-03 02:02:39.054: I/DEBUG(4008): (no map for address)
03-03 02:02:39.054: I/DEBUG(4008): b0001000-b0009000 /system/bin/linker
03-03 02:02:39.054: I/DEBUG(4008): stack:
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3b88  408d1f90  /system/lib/libdvm.so
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3b8c  412ef258  /dev/ashmem/dalvik-heap (deleted)
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3b90  00000001  
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3b94  408d6c58  /system/lib/libdvm.so
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3b98  408d6fa8  /system/lib/libdvm.so
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3b9c  4c479dec  
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3ba0  46cf260a  /system/framework/core.odex
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3ba4  408735e7  /system/lib/libdvm.so
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3ba8  412ef258  /dev/ashmem/dalvik-heap (deleted)
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3bac  002bf070  [heap]
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3bb0  412ef258  /dev/ashmem/dalvik-heap (deleted)
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3bb4  00000000  
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3bb8  412ef268  /dev/ashmem/dalvik-heap (deleted)
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3bbc  00000000  
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3bc0  df0027ad  
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3bc4  00000000  
03-03 02:02:39.054: I/DEBUG(4008): #00 4d9c3bc8  001ad8f8  [heap]
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3bcc  002ae0b8  [heap]
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3bd0  00000004  
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3bd4  402d01dd  /system/lib/libcrypto.so
03-03 02:02:39.054: I/DEBUG(4008): #01 4d9c3bd8  001ad8f8  [heap]
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3bdc  002ae0b8  [heap]
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3be0  00000004  
03-03 02:02:39.054: I/DEBUG(4008):     4d9c3be4  4024e817  /system/lib/libnativehelper.so
03-03 02:02:39.406: D/CommService(7477): Checking OLSRd info...
03-03 02:02:39.500: D/CommService(7477): Monitoring nodes...
03-03 02:02:39.500: D/dalvikvm(7477): GC_FOR_ALLOC freed 2073K, 16% free 17118K/20359K, paused 51ms
03-03 02:02:39.632: D/dalvikvm(7477): GC_CONCURRENT freed 1998K, 16% free 17162K/20359K, paused 2ms+4ms
03-03 02:02:40.406: D/CommService(7477): Checking OLSRd info...
03-03 02:02:40.445: D/CommService(7477): Monitoring nodes...
03-03 02:02:40.562: D/dalvikvm(7477): GC_CONCURRENT freed 2045K, 16% free 17158K/20359K, paused 3ms+4ms
03-03 02:02:41.406: D/CommService(7477): Checking OLSRd info...
03-03 02:02:41.445: D/CommService(7477): Monitoring nodes...
03-03 02:02:41.531: D/dalvikvm(7477): GC_CONCURRENT freed 2045K, 16% free 17154K/20359K, paused 3ms+12ms
03-03 02:02:42.406: D/CommService(7477): Checking OLSRd info...
03-03 02:02:42.445: D/CommService(7477): Monitoring nodes...
03-03 02:02:42.507: D/dalvikvm(7477): GC_CONCURRENT freed 2068K, 16% free 17128K/20359K, paused 3ms+4ms
03-03 02:02:42.679: D/dalvikvm(7477): GC_CONCURRENT freed 2006K, 16% free 17161K/20359K, paused 2ms+12ms
03-03 02:02:43.140: I/BootReceiver(1236): Copying /data/tombstones/tombstone_05 to DropBox (SYSTEM_TOMBSTONE)
03-03 02:02:43.210: D/dalvikvm(1236): GC_FOR_ALLOC freed 912K, 17% free 10207K/12295K, paused 62ms
03-03 02:02:43.265: D/dalvikvm(1236): GC_FOR_ALLOC freed 243K, 16% free 10374K/12295K, paused 49ms
03-03 02:02:43.265: I/dalvikvm-heap(1236): Grow heap (frag case) to 10.507MB for 196628-byte allocation

クラッシュに関するログから詳細情報を追加します。
auselen 2013

私は以前にこのようなバグを修正しており、ガベージコレクターが実行された後にこれが発生することを期待しています。それはあなたが見ているものですか?
Paul Nikonowicz 2013

32
どのようにして1行からその巨大なスタックトレースに行きましたか?1行で行き詰まり、アプリがクラッシュする理由がわかりません。
Sean Beach

すべてのオブジェクトをJava.Lang.Object。私の衝突を整理しました
ピエール

11
スタックトレース全体をアドレス参照で取得するには、アプリプロセスによるlogcatのフィルタリングを停止するだけです。SIGSEGVエラーのすぐ下になります。
alexbchr 2017年

回答:


166

最初に、廃棄済みのスタックトレースを取得します。これは、アプリがクラッシュするたびに出力されます。このようなもの:

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'XXXXXXXXX'
pid: 1658, tid: 13086  >>> system_server <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 64696f7e
 r0 00000000  r1 00000001  r2 ad12d1e8  r3 7373654d
 r4 64696f72  r5 00000406  r6 00974130  r7 40d14008
 r8 4b857b88  r9 4685adb4  10 00974130  fp 4b857ed8
 ip 00000000  sp 4b857b50  lr afd11108  pc ad115ebc  cpsr 20000030
 d0  4040000040000000  d1  0000004200000003
 d2  4e72cd924285e370  d3  00e81fe04b1b64d8
 d4  3fbc71c7009b64d8  d5  3fe999999999999a
 d6  4010000000000000  d7  4000000000000000
 d8  4000000000000000  d9  0000000000000000
 d10 0000000000000000  d11 0000000000000000
 d12 0000000000000000  d13 0000000000000000
 d14 0000000000000000  d15 0000000000000000
 scr 80000012

         #00  pc 000108d8  /system/lib/libc.so
         #01  pc 0003724c  /system/lib/libxvi020.so
         #02  pc 0000ce02  /system/lib/libxvi020.so
         #03  pc 0000d672  /system/lib/libxvi020.so
         #04  pc 00010cce  /system/lib/libxvi020.so
         #05  pc 00004432  /system/lib/libwimax_jni.so
         #06  pc 00011e74  /system/lib/libdvm.so
         #07  pc 0004354a  /system/lib/libdvm.so
         #08  pc 00017088  /system/lib/libdvm.so
         #09  pc 0001c210  /system/lib/libdvm.so
         #10  pc 0001b0f8  /system/lib/libdvm.so
         #11  pc 00059c24  /system/lib/libdvm.so
         #12  pc 00059e3c  /system/lib/libdvm.so
         #13  pc 0004e19e  /system/lib/libdvm.so
         #14  pc 00011b94  /system/lib/libc.so
         #15  pc 0001173c  /system/lib/libc.so

code around pc:
ad115e9c 4620eddc bf00bd70 0001736e 0001734e 
ad115eac 4605b570 447c4c0a f7f44620 e006edc8 
ad115ebc 42ab68e3 68a0d103 f7f42122 6864edd2 
ad115ecc d1f52c00 44784803 edbef7f4 bf00bd70 
ad115edc 00017332 00017312 2100b51f 46682210 

code around lr:
afd110e8 e2166903 1a000018 e5945000 e1a02004 
afd110f8 e2055a02 e1a00005 e3851001 ebffed92 
afd11108 e3500000 13856002 1a000001 ea000009 
afd11118 ebfffe50 e1a01004 e1a00006 ebffed92 
afd11128 e1a01005 e1550000 e1a02006 e3a03000 

stack:
    4b857b10  40e43be8  
    4b857b14  00857280  
    4b857b18  00000000  
    4b857b1c  034e8968  
    4b857b20  ad118ce9  /system/lib/libnativehelper.so
    4b857b24  00000002  
    4b857b28  00000406

次に、addr2lineユーティリティ(NDKツールチェーンで検索)を使用して、クラッシュする関数を見つけます。このサンプルでは、

addr2line -e -f libc.so 0001173c

そして、どこで問題が発生したかがわかります。もちろん、これはlibcに含まれているため、役に立ちません。

したがって、のユーティリティを組み合わせarm-eabi-objdumpて最終的なターゲットを見つけることができます。

私を信じて、それは難しい仕事です。




更新のみ。私はかなり長い間、ソースツリー全体からAndroidネイティブビルドを行っていたと思います。今日まで、私はNDKドキュメントを注意深く読んでいました。NDK-r6のリリース以来、と呼ばれるユーティリティを提供していますndk-stack

以下は、NDK-r9タールボールを使用した公式のNDKドキュメントの内容です。

概要:

ndk-stack 「adb logcat」の出力に表示されるスタックトレースをフィルタリングし、共有ライブラリ内のアドレスを対応する:値に置き換えることができるシンプルなツールです。

一言で言えば、それは次のようなものを翻訳します:

  I/DEBUG   (   31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
  I/DEBUG   (   31): Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys'
  I/DEBUG   (   31): pid: 351, tid: 351  %gt;%gt;%gt; /data/local/ndk-tests/crasher <<<
  I/DEBUG   (   31): signal 11 (SIGSEGV), fault addr 0d9f00d8
  I/DEBUG   (   31):  r0 0000af88  r1 0000a008  r2 baadf00d  r3 0d9f00d8
  I/DEBUG   (   31):  r4 00000004  r5 0000a008  r6 0000af88  r7 00013c44
  I/DEBUG   (   31):  r8 00000000  r9 00000000  10 00000000  fp 00000000
  I/DEBUG   (   31):  ip 0000959c  sp be956cc8  lr 00008403  pc 0000841e  cpsr 60000030
  I/DEBUG   (   31):          #00  pc 0000841e  /data/local/ndk-tests/crasher
  I/DEBUG   (   31):          #01  pc 000083fe  /data/local/ndk-tests/crasher
  I/DEBUG   (   31):          #02  pc 000083f6  /data/local/ndk-tests/crasher
  I/DEBUG   (   31):          #03  pc 000191ac  /system/lib/libc.so
  I/DEBUG   (   31):          #04  pc 000083ea  /data/local/ndk-tests/crasher
  I/DEBUG   (   31):          #05  pc 00008458  /data/local/ndk-tests/crasher
  I/DEBUG   (   31):          #06  pc 0000d362  /system/lib/libc.so
  I/DEBUG   (   31):

より読みやすい出力に:

  ********** Crash dump: **********
  Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys'
  pid: 351, tid: 351  >>> /data/local/ndk-tests/crasher <<<
  signal 11 (SIGSEGV), fault addr 0d9f00d8
  Stack frame #00  pc 0000841e  /data/local/ndk-tests/crasher : Routine zoo in /tmp/foo/crasher/jni/zoo.c:13
  Stack frame #01  pc 000083fe  /data/local/ndk-tests/crasher : Routine bar in /tmp/foo/crasher/jni/bar.c:5
  Stack frame #02  pc 000083f6  /data/local/ndk-tests/crasher : Routine my_comparison in /tmp/foo/crasher/jni/foo.c:9
  Stack frame #03  pc 000191ac  /system/lib/libc.so
  Stack frame #04  pc 000083ea  /data/local/ndk-tests/crasher : Routine foo in /tmp/foo/crasher/jni/foo.c:14
  Stack frame #05  pc 00008458  /data/local/ndk-tests/crasher : Routine main in /tmp/foo/crasher/jni/main.c:19
  Stack frame #06  pc 0000d362  /system/lib/libc.so

使用法:

これを行うには、最初にアプリケーションの共有ライブラリのシンボリックバージョンを含むディレクトリが必要です。NDKビルドシステム(つまりndk-build)を使用する場合、これらは常に$ PROJECT_PATH / obj / local /の下にあります。ここで、デバイスのABI(つまりarmeabiデフォルト)を表します。

logcatプログラムへの直接入力としてテキストをフィードできます。例:

adb logcat | $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi

または、-dumpオプションを使用して、logcatを入力ファイルとして指定できます。例:

adb logcat > /tmp/foo.txt
$NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi -dump foo.txt

重要:

このツールは、logcat出力の開始を含む最初の行を探します。つまり、次のようになります。

 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

トレースをコピー/貼り付けるときは、トレースからこの行を忘れないでください。そうしないと、ndk-stack正しく機能しません。

TODO:

の将来のバージョンでndk-stackadb logcat、ライブラリパスが自動的に起動して選択されます。現時点では、これらの手順を手動で実行する必要があります。

現時点でndk-stackは、デバッグ情報を持たないライブラリは処理しません。特定のPCアドレスへの最も近い関数エントリポイントを検出しようとすることが役立つ場合があります(たとえば、上記のlibc.soの例のように)。


7
すみません、ロビン。私は答えに感謝します。クラッシュダンプを投稿した場合は、それについて別の質問で具体的に説明しましたが、状況に応じて回答できたかもしれません。ただし、クラッシュを追跡してネイティブライブラリソースに戻すタスクに対処しようとしたのはあなただけだったので、(私の貴重な担当者の)100の報奨金を与えることにしました。
ガーリックマン、2013

1
こんにちはロビン。詳細で有益な回答をありがとうございました。ネイティブライブラリ内の情報を印刷することは可能でしょうか。私のネイティブライブラリには、を使用して印刷した多くのデバッグ情報がありprintfます。printfネイティブライブラリからの出力を確認できますか?
Saad Saadi、2015年

#include <android / Log.h> #define LOGD(...) android_log_print(ANDROID_LOG_DEBUG、 "YOURTAG"、__ VA_ARGS
Robin

ndk-stackコマンドを使用して、デバッグの日を節約できました。どうして前に見つけられなかったのか本当にわかりません...
Traian

さて、クラッシュダンプを出力しましたが、それでも出力を理解できません。
ヒラル

48

OK!実際にコメントや回答を送ってくださって本当に申し訳ありませんが、問題を発見しました。これが個人のSIGSEGVを追跡しようとする他の多くの人に役立つとは思わないが、私のもの(そしてそれは非常に困難だった)はこれに完全に関連していた。

https://code.google.com/p/android/issues/detail?id=8709

ダンプ内のlibcrypto.soは一種の手がかりになりました。すでにパケットを見たことがあるかどうかを判断しようとしたときにパケットデータのMD5ハッシュを行い、あった場合はそれをスキップしました。ある時点で、これはそれらのハッシュの追跡に関連する醜いスレッドの問題であると思いましたが、それはjava.security.MessageDigestクラスであることがわかりました!スレッドセーフではありません!

デバイスのUUIDとタイムスタンプに基づいて、すべてのパケットに詰めていたUIDと入れ替えました。それ以来問題はありません。

私の状況にあった人々に私が与えることができる教訓は、100%Javaアプリケーションである場合でも、手掛かりのためにクラッシュダンプに記載されているネイティブライブラリとシンボルに注意を払うことだと思います。SIGSEGV + lib .so名のグーグルは、役に立たないcode = 1などよりもはるかに遠くに行きます。次に、何をしていても、Javaアプリがネイティブコードにアクセスできる場所を考えます。Canvasがnullの何かを描画していたサービス+ UIスレッドの問題(SIGSEGVでGoogleがGoogleで最も一般的なケース)であると想定して誤って、私が書いたコードに完全に関連している可能性を無視しましたクラッシュダンプのlib .soに関連しています。当然のことながら、java.securityはlibcrypto.soのネイティブコンポーネントを使用して速度を上げるので、一度手がかりをつけたら、Android + SIGSEGV + libcryptoをGoogleで検索しました。そのため、文書化された問題を見つけました。幸運を!


1
同様の問題が発生しましたが、まだMessageDigestがあり、スレッドセーフではありません。素晴らしい例外の代わりに、醜いクラッシュが発生します!
Bamaco

私は、Opensslを使用したRSA復号化で同様のことをしました。新しいスレッドで操作を移動すると、問題が解決しました。
peceps

41

オブジェクトをgson変換文字列として共有設定に保存すると、このエラーが発生しました。gson文字列は問題があったため、オブジェクトの取得と逆シリアル化は実際には正しく機能していませんでした。これは、オブジェクトへのその後のアクセスがすべてこのエラーになったことを意味します。怖い:)


6
ありがとう、これで私の命が救われました:)))gsonが変換しようとしたオブジェクトに有効なコンストラクタがない場合、これが表示されます(私はandroid.Locationクラスでそれを試みていたため、このエラーが発生しました)
rosu alin

5
@rosualinあらまあ!これはまさに私の問題かもしれません(ここで私の髪を引っ張って)。android.LocationオブジェクトをSharedPreferencesに格納していますWakefulBroadcastReceiver。ほとんどの場合は機能しますが、恐ろしいSIGSEGVクラッシュが発生することもあります。解決方法を教えてください。
camelCaseCoder、2015年

3
まあ私はandroid.LocationまたはGeofenceを共有設定に保存しようとしていましたが、コンストラクターがないため、それが発生します。そこで、必要なデータを使用してカスタムクラスを作成し、それを保存しました。それが役に立てば幸い。
rosu alin 2015

3
@rosualin効きました!!!!!!!!!!! あなたは命の恩人です!!! 私は過去4日間、この愚かなバグに夢中になりました。どうもありがとうございます!!!!
camelCaseCoder 2015年

1
助けてくれてうれしい:D
rosu alin

30

このエラーも何度も発生し、解決しました。このエラーは、ネイティブ側でのメモリ管理の場合に発生します。

アプリケーションがアドレス空間外のメモリにアクセスしています。これはおそらく無効なポインタアクセスです。SIGSEGV =ネイティブコードのセグメンテーションエラー。Javaコードでは発生しないため、詳細を含むスタックトレースは表示されません。ただし、アプリケーションプロセスがクラッシュした後で少し見回すと、logcatにスタックトレース情報が表示される場合があります。ファイル内の行番号はわかりませんが、コールチェーンで使用されていたオブジェクトファイルとアドレスはわかります。そこから、コードのどの領域に問題があるかをよく理解できます。ターゲットプロセスへのgdbネイティブ接続をセットアップして、デバッガでキャッチすることもできます。


私の場合、それはjava.security.MessageDigestの基礎となるコンポーネントがスレッドセーフではなく、2つのスレッドからアクセスしていたことでした。(ハッシュを作成して保存し、ハッシュを作成して比較)
garlicman

java.security、MessageDigestまたはスレッドが原因で、この致命的な例外が発生しません。メモリが破損している正確な場所ではない可能性があります。たとえば、ヒープを破損した場合、後で任意の数の操作が影響を受け、NDK領域外になる可能性があります。関数が終了するまでわかりません。
Vivek Bansal 2013

コードがネイティブ側の10行目で中断した場合、コードが正常に実行され、コードのいくつかの行を実行した後、Javaパーツでこのエラーがスローされます。それが起こります。「Javaは、メモリの外に移動すると例外をスローします」。はい、幸いですが、明確にするために、C / C ++でメモリをオーバーステップしてJavaに移行した場合、標準のJava例外をスローせずにアプリがクラッシュする可能性があります。これが致命的な破滅が発生する理由です。
Vivek Bansal 2013

データ配列を使用したネイティブ側のエラーを見つけてください。ほとんどの場合、これはデータ配列で発生し、誤って境界またはデータ制限を超えた場合に発生します。
Vivek Bansal 2013

24

今日、私はFatal signal 11 (SIGSEGV), code 1, fault addr 0x8 in tid 18161問題に直面し、これを解決するために半日苦労しています。

キャッシュをクリアして.gradleファイルなどをすべて削除してみました。

最後にdisable Instant Run、私は今、この問題を再度受けることはありません。これで、インスタントランも有効にした後、アプリケーションが機能します。インスタントランの問題である可能性があります。インスタントランを無効にしてから有効にしてみてください

この答えから:

Android Studio設定または環境設定(MACの場合)->ビルド、実行、展開->インスタント実行に移動します。

次に、上部にある[インスタントランを有効にする]チェックボックスをオフにします。


1
私はあなたの解決策が見つかるまで、その存在しないバグを見つけるために半日かけて過ごしました。どうもありがとうございました!
カナット

1
androidxにアップグレードした後、同じ問題が発生しました。すぐに逃げなければならない。
-JamesD

チェックオフ、ただし信号11(SIGSEGV)、コード2(SEGV_ACCERR)
Chego

こんにちは私はアンドロイドスタジオ3.5.1を使用していますが、ほぼ1日で修正しようとしましたが、それでも同じ問題が発生します。Googleマップが断片化されており、アプリをインストールしたときに初めて機能します。アプリを開くと、以下の致命的な信号11(SIGSEGV)、コード1、fid addr 0xff3a200c in tid 15323(FinalizerDaemon)
Navin

Android Studio 3.5以降の場合は、[変更を適用]オプションを使用する必要があります。このオプションを有効または無効にしてみてください。それは私のために働いた。
アーナルメタ

12

マニフェストでAndroidハードウェアアクセラレーションを無効にしてみてください。

android:hardwareAccelerated="false"

2
それは機能しますが、まったく良い解決策ではありません!! すべてのアニメーションとグラフィックを停止します
Mohsen

私は同じ問題を抱えていますが、私の側からは機能しませんでした。Googleマップをフラグメントで使用しました。アプリケーションを開くと、Fatalシグナル11(SIGSEGV)、コード1、tid 16591(FinalizerDaemon)の障害addr 0x3f000000がクラッシュしました。ほぼ1日ですが、このための適切な解決策が見つかりませんでした。数回しか機能しないため、エラーが発生します
Navin

11

外で「キャンバス」にアクセスしようとしたときにこのエラーが発生しました onDraw()

    private Canvas canvas;

    @Override
    protected void onDraw(Canvas canvas) {
        this.canvas = canvas;
        ....... }

    private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
        @Override
        public boolean onScale(ScaleGestureDetector detector) { 
            canvas.save(); // here

非常に悪い習慣:/


5

次のようなビットマップを使用すると、このエラーが発生しました。

bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.myBitMap);

私の問題を解決したのは、ビットマップのサイズを小さくすることでした(> 1000px high to 700px)。


代わりに使用してくださいBitmapOptions.inSampleSize
FindOut_Quran

4

私は、Android 4.4.4(Nexuses、三星電子)にSIGSEGVに直面したのだが、致命的なエラーが解析中にあったことが判明しnull String使用してDecimalFormat

 static DecimalFormat decimalFormat = new DecimalFormat("###,###.###");
 void someMethod(String value) {
...
    Number number = decimalFormat.parse(value);//value is null, SIGSEGV will happen`
...
}

Android> 21では、try / catchで正常に処理されました


3

からandroid.supportに移行した後、私はこの問題に少し前に直面しましたandroidx

問題はでしたrenderscript

解決策:build.gradleこれらの2行から削除しました:

renderscriptTargetApi 21
renderscriptSupportModeEnabled true

未解決の参照のために、プロジェクトのビルドが失敗した後:

import androidx.renderscript.Allocation;
import androidx.renderscript.Element;
import androidx.renderscript.RenderScript;
import androidx.renderscript.ScriptIntrinsicBlur;

だから私はそれらを次のように変更しました:

import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.ScriptIntrinsicBlur;

その後、すべての問題はなくなりました。


2

vitamioライブラリを使用していて、この致命的なエラーが発生した場合。

次に、プロジェクトグラドルでtargetSdkVersionが23未満であることを確認します。

ありがとう。


あなたのソリューションは機能しますが、PlayストアがtargetSdkversionを8月1日から26日以上に設定することを必須にしたため、これは大きな問題になる可能性があります。
Shishir Shetty

2

私の場合(私はXamarinフォームを使用しています)、このエラーはバインディングエラーが原因でスローされました-例:

<Label Grid.Column="4" Grid.Row="1" VerticalTextAlignment="Start" HorizontalTextAlignment="Center"  VerticalOptions="Start" HorizontalOptions="Start" FontSize="10" TextColor="Pink" Text="{Binding }"></Label>

基本的に、誤ってビューモデルプロパティを削除しました。Xamarin開発者が同じ問題を抱えている場合は、バインディングを確認してください...


2

プロジェクトにネイティブCコードを追加した場合、この回答が役に立ちます。

私はいくつかのネイティブCコードをandroidプロジェクトに追加しました。

今、私はネイティブ文字列を返すコードにアクセスしようとしましたが、文字列を処理する前に、デフォルト値をnullptrに設定しました。Javaコードでその値を取得すると、この問題が発生しました。

私たちのネイティブCコードはjavaディレクトリから出ているので、問題を引き起こしているコードの正確な行の手がかりがありません。だから私はあなたがあなたの.cppファイルをチェックしてそこに手がかりを見つけることを試みることをお勧めします。

あなたがすぐに問題を取り除くことを願っています。:)


1

私の場合、問題はAndroidプロファイラーが原因でした。Android Studioで、「Android Profiler」と「end session」をクリックします。

皮肉なことに、それはアプリケーションで極端なパフォーマンスの問題を引き起こしていました。


1

次の2行をandroidセクションのbuild.gradleに追加します。

android{
    compileOptions {
            sourceCompatibility 1.8
            targetCompatibility 1.8
        }
}

5
このコードは質問に対する解決策を提供するかもしれませんが、それがなぜ/どのように機能するかに関してコンテキストを追加する方が良いです。これは、将来のユーザーが学習し、その知識を自分のコードに適用するのに役立ちます。また、コードが説明されている場合は、賛成票の形でユーザーから肯定的なフィードバックを受ける可能性があります。
borchvm

0

JNI /ネイティブコードを確認してください。私の参照の1つはnullでしたが、断続的でしたので、それほど明白ではありませんでした。


0

ネイティブ関数をチェックして、正しく返されるかどうかを確認します。返されない場合は、returnステートメントを追加してください。


0

私にとってその問題は、2つのアクティビティ間の不適切なキャストが原因でした。私は最近、このメソッドをActivity1から別の2に移動しました。そうすることで、リファクタリングはこの明示的なキャストを以前のままにしました。だから代わりに

((Activity1) mainActivity).hideDialog();

私はすることになっていた

((Activity2) mainActivity).hideDialog();

注:しかし、このエラーはAndroid 8.0では発生しませんでした。理由はまだわかりません。

*** それが役に立てば幸い。


0

メモリの問題により、このセグメンテーションフォールトエラーが発生しました。私の構造体の多くの変数と配列を有する、サイズ1024のこの配列を持っていました。

サイズを512に減らすと、エラーはなくなりました。

PS:これは回避策であり、解決策ではありません。構造体のサイズを見つける必要があり、動的メモリ割り当て がより良いオプションです。


私は同じ問題を抱えていますが、逆に動作します。アレイに最大492個のデータを保存しています。サイズを512のように設定すると、segfaultエラーが表示されてアプリが閉じます。サイズを1024のように大きくすると、表示されません。これがどのように機能するのか理解できません。
w'ight

0

onDraw()関数内でViewTreeObserverを使用したときにこのエラーが発生しました。

@Override
protected void onDraw(Canvas canvas) {
    // super.onDraw(canvas);
    ViewTreeObserver vto = mTextView.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            // some animation        
        }
    });
 }

onDrawからViewTreeObserverを削除して解決しました
muzamil

0

私のアプリ(FancyShowCaseView)に追加されたパッケージでこの問題が発生し、プリロリポップでこの問題が発生しました。そのパッケージはkotlinで書かれ、私のメインコードはjavaで書かれました。だから今私はpre-lolipopでバージョンをチェックしていて、そのクラスを実行させないようにしています。一時的に問題が解決しました。私のような同様の問題がある場合はこれをチェックしてください


0

ビルドフィンガープリント: 'motorola / harpia / harpia:6.0.1 / MPIS24.241-2.50-16 / 16:user / release-keys'リビジョン: 'p1b0' ABI: 'arm' pid:18139、tid:25935、name: GLThread 2137 >>> com.portable3d.okt.a3dmap1 <<<シグナル11(SIGSEGV)、コード2(SEGV_ACCERR)、フォールトアドレス0x7452f000

12台中2台の電話からエラーが返され、問題はonDrawFrame()にあり、一部のオブジェクトはnullでした。理由はわかりません。設定しただけです。

if(gears==null) return;


0

AndroidのPDF APIを使用してPDFを作成しているときに問題が発生し、PDFページを閉じた後に誤ってcanvas.save()およびcanvas.restore()を使用しました。

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