0x636f7d89'da Android Ölümcül sinyali 11 (SIGSEGV) (kod = 1). Nasıl takip edilebilir?


221

SIGSEGVBir Android uygulamasına sahip olmanın nedenlerini izleme hakkındaki diğer yayınları okudum . Tuval kullanımı ile ilgili olası NullPointers için uygulamamı temizlemeyi planlıyorum, ancak SIGSEGVbarflerim her seferinde farklı bir bellek adresi oluşturuyor. Artı gördüm code=1ve code=2. Bellek adresi 0x00000000olsaydı, bir NullPointer olduğuna dair bir ipucu olurdu.

Son aldığım şey code=2:

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

Bunu nasıl izleyeceğinize dair herhangi bir öneriniz var mı?

Bir şüphelim var, ama henüz denemeye hevesli değilim. Uygulamam çevrimdışı eşleme için OSMDroid API'sini kullanıyor. OverlayItem sınıfı, haritadaki işaretçileri / düğümleri temsil eder. Harita üzerinde görüntülenen OverlayItem doldurmak için ağ üzerinden veri toplayan bir hizmetim var. Tasarımımı basitleştirmek için OverlayItem'i UI Etkinliğinde ve Hizmette kullandığım bazı ek öznitelikleri içeren kendi NodeOverlayItem sınıfım içine genişlettim. Bu bana UI ve Hizmet için tek bir Öğe bilgisi verdi. Bir şey değiştiğinde UI haritasını yenilemek için Etkinliğe yayın yapmak amacıyla Amaçlar'ı kullandım. Etkinlik Hizmete bağlanır ve NodeOverlayItem öğelerinin listesini almak için bir Hizmet yöntemi vardır. Ben OSMDroid API OverlayItem kullanımı olabilir düşünüyorum, Hizmetimin düğüm bilgilerini aynı anda güncelleme. (eşzamanlılık sorunu)

Bunu yazarken sorun olduğunu düşünüyorum. Baş ağrısı, Düğüm ve OverlayItem'i NodeOverlayItem'den ayırmaz, Etkinliğin Hizmet'in sahip olduğu Düğümden bazı verilere ihtiyacı olacaktır. Ayrıca, Etkinlik oluşturulduğunda (onResume, vb.) OverlayItem nesnelerinin, Hizmet uzaktayken Hizmetin sürdürdüğü Düğüm verilerinden yeniden oluşturulması gerekir. Örneğin, uygulamayı başlatırsınız, Hizmet veri toplar, kullanıcı arayüzü görüntüler, Ana Sayfaya gider, ardından uygulamaya geri dönerseniz, Etkinliğin OverlayItem'i en son Hizmet düğümü verilerinden alması ve yeniden oluşturması gerekir.

Bunun harika veya açık bir soru olmadığını biliyorum. Tüm SO sorularım niş ya da belirsiz. Herhangi birinin bu SIGSEGVhataları nasıl yorumlayacağına dair bir önerisi varsa , çok takdir edilecektir!

GÜNCELLEME İşte bir hata ayıklama oturumu sırasında yakalanan en son kilitlenme. Test için kullanılan bu cihazlardan 3 tane var ve geliştirip test ettiğimde hepsi güvenilir bir şekilde çökmüyor. GC günlüğü not edilebilir böylece biraz ekstra dahil. Sorunun muhtemelen bellek tükenmesi ile ilgili olmadığını görebilirsiniz.

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

Günlükten kilitlenme hakkında daha fazla bilgi ekleyin.
auselen

Daha önce böyle bir hatayı düzelttim ve çöp toplayıcı çalıştırıldıktan sonra bunun olmasını beklerdim. Gördüğün bu mu?
Paul Nikonowicz

32
Bir satırdan o dev yığın izine nasıl geçtiniz? Tek bir çizgide takılı kaldım ve uygulamamın neden çöktüğünü anlayamıyorum.
Sean Beach

ile tüm nesnelerimı genişletti Java.Lang.Object. Benim crashings dizildi
Pierre

11
Adres referanslarıyla tüm yığın izlemesini almak için, logcat'i uygulama işleminize göre filtrelemeyi durdurmanız yeterlidir. SIGSEGV hatasının hemen altında olacaktır.
alexbchr

Yanıtlar:


167

İlk olarak, mezar taşı yığını izini alın, uygulamanız her kilitlendiğinde yazdırılacaktır. Bunun gibi bir şey:

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

Ardından, addr2linekilitlenen işlevi bulmak için yardımcı programı kullanın (NDK araç zincirinizde bulun). Bu örnekte,

addr2line -e -f libc.so 0001173c

Ve sorunun nerede olduğunu göreceksin. Tabii ki bu libc içinde olduğu için size yardımcı olmaz.

Böylece arm-eabi-objdump, nihai hedefi bulmak için araçlarını birleştirebilirsiniz .

İnan bana, bu zor bir iş.




Sadece bir güncelleme için. Bence uzun zamandır tüm kaynak ağacından Android yerel yapısını yapıyordum, bugüne kadar NDK belgelerini dikkatlice okudum. NDK-r6'nın yayınlanmasından bu yana, adlı bir yardımcı program sağlamıştır ndk-stack.

Aşağıda, NDK-r9 tar topu ile resmi NDK belgelerinin içeriği yer almaktadır.

Genel bakış:

ndk-stack yığın izlerini 'adb logcat' çıktısında göründükleri gibi filtrelemenizi ve paylaşılan kitaplık içindeki herhangi bir adresi karşılık gelen: değerleriyle değiştirmenizi sağlayan basit bir araçtır.

Özetle, şöyle bir şeyi çevirecektir:

  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):

Daha okunabilir çıktıya:

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

Kullanımı:

Bunu yapmak için, önce uygulamanızın paylaşılan kitaplıklarının sembolik sürümlerini içeren bir dizine ihtiyacınız olacaktır. NDK derleme sistemini (yani ndk-build) kullanırsanız, bunlar her zaman $ PROJECT_PATH / obj / local / altında bulunur; burada cihazınızın ABI'sini gösterir ( armeabivarsayılan olarak).

logcatMetni programa doğrudan girdi olarak besleyebilirsiniz , örneğin:

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

Veya logcat dosyasını bir giriş dosyası olarak belirtmek için -dump seçeneğini kullanabilirsiniz, örneğin:

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

ÖNEMLİ:

Araç, logcatçıktıda başlangıçlar içeren ilk satırı arar, yani şuna benzer:

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

İzleri kopyalarken / yapıştırırken, bu satırı izlerden unutma veya ndk-stackdüzgün çalışmaz.

YAPMAK:

Gelecekteki bir sürümü otomatik olarak kitaplık yolunu ndk-stackbaşlatmaya adb logcatve seçmeye çalışacaktır . Şimdilik bu adımları manuel olarak yapmanız gerekecek.

Şu an itibariyle, ndk-stackiçinde hata ayıklama bilgisi olmayan kütüphaneler kullanılmıyor. Belirli bir PC adresine en yakın fonksiyon giriş noktasını tespit etmeye çalışmak yararlı olabilir (örn. Yukarıdaki libc.so örneğinde olduğu gibi).


7
Üzgünüm Robin. Cevabı takdir ediyorum. Özellikle bu konuda başka bir Soruda yaptığım çökme dökümü yayınlamış olsaydım, bağlam içinde cevap vermiş olabilirsiniz. Ancak, kazayı yerel kütüphane kaynağına geri izleme görevini ele almaya çalışan her yerde tek olduğunuz gibi size 100 lütuf (benim değerli temsilcimin!) Vermeye karar verdim.
garlicman

1
Merhaba Robin. ayrıntılı ve bilgilendirici bir cevap için çok teşekkürler. Merak ediyordum, yerel kütüphanelerin içindeki bilgileri yazdırmak mümkün mü? Yerel kütüphanelerim, kullanarak yazdırdığım birçok hata ayıklama bilgisine sahip printf. Bunun çıktısını printfyerel kütüphanelerden görebilir miyim ?
Saad Saadi

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

ndk-stack komutuyla günlerce hata ayıklamadan kurtardın! Daha önce nasıl bulamadığımı gerçekten anlamıyorum ...
Traian

tamam Ben çarpışma dökümü yazdırdım ama yine de çıktı anlamıyorum.
Hilal

48

TAMAM! Gerçekten yorum ve cevap gönderenler için gerçekten üzgünüm, ama sorunu buldum. Bunun başkalarının kişisel SIGSEGV'lerini izlemeye çalışmasına yardımcı olacağını sanmıyorum, ancak benimki (ve çok zordu) tamamen bununla ilgiliydi:

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

Benim dökümü türünde libcrypto.so bana ipucu verdi. Paketi görüp görmediğimi belirlemeye çalıştığımda MD5 karma veri veriyorum ve eğer varsa onu atlıyorum. Bir noktada bunun bu karmaları izleme ile ilgili çirkin bir iş parçacığı sorunu olduğunu düşündüm, ama java.security.MessageDigest sınıfı olduğu ortaya çıktı! İplik güvenli değil!

Ben cihaz UUID ve bir zaman damgası dayalı her paket doldurma bir UID ile takas. O zamandan beri sorun yok.

Durumumda olanlara verebileceğim dersin% 100 Java uygulaması olsanız bile, ipuçları için çökme dökümünde belirtilen yerel kütüphaneye ve sembole dikkat edin. SIGSEGV + lib .so adı için googling, işe yaramaz kod = 1 vb.'den çok daha uzağa gidecektir ... Ardından, yaptığınız hiçbir şey olmasa bile Java uygulamanızın yerel koda dokunabileceği yeri düşünün. Tuvalin boş bir şey çizdiği bir Servis + UI iş parçacığı sorunu olduğunu varsaymakla hata yaptım (en yaygın durum SIGSEGV'de Googled) ve tamamen yazdığım kodla ilgili olabileceği olasılığını göz ardı etti ile ilgili lib .so çökme dökümü. Doğal olarak java.security, libcrypto.so dosyasında hız için yerel bir bileşen kullanır, bu yüzden ipucu verdikten sonra Android + SIGSEGV + libcrypto için Googled. ve belgelenmiş sorunu buldu. İyi şanslar!


1
Hala MessageDigest ile benzer bir sorun var, tamam, iplik güvenli değil. Güzel bir istisna yerine, çirkin bir çarpışma yaşarız!
Bamaco

Openssl kullanarak RSA şifre çözme ile benzer bir şey vardı. İşlemi yeni bir iş parçacığında taşımak sorunu çözdü.
peceps

41

Bir nesneyi gson dönüştürülmüş dize olarak paylaşılan tercihlere kaydederek bu hatayı alıyordum. Gson String iyi değildi, bu yüzden nesneyi almak ve serisini kaldırmak aslında doğru şekilde çalışmıyordu. Bu, nesneye sonradan erişimin bu hatayla sonuçlandığı anlamına gelir. Korkunç :)


6
Teşekkürler, bu sadece hayatımı kurtardı :))) Eğer gson dönüştürmeye çalışan nesnenin geçerli bir yapıcı yoksa (android.Location sınıfı ile bu hatayı vererek) bu
alırsınız

5
@rosualin Aman tanrım! Bu benim sorunum olabilir (saçımı buraya çekerek). Ben de depolamak.Bu android.Locationnesne SharedPreferencesbir yer WakefulBroadcastReceiver. Çoğu zaman işe yarıyor ama bazen korkunç SIGSEGVkazayı alıyorum . Lütfen nasıl çözdüğünüzü paylaşır mısınız?
camelCaseCoder

3
Paylaşılan tercihlerde android.Location veya Geofence'ı kurtarmaya çalışıyordum ve bir yapıcıya sahip olmama, buna neden olur. Böylece, ihtiyacım olan verilerle özel bir sınıf yaptım ve bunu kaydettim. Umarım yardımcı olur.
rosu alin

3
@rosualin Çalıştı !!!!!!!!!!! Sen bir hayat kurtarıcısın!!! Son 4 gün boyunca bu aptal böcek için deliriyordum. Çok teşekkür ederim!!!!
camelCaseCoder

1
Sevindim yardım edebilirim: D
rosu alin

30

Ayrıca bu hatayı birçok kez aldım ve çözdüm. Yerel tarafta bellek yönetimi durumunda bu hata ile karşılaşılacaktır.

Uygulamanız belleğe adres alanının dışında erişiyor. Bu büyük olasılıkla geçersiz bir işaretçi erişimi. SIGSEGV = yerel kodda segmentasyon hatası. Java kodunda yer almadığı için ayrıntılarla yığın izini görmezsiniz. Ancak, uygulama işlemi çöktükten sonra biraz etrafına bakarsanız, logcat'te bazı yığın izleme bilgilerini görebilirsiniz. Size dosya içindeki satır numarasını söylemez, ancak çağrı zincirinde hangi nesne dosyalarının ve adreslerin kullanıldığını söyler. Oradan genellikle kodun hangi alanının sorunlu olduğunu anlayabilirsiniz. Ayrıca, hedef işleme bir gdb yerel bağlantısı kurabilir ve hata ayıklayıcıda yakalayabilirsiniz.


Benim durumumda java.security.MessageDigest temel bileşeni parçacığı güvenli değildi ve ben 2 iş parçacığından erişiyordu oldu. (karma ve mağaza oluşturun, sonra karma oluşturun ve karşılaştırın)
garlicman

Java.security, MessageDigest veya herhangi bir iş parçacığı nedeniyle bu önemli özel durumu alamıyorsunuz. Belleğin bozulduğu yer tam olarak olmayabilir. Örneğin, yığını bozarsanız, daha sonra herhangi bir sayıda işlem gerçekleştirilebilir ve NDK alanının dışında olabilir. Fonksiyonun sonuna kadar bilemezsiniz.
Vivek Bansal

Kodunuzun yerel tarafta 10. satırda kırılması durumunda, bundan sonra bile kodunuzun iyi çalıştığını ve bazı kod satırlarını yürüttükten sonra, bu hatayı java bölümüne atacağını varsayalım. Olur. Msgstr "Belleğin dışına çıktığınızda Java istisnalar atacak". Evet, neyse ki, sadece açıklığa kavuşturmak için, C / C ++ 'da hafızayı aşar ve Java'ya geçerse, uygulama standart bir Java istisnası atmadan çökebilir. Bu yüzden ölümcül ecxeption ortaya çıkacaktır.
Vivek Bansal

Herhangi bir veri dizisi kullandığınız yerel tarafta hata bulmaya çalışın. Çoğu durumda, veri dizilerinde, yanlışlıkla sınırlarını veya veri sınırını aştığınızda ortaya çıkar.
Vivek Bansal

24

Bugün Fatal signal 11 (SIGSEGV), code 1, fault addr 0x8 in tid 18161sorunla karşılaştım ve yarım gün bunu çözmek için mücadele ediyorum.

Önbelleği temizleyip .gradle dosyasını ve hepsini silerek birçok şeyi denedim.

Sonunda ben disable Instant Runve şimdi tekrar bu sorunu alamıyorum. Şimdi uygulamam da anında çalıştırmayı etkinleştirdikten sonra çalışıyor. Anında çalıştırma sorunu olabilir, Anında çalıştırmayı devre dışı bırakmayı ve etkinleştirmeyi deneyin

Gönderen bu cevap:

Android Studio Ayarları veya Tercihleri'ne (MAC için) -> Derleme, Yürütme, Dağıtım -> Anında Çalıştırma'ya gidin.

Ardından, üstteki "Anında Çalışmayı Etkinleştir" onay kutusunun işaretini kaldırın.


1
Çözümünüzü bulana kadar varolmayan hatayı bulmaya yarım gün harcadım. Çok teşekkür ederim dostum!
Kanat

1
Androidx'e yükselttikten sonra benim için aynı sorun. Anında kaçmak zorundayım.
JamesD

check
out

Merhaba ben android studio 3.5.1 kullanıyorum ve bunu düzeltmek için neredeyse bir gün denemiştim ama yine de aynı sorunu var, ben parça halinde bir google haritası var ve ben her zaman i uygulamayı aç bana aşağıda bir Ölümcül sinyal 11 (SIGSEGV), kod 1, tid 15323'teki hata adresi 0xff3a200c (FinalizerDaemon)
Navin

Android Studio 3.5 ve üzeri sürümlerde "Değişiklikleri Uygula" seçeneğini kullanmanız gerekir. Bu seçeneği etkinleştirmeyi ve devre dışı bırakmayı deneyin. Benim için çalıştı.
Aanal Mehta

12

Manifestinizde Android donanım hızlandırmasını devre dışı bırakmayı deneyin.

android:hardwareAccelerated="false"

2
çalışıyor ama hiç iyi bir çözüm değil !! tüm animasyonları ve grafik şeyleri durdurur
Mohsen

ben aynı sorunu var ama benim yanımdan işe yaramadı, ben parça halinde google harita kullanılır ve ben uygulama açık çöktü Ölümcül sinyal 11 (SIGSEGV), kod 1, hata addr 0x3f000000 tid 16591 (FinalizerDaemon) denedim neredeyse bir gün, ama bunun için doğru çözümü bulamadık, sadece birkaç kez çalışıyor sonra bir hata veriyor
Navin

11

Dışında 'tuval'e erişmeye çalıştığımda bu hatayla karşılaştım 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

Çok kötü bir uygulama: /


5

Böyle bir bitmap kullanırken bu hatayı alıyordum:

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

Benim için sorunu çözen şey, bitmap'in boyutunu azaltmaktı (> 1000 pikselden 700 piksele).


sadece bunun yerine kullanınBitmapOptions.inSampleSize
FindOut_Quran

4

Android 4.4.4'te (Nexuses, Samsung) SIGSEGV ile karşılaştım ve ölümcül hatanın null Stringkullanarak ayrıştırmada olduğu ortaya çıktıDecimalFormat

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

Android> 21'de try / catch ile başarıyla işlendi


3

Bu sorunla bir an önce, sonrasından taşındıktan sonra android.supportkarşılaştım androidx.

Sorun şuydu renderscript.

Çözüm: build.gradleBu iki satırdan kaldırdım :

renderscriptTargetApi 21
renderscriptSupportModeEnabled true

çözülmemiş referanslar nedeniyle bu proje oluşturma başarısız olduktan sonra:

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

bu yüzden onları şu şekilde değiştirdim:

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

Ondan sonra bütün sorunlar ortadan kalktı.


2

Vitamio kütüphanesi kullanıyorsanız ve bu ölümcül hata oluşursa.

Ardından proje sınıfınızda targetSdkVersion öğesinin 23'ten az olması gerektiğinden emin olun.

Teşekkürler.


Çözümünüz çalışıyor, ancak PlayStore'un targetSdkversion değerini> = 26 Ağu 1 ve sonrasında ayarlamak için zorunlu hale getirilmesi nedeniyle bu büyük bir sorun olabilir.
Shishir Shetty

2

Benim durumumda (Xamarin Forms kullanıyorum) bu hata bir bağlama hatası nedeniyle atıldı - örneğin:

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

Temelde yanlışlıkla görünüm modeli özelliği sildi. Xamarin geliştiricileri için, aynı sorununuz varsa, bağlantılarınızı kontrol edin ...


2

Projenize yerel bir C kodu eklediyseniz, bu yanıt size yardımcı olabilir.

Android projesine yerli C kodu ekledim.

Şimdi i yerel dize döndüren bu koda erişmeye çalışıyordu, dize işlemeden önce varsayılan değerini nullptr olarak ayarlamıştı. Şimdi java kodu değerini aldıktan sonra bu sorunla karşılaştı.

Yerli C kodumuz java dizininden çıktığı için, sorunu yaratan kod satırının hiçbir ipucu almıyor. Bu yüzden .cpp dosyanızı kontrol etmenizi ve orada herhangi bir ipucu bulmanızı öneririm.

Umarım yakında sorundan kurtulacaksın. :)


1

Benim durumumda soruna Android Profiler neden oluyordu. Android Studio'da "Android Profiler" ve "oturumu sonlandır" ı tıklayın.

İronik olarak, uygulamada aşırı performans sorunlarına da neden oluyordu.


1

Android bölümünde build.gradle'a bu iki satırı ekleyin:

android{
    compileOptions {
            sourceCompatibility 1.8
            targetCompatibility 1.8
        }
}

5
Bu kod soruya bir çözüm sunabilse de, neden / nasıl çalıştığına ilişkin bağlam eklemek daha iyidir. Bu, gelecekteki kullanıcıların bu bilgileri öğrenmelerine ve kendi kodlarına uygulamalarına yardımcı olabilir. Kod açıklandığında, kullanıcılardan upvotes şeklinde olumlu geri bildirimleriniz de olabilir.
borchvm

0

JNI / yerel kodunuzu kontrol edin. Referanslarımdan biri boştu, ama aralıklıydı, bu yüzden çok açık değildi.


0

yerel işlevlerinizi kontrol edin, düzgün dönüp dönmediğini, döndürülmezse lütfen iade ifadelerini ekleyin.


0

Benim için bu mesele iki faaliyet arasında kötü bir rol oynamasıydı. Yakın zamanda bu yöntemi Activity1'den başka 2'ye taşıdım. Bunu yaparak, refactor bu açık kadroyu daha önce olduğu gibi bıraktı. Yani yapmak yerine

((Activity1) mainActivity).hideDialog();

Yapmam gerekiyordu

((Activity2) mainActivity).hideDialog();

Not: Ama bu hata android 8.0'da olmadı Neden henüz emin değilim.

*** Umarım yardımcı olur.


0

Bellek sorunları nedeniyle bu segmentasyon hatası hatası yaşadım . Benim yapı birçok değişkenleri ve diziler sahip, boyut 1024 bu Diziyi vardı.

Boyutu 512'ye küçülterek hata giderildi.

Not: Bu bir çözüm değil, bir çözümdür. Yapı boyutunu bulmak gerekir ve dinamik bellek ayırma daha iyi bir seçenektir.


Aynı sorunu yaşıyorum ama tersine çalışıyor. Dizimde 492'ye kadar veri saklıyorum. Boyutu 512'ye ayarlarsam, segfault hatası görünür ve uygulamamı kapatır, boyutu 1024'e yükselttiğimde görünmez. Bunun nasıl çalıştığını anlamakta zorlanıyorum.
wEight

0

ViewTreeObserver onDraw()işlevi içinde kullandığımda bu hatayı aldım .

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

Ben onDraw dan ViewTreeObserver kaldırarak çözüldü
muzamil

0

Benim app (FancyShowCaseView) eklendi ve lolipop öncesi bu soruna neden olan bir paket ile bu sorunu vardı. bu paket kotlin'de, ana kodlarım java'da yazılmıştı. şimdi lolipop öncesi sürümü kontrol ediyorum ve sınıfının yürütülmesine izin vermeyin. geçici olarak sorunu çözdü. benim gibi benzer bir sorunun varsa bunu kontrol et


0

Parmak izi oluşturun: 'motorola / harpia / harpia: 6.0.1 / MPIS24.241-2.50-16 / 16: kullanıcı / sürüm tuşları' Düzeltme: 'p1b0' ABI: 'kol' pid: 18139, tid: 25935, ad: GLThread 2137 >>> com.portable3d.okt.a3dmap1 <<< sinyal 11 (SIGSEGV), kod 2 (SEGV_ACCERR), hata adresi 0x7452f000

12 telefontan 2'si bir hata döndürdü, sorunun onDrawFrame () içinde olduğunu gördü, bazı nesneler boştu, neden bilmiyorum, sadece ayarladım

if(gears==null) return;.


0

Android'in PDF API'lerini kullanarak bir PDF oluştururken sorun yaşadım ve bir pdf sayfasını kapattıktan sonra yanlışlıkla canvas.save () ve canvas.restore () kullandım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.