0x636f7d89 (코드 = 1)의 Android 치명적 신호 11 (SIGSEGV) 어떻게 추적 할 수 있습니까?


221

SIGSEGVAndroid 앱을 사용하는 이유를 추적하는 다른 게시물을 읽었습니다 . Canvas 사용과 관련된 NullPointer가 가능한지 앱을 검색하려고하지만 SIGSEGV매번마다 다른 메모리 주소를 사용합니다. code=1그리고 나는 보았습니다 code=2. 메모리 주소가 0x00000000인 경우 NullPointer라는 단서가 있습니다.

내가 얻은 마지막 것은 code=2:

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

이를 추적하는 방법에 대한 제안 사항이 있습니까?

용의자가 있지만 아직 실험에 열중하지 않습니다. 내 앱은 오프라인 매핑을 위해 OSMDroid API를 사용합니다. OverlayItem 클래스는지도에서 마커 / 노드를 나타냅니다. 네트워크를 통해 데이터를 수집하여 OverlayItem을 채우고 맵에 표시하는 서비스가 있습니다. 디자인을 단순화하기 위해 OverlayItem을 자체 NodeOverlayItem 클래스로 확장했습니다. 여기에는 UI 활동 및 서비스에서 사용하는 일부 추가 속성이 포함됩니다. 이것은 UI 및 서비스에 대한 단일 지점 정보 항목을 제공했습니다. Intents를 사용하여 무언가를 변경했을 때 UI 맵을 새로 고치기 위해 Activity로 브로드 캐스트했습니다. Activity는 서비스에 바인딩되며 NodeOverlayItem의 목록을 가져 오는 Service 메소드가 있습니다. OSMDroid API에서 OverlayItem을 사용하는 것 같습니다. 그리고 내 서비스가 동시에 노드 정보를 업데이트합니다. (동시성 문제)

내가 이것을 쓸 때 나는 그것이 정말로 문제라고 생각한다. 두통은 NodeOverlayItem에서 Node와 OverlayItem을 분리하지 않습니다. Activity에는 서비스가 보유한 Node의 일부 데이터가 필요합니다. 또한 액티비티가 생성 될 때 (onResume 등) 액티비티가없는 동안 서비스가 유지 보수 한 노드 데이터에서 OverlayItem 객체를 다시 작성해야합니다. 예를 들어, 앱을 시작하고 서비스가 데이터를 수집하고 UI가이를 표시 한 다음 홈으로 이동 한 다음 앱으로 돌아 가면 활동이 최신 서비스 노드 데이터에서 OverlayItem을 가져 와서 다시 작성해야합니다.

나는 이것이 위대한 질문이 아니라는 것을 알고 있습니다. 내 모든 질문이 틈새 또는 모호한 것 같습니다. 누구든지 그러한 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

이전에 이와 같은 버그를 수정했으며 가비지 수집기가 실행 된 후에 이러한 현상이 발생할 것으로 예상합니다. 이것이 당신이보고있는 것입니까?
Paul Nikonowicz

32
한 줄에서 거대한 스택 추적으로 어떻게 이동 했습니까? 한 줄로 붙어있어 왜 내 앱이 충돌하는지 알 수 없습니다.
Sean Beach

모든 객체를로 확장했습니다 Java.Lang.Object. 내 충돌을 정리
Pierre

11
주소 참조로 전체 스택 추적을 얻으려면 앱 프로세스에서 logcat 필터링을 중지하십시오. SIGSEGV 오류 바로 아래에 있습니다.
alexbchr

답변:


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하여 최종 대상을 찾을 수 있습니다.

나를 믿어, 그것은 힘든 작업입니다.




그냥 업데이트하십시오. 오늘은 NDK 문서를주의 깊게 읽을 때까지 전체 소스 트리에서 Android 네이티브 빌드를 꽤 오랫동안 수행했다고 생각합니다. 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올바르게 작동하지 않습니다.

할 것:

향후 버전 에서는 라이브러리 경로를 자동으로 ndk-stack시작 adb logcat하고 선택 하려고합니다 . 지금은이 단계를 수동으로 수행해야합니다.

현재 ndk-stack디버그 정보가없는 라이브러리는 처리하지 않습니다. 주어진 PC 주소에 대한 가장 가까운 함수 진입 점을 감지하는 것이 유용 할 수 있습니다 (예 : 위의 libc.so 예에서와 같이).


7
미안 로빈 답변을 주셔서 감사합니다. 크래시 덤프를 게시 한 경우 (특히 다른 질문에서 수행 한 경우) 컨텍스트에서 응답 할 수 있습니다. 그러나 나는 당신이 네이티브 라이브러리 소스로 충돌을 추적하는 작업을 해결하려고 시도한 유일한 곳이기 때문에 (내 소중한 담당자의) 100 현상금을 제공하기로 결정했습니다.
garlicman

1
안녕 로빈 상세하고 유익한 답변을 주셔서 감사합니다. 네이티브 라이브러리 내에서 정보를 인쇄하는 것이 가능합니까? 내 기본 라이브러리에는 내가 사용하여 인쇄 한 많은 디버깅 정보가 printf있습니다. printf네이티브 라이브러리에서 출력 결과를 볼 수 있습니까 ?
Saad Saadi

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

그 ndk-stack 명령으로 며칠의 디버깅 시간을 절약했습니다! 나는 그것을 전에 그것을 찾지 못했던 방법을 정말로 이해하지 못한다 ...
Traian

그래도 크래시 덤프를 인쇄했지만 여전히 출력을 이해하지 못합니다.
힐랄

48

확인! 실제로 의견과 답변을 제출 한 사람들에게 정말 죄송하지만 문제를 발견했습니다. 나는 이것이 개인 SIGSEGV를 추적하려는 많은 다른 사람들을 도울 것이라고 생각하지는 않지만 내 (그리고 그것은 매우 어려웠다)는 전적으로 이것과 관련이 있었다.

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

내 덤프 종류의 libcrypto.so가 나를 붙 잡았습니다. 패킷을 이미 보았는지 확인하고 가지고 있다면 건너 뛰려고 할 때 패킷 데이터의 MD5 해시를 수행합니다. 언젠가 이것이 해시 추적과 관련된 추악한 스레딩 문제라고 생각했지만 java.security.MessageDigest 클래스였습니다. 스레드 안전하지 않습니다!

장치 UUID와 타임 스탬프를 기반으로 모든 패킷에 채워 넣은 UID로 교체했습니다. 이후 아무런 문제가 없습니다.

내 상황에있는 사람들에게 줄 수있는 교훈은 100 % Java 응용 프로그램 인 경우에도 단서에 대한 크래시 덤프에 표시된 기본 라이브러리 및 기호에주의를 기울이는 것입니다. SIGSEGV +에 대한 인터넷 검색 + lib .so 이름은 쓸모없는 코드 = 1보다 훨씬 먼 곳입니다 ... 다음은 Java 앱이 네이티브 코드를 만질 수있는 위치에 대해 생각하십시오. Canvas가 null 인 무언가 (SIGSEGV에서 Google이 가장 많이 사용한 경우)를 그리는 서비스 + UI 스레딩 문제라고 가정하고 실수로 작성한 코드와 완전히 관련되었을 가능성을 무시했습니다. 크래시 덤프의 lib .so와 관련이 있습니다. 당연히 java.security는 속도를 위해 libcrypto.so의 기본 구성 요소를 사용하므로 일단 들어가면 Android + SIGSEGV + libcrypto를 검색합니다. 문서화 된 문제를 발견했습니다. 행운을 빕니다!


1
여전히 MessageDigest와 비슷한 문제가 발생했습니다. 아직 스레드 안전하지 않습니다. 좋은 예외 대신 추악한 충돌이 발생합니다!
Bamaco

Openssl을 사용하는 RSA 암호 해독과 비슷한 것이 있습니다. 새 스레드에서 작업을 이동하면 문제가 해결되었습니다.
peceps

41

객체를 공유 환경 설정에 gson 변환 문자열로 저장 하여이 오류가 발생했습니다. gson String이 좋지 않았으므로 객체를 검색하고 역 직렬화하는 것이 실제로 올바르게 작동하지 않았습니다. 이는 객체에 대한 후속 액세스로 인해이 오류가 발생했음을 의미합니다. 무서운 :)


6
고마워, 이것은 단지 내 생명을 구했다 :))) gson이 변환하려고 시도하는 객체에 유효한 생성자가없는 경우이 오류가 발생합니다 (android.Location 클래스로 시도했지만이 오류가 발생했습니다)
rosu alin

5
@rosualin 오 세상에! 이것은 정확히 내 문제 일 수 있습니다 (여기서 머리카락을 뽑아 내십시오). 저도 저장하고 android.Location에 객체를 SharedPreferencesA의 WakefulBroadcastReceiver. 대부분의 경우 작동하지만 때로는 두려운 SIGSEGV충돌이 발생합니다. 어떻게 해결했는지 알려주시겠습니까?
camelCaseCoder

3
글쎄, 공유 환경 설정에 android.Location 또는 Geofence를 저장하려고했지만 생성자가 없으면 그 원인이됩니다. 그래서 필요한 데이터를 사용하여 사용자 정의 클래스를 작성하고 저장했습니다. 도움이 되길 바랍니다.
rosu alin

3
@rosualin 그것은 일했다 !!!!!!!!!!! 당신은 생명의 은인입니다 !!! 나는 지난 4 일 동안이 멍청한 벌레에 열중했다. 정말 고맙습니다!!!!
camelCaseCoder

1
다행 내가 도울 수 있습니다 : D
로수을 알린

30

또한이 오류가 여러 번 발생하여 해결했습니다. 이 오류는 기본 메모리 관리의 경우에 발생합니다.

애플리케이션이 주소 공간 외부의 메모리에 액세스하고 있습니다. 이것은 아마도 유효하지 않은 포인터 액세스입니다. SIGSEGV = 네이티브 코드의 세그먼테이션 오류. Java 코드에서 발생하지 않기 때문에 세부 사항이있는 스택 추적이 표시되지 않습니다. 그러나 응용 프로그램 프로세스가 중단 된 후 약간 살펴보면 여전히 로그 캣에 일부 스택 추적 정보가 표시 될 수 있습니다. 파일 내 줄 번호는 알려주지 않지만 호출 체인에서 사용중인 객체 파일과 주소는 알려줍니다. 거기에서 종종 코드의 어느 영역이 문제가 있는지 알아낼 수 있습니다. 대상 프로세스에 gdb 기본 연결을 설정하고 디버거에서이를 잡을 수도 있습니다.


필자의 경우 java.security.MessageDigest의 기본 구성 요소는 스레드로부터 안전하지 않으며 2 스레드에서 액세스하고있었습니다. (해시 및 저장을 생성 한 다음 해시를 생성 및 비교)
garlicman

java.security, MessageDigest 또는 스레드로 인해이 치명적인 예외가 발생하지 않습니다. 메모리가 손상된 정확한 위치가 아닐 수 있습니다. 예를 들어 힙을 손상 시키면 나중에 많은 수의 작업이 수행 될 수 있으며 NDK 공간 외부에있을 수도 있습니다. 함수가 끝날 때까지 알 수 없습니다.
Vivek Bansal

코드가 네이티브 측면에서 10 번째 줄에서 중단되면이 후에도 코드가 제대로 실행되고 일부 코드 줄을 실행 한 후 Java 부분 에서이 오류가 발생한다고 가정하십시오. 일어난다. "메모리 외부로 이동할 때 Java에서 예외가 발생합니다." 다행히도, C / C ++에서 메모리를 넘어서서 Java로 넘어 가면 표준 Java 예외를 발생시키지 않고 앱이 중단 될 수 있습니다. 그것이 치명적인 일탈이 발생하는 이유입니다.
Vivek Bansal

데이터 배열을 사용한 네이티브 측에서 오류를 찾으십시오. 대부분의 경우, 실수로 데이터 범위를 초과 할 때 데이터 배열에서 발생합니다.
Vivek Bansal

24

오늘 나는 Fatal signal 11 (SIGSEGV), code 1, fault addr 0x8 in tid 18161문제에 직면했고 이것을 해결하기 위해 반나절 어려움을 겪고 있습니다.

캐시를 지우고 .gradle 파일을 삭제하고 많은 것을 시도했습니다.

마침내 나는 disable Instant Run지금이 문제를 다시받지 못했습니다. 이제 즉시 실행을 활성화 한 후 응용 프로그램이 작동합니다. 즉석 실행 문제 일 수 있습니다. 즉석 실행 비활성화 및 활성화 시도

에서 대답 :

Android Studio 설정 또는 환경 설정 (MAC의 경우)-> 빌드, 실행, 배치-> 즉시 실행으로 이동하십시오.

그런 다음 상단의 "Instant Run 활성화"체크 상자를 선택 해제하십시오.


1
솔루션을 찾을 때까지 반나절 동안 기존 버그가 아닌 버그를 찾으려고 노력했습니다. 고마워요!
Kanat

1
androidx로 업그레이드 한 후에도 같은 문제가 발생합니다. 나는 즉시 도망쳐 야한다.
JamesD

확인하지만 신호 11 (SIGSEGV), 코드 2 (SEGV_ACCERR)
Chego

안녕하세요 저는 안드로이드 스튜디오 3.5.1을 사용하고 있으며 거의 ​​하루 동안 그것을 고치려고했지만 여전히 같은 문제가 있습니다 .Google 맵이 조각화되어 있으며 매번 앱을 설치했을 때만 처음으로 작동합니다. 응용 프로그램을 열어 치명적인 신호 11 (SIGSEGV), 코드 1, tid 15323 (FinalizerDaemon)의 결함 추가 기 0xff3a200c
Navin

Android Studio 3.5 이상인 경우 "변경 사항 적용"옵션을 사용해야합니다. 이 옵션을 활성화 및 비활성화하십시오. 그것은 나를 위해 일했다.
Aanal Mehta

12

매니페스트에서 Android 하드웨어 가속을 비활성화하십시오.

android:hardwareAccelerated="false"

2
그것은 작동하지만 전혀 좋은 해결책은 아닙니다! 모든 애니메이션과 그래픽을 중지
Mohsen

나는 같은 문제가 있지만 내 곁에서 작동하지 않았다 .Google 맵을 조각으로 사용했고 응용 프로그램을 열면 치명적인 신호 11 (SIGSEGV), 코드 1, 오류 추가 자 0x3f000000 tid 16591 (FinalizerDaemon)에서 추락했다. 거의 하루 만에이 문제에 대한 올바른 해결책을 찾지 못했습니다. 몇 번만 작동하면 오류가 발생합니다.
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에서 700px).


대신 사용하십시오BitmapOptions.inSampleSize
FindOut_Quran

4

Android 4.4.4 (Nexuses, Samsungs)에서 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그 두 줄을 제거했습니다 .

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 라이브러리를 사용하는 경우이 치명적인 오류가 발생합니다.

그런 다음 프로젝트 gradle에서 targetSdkVersion이 23보다 작아야합니다.

감사.


귀하의 솔루션이 작동하지만 targetSdkversion을 8 월 1 일 이후에 == 26으로 설정해야하는 Play 스토어에서 필수 문제가 될 수 있습니다.
Shishir Shetty

2

필자의 경우 (Xamarin Forms를 사용하고 있음)이 오류는 바인딩 오류로 인해 발생했습니다.

<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 코드를 추가했습니다.

이제 문자열을 처리하기 전에 기본 문자열을 nullptr로 설정 한 원시 문자열을 반환하는 코드에 액세스하려고했습니다. 이제 Java 코드에서 값을 검색하면이 문제가 발생했습니다.

네이티브 C 코드가 java 디렉토리에서 나오므로 정확한 코드 줄에 대한 단서가 없어서 문제가 발생합니다. 그래서 나는 당신이 .cpp 파일을 확인하고 거기에서 힌트를 찾도록 제안합니다.

희망은 당신이 곧 문제를 제거합니다. :)


1

제 경우에는 Android Profiler로 인해 문제가 발생했습니다. Android Studio에서 "Android Profiler"및 "end session"을 클릭하십시오.

아이러니하게도 응용 프로그램에서 심각한 성능 문제가 발생했습니다.


1

android 섹션에서 build.gradle에 다음 두 줄을 추가하십시오.

android{
    compileOptions {
            sourceCompatibility 1.8
            targetCompatibility 1.8
        }
}

5
이 코드는 질문에 대한 해결책을 제공 할 수 있지만 왜 / 어떻게 작동하는지에 대한 컨텍스트를 추가하는 것이 좋습니다. 이것은 미래의 사용자가 배우고 그 지식을 자신의 코드에 적용하는 데 도움이 될 수 있습니다. 또한 코드를 설명 할 때 사용자의 의견을 공감 형태로 긍정적 인 피드백을받을 가능성이 있습니다.
borchvm

0

JNI / 네이티브 코드를 확인하십시오. 내 참조 중 하나가 null이지만 간헐적이므로 그리 명확하지 않았습니다.


0

제대로 반환되는지 여부에 관계없이 기본 함수를 확인하십시오. 반환되지 않으면 return 문을 추가하십시오.


0

나에게 그 문제는 두 활동 사이의 나쁜 캐스트 때문이었습니다. 나는 최근 에이 방법을 Activity1에서 다른 2로 옮겼습니다. 그렇게하면 리 팩터는 이처럼 명시 적 캐스트를 남겼습니다. 대신에

((Activity1) mainActivity).hideDialog();

나는하기로되어 있었다

((Activity2) mainActivity).hideDialog();

참고 : 그러나이 오류는 안드로이드 8.0에서 발생하지 않았습니다. 아직 이유를 모르겠습니다.

*** 그것이 도움이되기를 바랍니다.


0

메모리 문제로 인해이 세분화 오류 오류가 발생했습니다 . 많은 변수와 배열을 가진 내 구조체 의 크기는 1024입니다.

크기를 512로 줄이면 오류가 사라졌습니다.

추신 : 이것은 해결책이 아니라 해결책입니다. 구조체 크기를 찾아야하며 동적 메모리 할당 이 더 나은 옵션입니다.


나는 같은 문제가 있지만 반대로 작동합니다. 어레이에 최대 492 개의 데이터를 저장하고 있습니다. 크기를 512와 같이 설정하면 segfault 오류가 나타나고 앱을 닫습니다. 크기를 1024와 같이 늘리면 표시되지 않습니다. 이것이 어떻게 작동하는지 이해하는 데 어려움을 겪고 있습니다.
무게

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로 작성되었습니다. 그래서 나는 전 lolipop에서 버전을 확인하고 있으며 클래스가 실행되지 않도록합니다. 일시적으로 문제를 해결했습니다. 나와 비슷한 문제가 있으면 이것을 확인하십시오.


0

지문 작성 : 'motorola / harpia / harpia : 6.0.1 / MPIS24.241-2.50-16 / 16 : user / release-keys'수정 : 'p1b0'ABI : 'arm'pid : 18139, tid : 25935, 이름 : 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.