สัญญาณ Android ร้ายแรง 11 (SIGSEGV) ที่ 0x636f7d89 (รหัส = 1) จะติดตามได้อย่างไร?


221

ฉันได้อ่านโพสต์อื่น ๆ เกี่ยวกับการติดตามเหตุผลในการรับSIGSEGVแอพ Android ฉันวางแผนที่จะทำให้แอพของฉันเป็นไปได้สำหรับ NullPointers ที่เกี่ยวข้องกับการใช้งาน Canvas แต่SIGSEGVbarfs ของฉันใช้ที่อยู่หน่วยความจำที่แตกต่างกันในแต่ละครั้ง พลัสผมเคยเห็นและ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 เมื่อมีบางสิ่งเปลี่ยนแปลง กิจกรรมเชื่อมโยงกับบริการและมีวิธีการบริการเพื่อรับรายการของ NodeOverlayItem ฉันคิดว่าอาจเป็น OSMDroid API ที่ใช้ OverlayItem และบริการของฉันอัปเดตข้อมูลโหนดในเวลาเดียวกัน (ปัญหาการเกิดพร้อมกัน)

ขณะที่ฉันเขียนสิ่งนี้ฉันคิดว่านั่นเป็นปัญหาจริงๆ อาการปวดหัวไม่ได้แยกออกจาก Node และ OverlayItem จาก NodeOverlayItem เพราะกิจกรรมนี้ต้องการข้อมูลบางอย่างจาก Node ที่ Service เก็บไว้ นอกจากนี้เมื่อกิจกรรมถูกสร้างขึ้น (onResume, ฯลฯ ... ) วัตถุ OverlayItem จะต้องถูกสร้างขึ้นใหม่จากข้อมูล Node ที่บริการได้รับการบำรุงรักษาในขณะที่กิจกรรมไม่อยู่ เช่นคุณเริ่มแอพบริการรวบรวมข้อมูล UI แสดงคุณไปที่หน้าแรกจากนั้นกลับไปที่แอพกิจกรรมจะต้องดึงและสร้าง OverlayItem ใหม่จากข้อมูลโหนดบริการล่าสุด

ฉันรู้ว่านี่ไม่ใช่คำถามที่ดีหรือชัดเจน มันเหมือนกับคำถาม SO ทั้งหมดของฉันคือซอกหรือคลุมเครือ หากใครมีข้อเสนอแนะเกี่ยวกับวิธีการตีความSIGSEGVข้อผิดพลาดเหล่านั้นก็จะได้รับการชื่นชมอย่างมาก!

UPDATE นี่คือความผิดพลาดล่าสุดที่ถูกจับในระหว่างการดีบั๊ก ฉันมีอุปกรณ์เหล่านี้ 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จบลงด้วยการขยายวัตถุฉันทั้งหมดที่มี แยกออกจากความผิดพลาดของฉัน
ปิแอร์

11
ในการรับการติดตามสแต็กทั้งหมดด้วยการอ้างอิงที่อยู่เพียงหยุดกรอง logcat โดยกระบวนการแอปของคุณ มันจะอยู่ด้านล่างข้อผิดพลาด SIGSEGV
alexbchr

คำตอบ:


167

ขั้นแรกรับการติดตามกองหินหลุมฝังศพของคุณมันจะถูกพิมพ์ทุกครั้งที่แอปของคุณล่ม บางสิ่งเช่นนี้

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
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 อย่างเป็นทางการพร้อมด้วยลูก NDK-r9

ข้อมูลทั่วไป:

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

ตกลงฉันได้พิมพ์การถ่ายโอนข้อมูลความผิดพลาด แต่ก็ยังไม่เข้าใจผลลัพธ์
Hilal

48

ตกลง! ฉันขอโทษผู้ที่ส่งความเห็นและคำตอบจริง ๆ แต่ฉันพบปัญหา ฉันไม่คิดว่านี่จะช่วยให้คนอื่นจำนวนมากพยายามติดตาม SIGSEGV ส่วนตัวของพวกเขา แต่ของฉัน (และมันยากมาก) เกี่ยวข้องกับสิ่งนี้ทั้งหมด:

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

libcrypto.so ในประเภทการถ่ายโอนข้อมูลของฉัน clued ฉันมาฉันทำ MD5 แฮชของข้อมูลแพ็คเก็ตเมื่อพยายามที่จะตรวจสอบว่าฉันได้เห็นแพ็คเก็ตแล้วและข้ามมันถ้าฉันมี ฉันคิดว่า ณ จุดนี้เป็นปัญหาเธรดน่าเกลียดที่เกี่ยวข้องกับการติดตามแฮชเหล่านั้น แต่ปรากฏว่าเป็นคลาส java.security.MessageDigest! มันไม่ปลอดภัยเลย!

ฉันสลับมันด้วย UID ที่ฉันบรรจุในทุก ๆ แพ็กเก็ตที่อิงจาก UUID ของอุปกรณ์และการประทับเวลา ไม่มีปัญหาตั้งแต่

ฉันเดาบทเรียนที่ฉันสามารถบอกได้ว่าอยู่ในสถานการณ์ของฉันคือแม้ว่าคุณจะเป็นแอปพลิเคชัน Java 100% ให้ความสนใจกับห้องสมุดท้องถิ่นและสัญลักษณ์ที่ระบุไว้ในการถ่ายโอนข้อมูลผิดพลาดสำหรับเบาะแส Googling สำหรับ SIGSEGV + ชื่อ lib .so จะไปไกลกว่าโค้ดที่ไม่มีประโยชน์ = 1 ฯลฯ ... ต่อไปให้ลองนึกถึงว่าแอป Java ของคุณสามารถสัมผัสรหัสพื้นเมืองได้แม้ว่าจะไม่มีสิ่งใดอยู่ ฉันทำผิดพลาดโดยสันนิษฐานว่าเป็นปัญหาเธรดของ Service + UI ซึ่ง Canvas กำลังวาดบางสิ่งที่ไม่ได้ใช้งาน (กรณีทั่วไปที่ฉันใช้ Google กับ SIGSEGV) และไม่สนใจความเป็นไปได้ว่ารหัสนั้นเกี่ยวข้องกับรหัสที่ฉันเขียนทั้งหมด เกี่ยวข้องกับ lib .so ในการถ่ายโอนข้อมูลผิดพลาด java.security โดยธรรมชาติจะใช้ส่วนประกอบดั้งเดิมใน libcrypto.so เพื่อความรวดเร็วดังนั้นเมื่อฉันพูดถึงแล้วฉัน Googled สำหรับ Android + SIGSEGV + libcrypto ดังนั้นและพบปัญหาเอกสาร โชคดี!


1
มีปัญหาที่คล้ายกันยังคงอยู่กับ MessageDigest, ok, เธรดไม่ปลอดภัยเลย แทนที่จะเป็นข้อยกเว้นที่ดีเราได้รับความผิดพลาดที่น่าเกลียด!
Bamaco

ฉันมีสิ่งที่คล้ายกันกับการถอดรหัส RSA โดยใช้ Openssl การย้ายการดำเนินการในเธรดใหม่ช่วยแก้ปัญหาได้
peceps

41

ฉันได้รับข้อผิดพลาดนี้โดยบันทึกวัตถุไปยังการตั้งค่าที่ใช้ร่วมกันเป็นสตริงที่แปลง gson สตริง gson ไม่ดีดังนั้นการดึงและยกเลิกการซีเรียลไลซ์วัตถุทำงานได้ไม่ถูกต้อง นี่หมายถึงการเข้าถึงวัตถุใด ๆ ที่ตามมาส่งผลให้เกิดข้อผิดพลาดนี้ น่ากลัว :)


6
ขอบคุณนี่เพิ่งช่วยชีวิตฉัน :))) คุณจะได้รับสิ่งนี้ถ้าวัตถุที่ gson พยายามที่จะแปลงไม่มีคอนสตรัคเตอร์ที่ถูกต้อง (ฉันลองกับ android.Location class ให้ข้อผิดพลาดนี้)
rosu alin

5
@ rosualin โอ้พระเจ้า! นี่อาจเป็นปัญหาของฉัน (ดึงผมตรงนี้ออก) ฉันกำลังเกินไปการจัดเก็บandroid.LocationวัตถุในSharedPreferences WakefulBroadcastReceiverส่วนใหญ่เวลาทำงาน แต่บางครั้งฉันได้รับSIGSEGVความผิดพลาดที่น่ากลัว คุณกรุณาแบ่งปันวิธีแก้ปัญหาให้คุณได้ไหม?
camelCaseCoder

3
ดีฉันพยายามบันทึก android ตำแหน่งหรือ Geofence ในการตั้งค่าที่ใช้ร่วมกันและไม่มีตัวสร้างก็จะทำให้ ดังนั้นฉันจึงเรียนแบบกำหนดเองพร้อมข้อมูลที่ฉันต้องการและบันทึกไว้ หวังว่ามันจะช่วย
rosu alin

3
@ rosualin มันใช้ได้ !!!!!!!!!!! คุณเป็นผู้ช่วยชีวิต !!! ฉันกำลังคลั่งไคล้บั๊กโง่นี้ตลอด 4 วันที่ผ่านมา ขอบคุณมาก!!!!
camelCaseCoder

1
ดีใจที่ฉันสามารถช่วย: D
rosu alin

30

ฉันยังได้รับข้อผิดพลาดนี้หลายครั้งและฉันแก้ไขมัน ข้อผิดพลาดนี้จะเกิดขึ้นในกรณีของการจัดการหน่วยความจำในด้านดั้งเดิม

แอปพลิเคชันของคุณกำลังเข้าถึงหน่วยความจำนอกพื้นที่ที่อยู่ นี่น่าจะเป็นการเข้าถึงตัวชี้ที่ไม่ถูกต้อง SIGSEGV = ความผิดพลาดในการแบ่งกลุ่มในรหัสเนทีฟ เนื่องจากมันไม่ได้เกิดขึ้นในโค้ด Java คุณจะไม่เห็นร่องรอยการติดตามพร้อมรายละเอียด อย่างไรก็ตามคุณยังอาจเห็นข้อมูลการติดตามสแต็กบางส่วนใน logcat ถ้าคุณมองไปรอบ ๆ หลังจากกระบวนการแอปพลิเคชันขัดข้อง มันจะไม่บอกหมายเลขบรรทัดภายในไฟล์ แต่จะบอกให้คุณทราบว่ามีการใช้ไฟล์ออบเจ็กต์และที่อยู่ใดในออบเจ็กต์การโทร จากจุดนี้คุณสามารถคิดได้ว่าส่วนใดของรหัสที่เป็นปัญหา คุณยังสามารถตั้งค่าการเชื่อมต่อเนทีฟ gdb กับกระบวนการเป้าหมายและตรวจจับได้ในตัวดีบักเกอร์


ในกรณีของฉันมันเป็นที่องค์ประกอบพื้นฐานของ java.security.MessageDigest ไม่ด้ายปลอดภัยและฉันก็เข้าถึงได้จาก 2 หัวข้อ (สร้างแฮชและจัดเก็บจากนั้นสร้างแฮชและเปรียบเทียบ)
Garicman

คุณไม่ได้รับข้อยกเว้นร้ายแรงนี้เนื่องจาก java.security, MessageDigest หรือเธรดใด ๆ อาจไม่ใช่ตำแหน่งที่แน่นอนที่หน่วยความจำเสียหาย เช่นถ้าคุณทำฮีปเสียหายจำนวนการดำเนินการใด ๆ ในภายหลังอาจได้รับผลกระทบและอาจอยู่นอกพื้นที่ NDK ได้เป็นอย่างดี คุณจะไม่รู้จนกระทั่งสิ้นสุดฟังก์ชัน
Vivek Bansal

เพียงสมมติว่ารหัสของคุณแบ่งเป็นบรรทัดที่ 10 ในด้านดั้งเดิมแล้วแม้หลังจากนี้รหัสของคุณจะทำงานได้ดี & หลังจากดำเนินการบางบรรทัดของรหัสมันจะโยนข้อผิดพลาดนี้ในส่วนของจาวา มันเกิดขึ้น. "Java จะโยนข้อยกเว้นเมื่อคุณย้ายออกจากหน่วยความจำ". ใช่โชคดี แต่เพื่อชี้แจงหากเขาเกินหน่วยความจำใน C / C ++ และย้ายไปที่ Java แอปสามารถหยุดทำงานได้โดยไม่ต้องทิ้งข้อยกเว้น Java มาตรฐาน นั่นเป็นสาเหตุที่ทำให้เกิด ecxeption ถึงตายได้
Vivek Bansal

ลองค้นหาข้อผิดพลาดในด้านพื้นเมืองที่คุณใช้อาร์เรย์ข้อมูลใด ๆ ในกรณีส่วนใหญ่สิ่งนี้จะเกิดขึ้นใน data-arrays เมื่อคุณข้ามขอบเขตหรือขีด จำกัด ข้อมูลไปโดยไม่ได้ตั้งใจ
Vivek Bansal

24

วันนี้ฉันประสบFatal signal 11 (SIGSEGV), code 1, fault addr 0x8 in tid 18161ปัญหาและฉันต้องดิ้นรนเพื่อแก้ปัญหานี้ครึ่งวัน

ฉันลองล้างแคชและลบไฟล์. dock หลายอย่างแล้ว

ในที่สุดฉันdisable Instant Runและตอนนี้ฉันไม่ได้รับปัญหานี้อีก ตอนนี้แอปพลิเคชันของฉันทำงานหลังจากเปิดใช้งานการรันทันที อาจเป็นปัญหาการรันทันทีลองปิดการใช้งานและเปิดใช้การเรียกใช้ทันที

จากคำตอบนี้ :

ไปที่การตั้งค่าหรือการตั้งค่า Android Studio (สำหรับ MAC) -> Build, Execution, Deployment -> Run ทันที

จากนั้นยกเลิกการเลือกช่องทำเครื่องหมาย "เปิดใช้งานการเรียกใช้ทันที" ที่ด้านบน


1
ฉันใช้เวลาครึ่งวันในการพยายามหาจุดบกพร่องที่ไม่มีอยู่จนกระทั่งฉันพบวิธีแก้ปัญหาของคุณ ขอบคุณมาก ๆ ชาย!
Kanat

1
ปัญหาเดียวกันสำหรับฉันหลังจากอัปเกรดเป็น androidx ฉันต้องออกไปทันที
JamesD

ตรวจสอบออก แต่สัญญาณ 11 (SIGSEGV), รหัส 2 (SEGV_ACCERR)
Chego

สวัสดีฉันใช้ android studio 3.5.1 และฉันพยายามมาเกือบวันเพื่อแก้ไขมัน แต่ฉันก็ยังมีปัญหาเดิมอยู่ฉันมีแผนที่ google ในส่วนและมันก็ทำงานได้เฉพาะครั้งแรกเมื่อฉันติดตั้งแอพหลังจากนั้นทุกครั้งที่ฉัน เปิดแอปให้ฉันด้วยสัญญาณ Fatal 11 ด้านล่าง (SIGSEGV), รหัส 1, ความผิดเพิ่ม 0xff3a200c ใน tid 15323 (FinalizerDaemon)
Navin

ในกรณีของ Android Studio 3.5 ขึ้นไปคุณต้องใช้ตัวเลือก "ใช้การเปลี่ยนแปลง" ลองเปิดใช้งานและปิดใช้งานตัวเลือกนี้ มันใช้งานได้สำหรับฉัน
Aanal Mehta

12

ลองปิดการเร่งความเร็วฮาร์ดแวร์ Android ในไฟล์ Manifest ของคุณ

android:hardwareAccelerated="false"

2
มันใช้งานได้ แต่ไม่ใช่ทางออกที่ดีเลย !! หยุดทุกอนิเมชั่นและสิ่งกราฟิก
Mohsen

ฉันมีปัญหาเดียวกัน แต่ไม่ได้ผลจากด้านข้างของฉันฉันใช้ google map ในส่วนและเมื่อฉันเปิดแอปพลิเคชันมันก็เกิดข้อผิดพลาดสัญญาณร้ายแรง 11 (SIGSEGV) รหัส 1 ความผิด addr 0x3f000000 ใน tid 16591 (FinalizerDaemon) ฉันพยายามแล้ว เกือบทุกวัน แต่ไม่พบทางออกที่เหมาะสมสำหรับนี้มันทำงานเพียงไม่กี่ครั้งแล้วมันจะช่วยให้เกิดข้อผิดพลาด
นาวิน

11

ฉันพบข้อผิดพลาดนี้เมื่อพยายามเข้าถึง 'canvas' นอก 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);

สิ่งที่แก้ไขปัญหาสำหรับฉันคือการลดขนาดของบิตแมป (> 1,000px สูงถึง 700px)


เพียงใช้แทนBitmapOptions.inSampleSize
FindOut_Quran

4

ฉันได้พบกับ SIGSEGV บน Android 4.4.4 (Nexuses, Samsungs) และปรากฎว่ามีข้อผิดพลาดร้ายแรงในการแยกวิเคราะห์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 มันถูกจัดการสำเร็จด้วยลอง / จับ


3

ผมประสบปัญหาขณะนี้ที่ผ่านมาหลังจากที่ย้ายจากไปandroid.supportandroidx

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

ขอบคุณ


โซลูชันของคุณใช้งานได้ แต่อาจเป็นปัญหาสำคัญเนื่องจาก Play Store ได้รับคำสั่งให้ตั้งค่า targetSdkversion เป็น> = 26 สิงหาคมที่ 1 เป็นต้นไป
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 Profiler ใน Android Studio ให้คลิกที่ "Android Profiler" และ "end session"

กระแทกแดกดันมันก็ทำให้เกิดปัญหาประสิทธิภาพการทำงานที่รุนแรงในการสมัคร


1

เพิ่มสองบรรทัดเหล่านี้ใน build.gradle ของคุณในส่วน android:

android{
    compileOptions {
            sourceCompatibility 1.8
            targetCompatibility 1.8
        }
}

5
ในขณะที่รหัสนี้อาจให้คำตอบสำหรับคำถาม แต่ก็ควรเพิ่มบริบทว่าทำไมมันถึงทำงานอย่างไร สิ่งนี้สามารถช่วยผู้ใช้ในอนาคตเรียนรู้และนำความรู้นั้นไปใช้กับรหัสของตนเอง คุณมีแนวโน้มที่จะได้รับการตอบรับเชิงบวกจากผู้ใช้ในรูปแบบของ upvotes เมื่ออธิบายรหัส
borchvm

0

ตรวจสอบ JNI / รหัสพื้นเมืองของคุณ หนึ่งในการอ้างอิงของฉันเป็นโมฆะ แต่ไม่สม่ำเสมอดังนั้นจึงไม่ชัดเจนมาก


0

ตรวจสอบฟังก์ชันดั้งเดิมของคุณไม่ว่าจะส่งคืนอย่างถูกต้องหรือไม่หากไม่ได้รับคืนโปรดเพิ่มข้อความสั่งคืน


0

สำหรับฉันปัญหานั้นเกิดจากนักแสดงที่ไม่ดีระหว่างสองกิจกรรม ฉันเพิ่งย้ายวิธีการนี้จากกิจกรรม 1 ไปยังอีก 2 การทำเช่นนั้น refactor ออกจากตัวละครที่ชัดเจนนี้เหมือนเมื่อก่อน ดังนั้นแทนที่จะทำ

((Activity1) mainActivity).hideDialog();

ฉันควรจะทำ

((Activity2) mainActivity).hideDialog();

หมายเหตุ: แต่ข้อผิดพลาดนี้ไม่ได้เกิดขึ้นกับ android 8.0 ฉันยังไม่แน่ใจว่าทำไม

*** หวังว่ามันจะช่วย


0

ผมมีข้อผิดพลาดนี้ผิดส่วนเพราะปัญหาหน่วยความจำ ฉันstructมีหลายตัวแปรและอาร์เรย์มีอาร์เรย์ขนาด 1024 นี้

การลดขนาดเป็น 512 ข้อผิดพลาดได้หายไป

PS: นี่เป็นวิธีแก้ปัญหาและไม่ใช่วิธีแก้ปัญหา มีความจำเป็นต้องค้นหาขนาด struct และการจัดสรรหน่วยความจำแบบไดนามิก เป็นตัวเลือกที่ดีกว่า


ฉันมีปัญหาเดียวกัน แต่ใช้งานได้ในทางกลับกัน ฉันเก็บข้อมูลได้มากถึง 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        
        }
    });
 }

ฉันแก้ไขได้โดยลบ ViewTreeObserver จาก onDraw
muzamil

0

ฉันมีปัญหาเกี่ยวกับแพคเกจที่เพิ่มลงในแอพของฉัน (FancyShowCaseView) และทำให้เกิดปัญหานี้ในการ pre-lolipop แพ็คเกจนั้นเขียนด้วย kotlin และรหัสหลักของฉันเขียนด้วยภาษาจาวา ดังนั้นตอนนี้ฉันกำลังตรวจสอบเวอร์ชั่นใน 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, ชื่อ: GLThread 2137 >>> com.portable3d.okt.a3dmap1 <<< สัญญาณ 11 (SIGSEGV), รหัส 2 (SEGV_ACCERR), ความผิดเพิ่ม 0x7452f000

โทรศัพท์ 2 จาก 12 ข้อผิดพลาดกลับพบว่ามีปัญหาใน onDrawFrame () วัตถุบางอย่างไม่มีค่าฉันไม่รู้ว่าทำไมฉันเพิ่งตั้ง

if(gears==null) return;.


0

ฉันมีปัญหาเมื่อฉันสร้าง PDF โดยใช้ Android API ของ PDF และฉันบังเอิญใช้ Canvas.save () และ canvas.restore () หลังจากฉันปิดหน้า PDF

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.