programing

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

cafebook 2023. 10. 25. 23:45
반응형

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

다른 게시물들을 읽어보았는데 왜 이런 일을 당했는지 그 이유를 추적해보았습니다.SIGSEGVAndroid 앱에서.캔버스 사용과 관련하여 가능한 NullPoint를 찾기 위해 앱을 탐색할 계획이지만,SIGSEGV매번 다른 메모리 주소를 바핑합니다.게다가 나는 본적이 있습니다.code=1그리고.code=2. 메모리 주소가 다음과 같다면,0x00000000, 나는 그것이 Null Pointer라는 것을 알고 있습니다.

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

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

이걸 어떻게 추적할 지 제안해 주실 수 있나요?

용의자가 있긴 한데 아직 실험은 하고 싶지 않아요.나의 앱은 OSMDroid API를 오프라인 매핑에 사용합니다.OverlayItem 클래스는 맵의 마커/노드를 나타냅니다.네트워크를 통해 데이터를 수집하여 지도에 표시되는 OverlayItem을 채우는 서비스가 있습니다.설계를 단순화하기 위해 OverlayItem을 UI Activity 및 서비스에서 사용하는 일부 추가 특성을 포함하는 NodeOverlayItem 클래스로 확장했습니다.이를 통해 UI 및 서비스에 대한 단일 항목 정보를 얻을 수 있었습니다.무언가 바뀌었을 때 UI 맵을 새로 고치기 위해 Activity로 브로드캐스트하는 Intents를 사용했습니다.Activity가 Service에 바인딩되고 NodeOverlay 목록을 가져오는 Service 메서드가 있습니다.아이템.OSDroid API가 OverlayItem을 사용하는 것과 동시에 my Service가 노드 정보를 업데이트하는 것이 아닐까 생각합니다.(동시성 문제)

제가 이 글을 쓰면서 정말 그게 문제인 것 같아요.골칫거리는 NodeOverlayItem에서 Node와 OverlayItem을 분리하는 것이 아니라, Activity가 Node로부터 데이터를 받아야 하고, 서비스가 보유하고 있다는 것입니다.또한 Activity가 생성되면(Resume 등에서), Activity가 부재중인 동안 서비스가 유지하고 있던 Node 데이터에서 OverlayItem 개체를 다시 생성해야 합니다. 예를 들어 앱을 시작하면 서비스가 데이터를 수집하고 UI가 표시한 후 Home으로 이동한 후 앱으로 다시 이동합니다.활동에서 Overlay(오버레이)를 당겨서 다시 만들어야 합니다.최신 서비스 노드 데이터에서 가져온 항목입니다.

이것이 훌륭하거나 명확한 질문이 아니라는 것을 압니다.제 SO 질문은 모두 틈새 질문이거나 모호합니다.만약 누군가 그것들을 어떻게 해석할지에 대한 제안이 있다면,SIGSEGV오류, 대단히 감사하겠습니다!

업데이트 디버그 세션 중에 포착된 가장 최근의 충돌입니다.저는 이 장치들 중 3개를 테스트에 사용하고 있는데 제가 개발하고 테스트할 때 모두 안정적으로 충돌하지는 않습니다.GC logging이 주목받을 수 있도록 조금 더 추가했습니다.이 문제가 메모리 소진과 관련이 없다는 것을 알 수 있습니다.

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

우선, 당신의 묘비 스택 트레이스를 가져오세요, 그것은 당신의 앱이 충돌할 때마다 인쇄될 것입니다.이와 같은 것:

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
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

하세요.addr2lineutility(NDK 툴 체인에서 해당 기능을 찾으십시오)를 사용하여 충돌이 발생하는 함수를 찾습니다.이 샘플에서, 당신은

addr2line -e -f libc.so 0001173c

어디서 문제가 발생했는지 알게 될 겁니다.물론 이것은 libc에 있기 때문에 당신에게 도움이 되지 않을 것입니다.

그래서 당신은 그들이 사용하는arm-eabi-objdump최종 목표물을 찾는 겁니다

정말 힘든 일입니다.




업데이트를 위해서입니다.전 소스 트리에서 안드로이드 네이티브 빌드를 꽤 오랫동안 하고 있었다고 생각합니다. 오늘까지 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 빌드 시스템)을 사용하는 경우.ndk-build 그런 하며, $PROJECT_PATH/obj/local/합니다를 합니다. 여기서 장치의 ABI(즉, 장치의 ABI)를 나타냅니다.armeabi기본적으로).

당신은 음식을 먹일 수 있습니다.logcat텍스트는 프로그램에 대한 직접 입력으로 사용됩니다.

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

또는 -dump 옵션을 사용하여 로그캣을 입력 파일로 지정할 수 있습니다. 예:

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 예).

문제를 발견했습니다.개인 SIGSEGV를 추적하려는 많은 사람들에게 도움이 되지 않을 것이라고 생각합니다만, 저의 (그리고 그것은 매우 어려웠습니다) 이와 전적으로 관련이 있었습니다.

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

내 쓰레기장에 있는 libcrypto.so 은 나를 좀 속였습니다.패킷을 이미 봤는지 확인하려고 할 때 패킷 데이터의 MD5 해시를 수행하고, 봤다면 건너뜁니다.저는 한때 이 문제가 해시를 추적하는 것과 관련된 추한 쓰레드 문제라고 생각했지만, 알고 보니 java.security였습니다.메시지 다이제스트 클래스!안전하지 않아요!

저는 장치 UUID와 타임스탬프를 기반으로 모든 패킷에 채워 넣던 UID와 교체했습니다.그 이후로는 문제없습니다.

제가 제 상황에 있었던 분들에게 드릴 수 있는 교훈은 100% 자바 애플리케이션이라도 크래시 덤프에 기록된 네이티브 라이브러리와 심볼에 주목하여 단서를 찾으라는 것입니다.SIGSEGV + lib.so name은 쓸모없는 코드=1 등보다 훨씬 더 멀리 갈 것입니다.다음으로 자바 앱이 네이티브 코드를 터치할 수 있는 위치에 대해 생각해 보십시오.저는 캔버스가 null인 것을 그리고 있는 서비스 + UI 쓰레드 문제라고 가정하는 실수를 저질렀습니다(SIGSEGV에서 구글링한 가장 일반적인 경우). 그리고 크래시 덤프에서 lib.so와 관련된 제가 작성한 코드와 완전히 관련이 있을 수 있다는 가능성을 무시했습니다.자연스럽게 java.security는 속도를 위해 libcrypto.so 의 네이티브 구성 요소를 사용하게 되므로, 일단 내가 접속하면 구글에서 Android + SIGSEGV + libcrypto.so 를 검색하여 문서화된 문제를 발견했습니다.

공유 환경설정에 객체를 gson 변환 문자열로 저장하여 이 오류가 발생했습니다.gson String이 좋지 않아 개체를 검색하고 역직렬화하는 작업이 제대로 수행되지 않았습니다.이는 개체에 대한 이후의 액세스로 인해 이 오류가 발생했음을 의미합니다.무섭네요 :)

저도 이 오류를 여러 번 받아서 해결했습니다.네이티브 측에서 메모리를 관리할 경우 이 오류가 발생합니다.

응용프로그램이 주소 공간 밖에서 메모리에 액세스하고 있습니다.잘못된 포인터 액세스일 가능성이 높습니다.SIGSEGV = 네이티브 코드에서 분할 오류.자바 코드에서는 발생하지 않기 때문에 자세한 정보가 있는 스택 트레이스는 볼 수 없습니다.그러나 응용 프로그램 프로세스가 충돌한 후에 주위를 둘러보면 로그캣에 일부 스택 추적 정보가 표시될 수도 있습니다.파일 내 회선 번호는 알려주지 않지만 콜 체인에서 사용 중인 개체 파일과 주소는 알려줍니다.여기서 코드의 어느 영역이 문제가 있는지를 파악할 수 있습니다.대상 프로세스에 대한 gdb 네이티브 연결을 설정하고 디버거에서 잡을 수도 있습니다.

저는 안드로이드 스튜디오 4.1에서 good ole 파일 > 캐시 무효화 & 재시작이 잘 된 것 같습니다.

그 이후로 더 이상 치명적인 신호는 없습니다.프로파일러와 관련이 있는 건 확실하지만 확실할 순 없어요AS를 다시 시작하면 내 에뮬레이터에서 충돌이 중지되었다는 것만 알고 있습니다.

오늘 나는 마주했습니다.Fatal signal 11 (SIGSEGV), code 1, fault addr 0x8 in tid 18161이 문제를 해결하기 위해 반나절을 고생하고 있습니다.

캐시를 지우고 .gradle 파일을 삭제하는 등 여러 가지 시도를 했습니다.

드디어 나disable Instant Run이제 다시는 이 문제를 받지 않겠습니다.지금은 인스턴트 실행도 활성화한 후에 제 애플리케이션이 작동하고 있습니다.인스턴트 실행 문제일 수 있습니다. 인스턴트 실행을 비활성화하고 활성화해 보십시오.

다음 답변에서:

Android Studio Settings or Preferences (MAC용) -> Build, Execution, Deployment -> Instant Run으로 이동합니다.

그런 다음 맨 위에 있는 "인스턴트 실행 사용" 확인란의 선택을 취소합니다.

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

android:hardwareAccelerated="false"

외부의 '캔버스'에 접속하려고 할 때 이 오류가 발생했습니다.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

아주 나쁜 관행 :/

다음과 같은 비트맵을 사용할 때 이 오류가 발생했습니다.

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

문제를 해결한 것은 비트맵의 크기(>1000px 높이에서 700px로)를 줄이는 것이었습니다.

안드로이드 4.4.4 (Nexus, Samsungs)에서 SIGSEGV를 접한 적이 있는데 파싱에 치명적인 오류가 있음이 밝혀졌습니다.null StringDecimalFormat

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

Android > 21에서 Try/Catch로 성공적으로 처리되었습니다.

이전에 이 문제에 직면했습니다.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;

그 후 모든 문제가 사라졌습니다.

안드로이드 스튜디오에서 "변경사항 적용 및 활동 재시작"을 시도하면 앱이 시작되지 않아 이 문제가 발생했습니다.그 이유는 이것이 파편 안에 있을 수도 있다는 것을 시도했지만, 앱을 테스트할 때 사용했던 휴대폰을 다시 시작해야 했고, 문제가 사라졌기 때문입니다.

제 경우 (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 개발자의 경우, 동일한 문제가 있으면 바인딩을 확인합니다.

저는 몇 시간 동안 이 문제를 해결하지 못했고 마침내 디버깅 중인 앱의 스토리지 세부 정보에 들어가 "데이터 지우기" 작업을 수행했습니다.그 뒤로는 잘 나갔습니다.저 같은 경우는 이상한 구글 서비스 gms 버그였습니다.

프로젝트에 네이티브 C 코드를 추가했다면 이 답변이 도움이 될 것입니다.

안드로이드 프로젝트에서 네이티브 C 코드를 추가했습니다.

기본값을 nullptr로 설정한 문자열을 처리하기 전에 네이티브 문자열을 반환하는 코드에 액세스하려고 했습니다.이제 자바 코드로 가치를 검색하자 이 문제가 발생했습니다.

우리의 네이티브 C 코드가 자바 디렉토리에서 나왔기 때문에 정확한 코드 라인에 대한 단서를 얻지 못해 문제가 발생하고 있습니다.그래서 나는 당신이 당신의 .cpp 파일을 확인하고 거기서 단서를 찾길 제안합니다.

vitamio library를 사용하는 경우 이 치명적인 오류가 발생합니다.

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

저의 경우 안드로이드 프로파일러로 인해 문제가 발생했습니다.Android Studio에서 "Android Profiler"와 "End session"을 클릭합니다.

아이러니하게도, 애플리케이션의 성능 문제도 크게 야기하고 있었습니다.

Flutter 2.8.1을 사용하여 이 문제에 직면했습니다.

많이 검색했지만 아무 도움이 되지 않았습니다(사용하던 외부 패키지 비활성화, 디버깅, 캐시 무효화, 플러터 클린, 에뮬레이터 재시작 등).

그것은 그 곳에서 한 일과 관련이 있는 것으로 밝혀졌습니다.CustomPainter나 같은 경우는 수업.단순한 직사각형을 그리는 것조차 결국 이런 식으로 추락할 수 있습니다.

베타 채널(Flutter 2.9.0-0.1.pre)로 전환하여 문제가 완전히 사라졌습니다.

ics-openvpn을 사용할 때 이 오류가 발생합니다.

A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0xdead0000 in tid 3548

아래와 같이 "abiFilters"에 "x86"을 추가하여 간단히 수정할 수 있습니다.

ndk {
   abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
}

JNI/네이티브 코드를 확인합니다.제가 언급한 내용 중 하나는 무효였지만, 간헐적이어서 그다지 명확하지는 않았습니다.

기본 기능이 제대로 반환되는지 여부를 확인하십시오. 반환되지 않을 경우 반환 명세서를 추가하십시오.

저에게 그 문제는 두 활동 사이의 좋지 않은 캐스팅 때문이었습니다.최근에 이 방법을 액티비티 1에서 다른 2로 옮겼습니다.그렇게 해서 리팩터는 이 노골적인 출연진을 그대로 남겨두었습니다.그래서 대신에

((Activity1) mainActivity).hideDialog();

제가 하기로 되어있었는데요.

((Activity2) mainActivity).hideDialog();

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

*** 도움이 되길 바랍니다.

메모리 문제로 인해 세그먼트 오류가 발생했습니다.의 구조는 많은 변수와 배열을 가지고 있으며, 크기가 1024인 배열을 가지고 있습니다.

사이즈를 512로 줄이면서 에러가 사라졌습니다.

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

내부에서 ViewTreeOver를 사용할 때 이 오류가 발생했습니다.onDraw()기능.

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

앱에 추가된 패키지(FancyShowCaseView)에서 이 문제가 발생하여 사전 막대사탕에서 이 문제가 발생했습니다.그 패키지는 코틀린으로 작성되었고 제 메인 코드는 자바로 작성되었습니다. 그래서 지금은 프리-롤리팝에서 버전을 확인하고 있고 클래스가 실행되지 않도록 하고 있습니다.일시적으로 문제를 해결했습니다.만약 당신이 나와 같은 비슷한 문제를 가지고 있다면 이것을 확인해보세요.

Android의 PDF API를 사용하여 PDF를 생성할 때 문제가 발생하여 pdf 페이지를 닫은 후 canvas.save() 및 canvas.restore()를 실수로 사용했습니다.

나의 경우 안드로이드의 PdfDocument API를 사용할 때 라인이your_pdf_doc_object.finishPage(your_page)캔버스 드로어 끝에 있어야 합니다. 그렇지 않으면 메모리 예외가 발생하거나 메모리가 누출될 수 있습니다.

Android Studio의 코드 Java에서 이 오류가 발생했습니다.

저는 이 페이지의 모든 사전답변을 포함하여 수백만 페이지를 공부했습니다.하지만 유용한 답을 찾지 못했습니다.

최종적으로 모든 잠재적 위치가 오류를 일으킬 수 있는지 확인했습니다.

수정 전 제 코드입니다.

surfaceView.draw(r1, r2, r3, r4, r5, r8);

오류가 사라진 것은 수정 후의 제 코드입니다.

synchronized (this) {
surfaceView.draw(r1, r2, r3, r4, r5, r8);

}

공유 환경설정으로 인해 이 문제가 발생했습니다. 데이터를 저장하는 두 가지 방법이 있었습니다.하나는 editor.apply()를 사용하고 다른 하나는 editor.commit()를 사용합니다.둘 다 editor.commit()로 바꿨는데 다 잘 되었습니다.방법1

    private void saveId(int id) {
    SharedPreferences preferences = getSharedPreferences("saved_id", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putInt("bId", id);
    editor.commit();
}    

방법2

private void saveUserData(String saveName, String data){
    SharedPreferences preferences = getPreferences(MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString(saveName,data);
    editor.commit();
}

Xamarin 프로젝트에서 이러한 오류가 발생하는 사람은 문제를 발생시키는 데 필요한 상호 작용을 정확히 파악하고(단추 탭 등), 관리 예외를 적용하기 위해 시도해 볼 가치가 있습니다.저의 경우 안드로이드 치명 신호 11(SIGSEGV) 오류는 원래 쉽게 고칠 수 있는 관리형 C# 예외로 인해 발생했습니다.Xamarin이 디버그 출력에 관리 예외를 보고하지 않는 이유를 이해할 수 없습니다.

언급URL : https://stackoverflow.com/questions/17840521/android-fatal-signal-11-sigsegv-at-0x636f7d89-code-1-how-can-it-be-tracked

반응형