it-swarm.dev

إشارة مميتة Android 11 (SIGSEGV) في 0x636f7d89 (الكود = 1). كيف يمكن تعقبها؟

لقد قرأت المنشورات الأخرى على تتبع أسباب الحصول على SIGSEGV في تطبيق Android. أخطط للبحث عن التطبيق الخاص بي بحثًا عن NullPointers المحتملة المتعلقة باستخدام Canvas ، لكن SIGSEGV يضع عنوان ذاكرة مختلف في كل مرة. بالإضافة إلى أنني شاهدت code=1 و code=2. إذا كان عنوان الذاكرة هو 0x00000000 ، فستكون لدي فكرة أنه NullPointer.

آخر واحد حصلت عليه هو code=2:

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

أي اقتراحات حول كيفية تتبع هذا إلى أسفل؟

لديّ مشتبه به ، لكنني لست مهتمًا بتجربته بعد. يستخدم تطبيقي واجهة برمجة تطبيقات OSMDroid للتعيين في وضع عدم الاتصال. تمثل فئة OverlayItem علامات/عقد على الخريطة. لدي خدمة تجمع البيانات عبر الشبكة لملء OverlayItem والتي يتم عرضها بعد ذلك على الخريطة. في محاولة لتبسيط تصميمي ، قمت بتوسيع OverlayItem إلى فئة NodeOverlayItem الخاصة بي ، والتي تتضمن بعض سمات الإضافة التي أستخدمها في نشاط UI وفي الخدمة. هذا أعطاني نقطة واحدة من المعلومات البند لواجهة المستخدم والخدمة. لقد استخدمت النوايا للبث إلى النشاط لتحديث خريطة واجهة المستخدم عندما يتغير شيء ما. يرتبط النشاط بالخدمة وهناك طريقة خدمة للحصول على قائمة NodeOverlayItem. أعتقد أنه قد يكون استخدام واجهة برمجة تطبيقات OSMDroid لـ OverlayItem ، ومعلومات تحديث العقدة الخاصة بالخدمة الخاصة بي في نفس الوقت. (مشكلة التزامن)

بينما أكتب هذا ، أعتقد أن هذه هي المشكلة حقًا. الصداع لا ينفصل عن Node و OverlayItem من NodeOverlayItem ، إن النشاط سيحتاج إلى بعض البيانات من Node ، التي تحتفظ بها الخدمة. بالإضافة إلى أنه عندما يتم إنشاء النشاط (onResume ، إلخ ...) ، ستحتاج كائنات OverlayItem إلى إعادة إنشائها من بيانات العقدة التي كانت الخدمة تحتفظ بها أثناء غياب النشاط. مثلا عند بدء تشغيل التطبيق ، تجمع الخدمة البيانات ، وتعرضها واجهة المستخدم ، وتذهب إلى الصفحة الرئيسية ، ثم تعود إلى التطبيق ، سيحتاج النشاط إلى سحب وإعادة إنشاء OverlayItem's من أحدث بيانات عقدة الخدمة.

أعلم أن هذه ليست أسئلة رائعة أو واضحة. يشبه كل أسئلتي 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  [email protected]+...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
176
garlicman

حسنا! أنا آسف حقًا لأولئك الذين أرسلوا بالفعل تعليقات وإجابات ، لكنني وجدت المشكلة. لا أعتقد أن هذا سيساعد الكثير من الأشخاص الآخرين الذين يحاولون تتبع SIGSEGV الشخصي الخاص بهم ، لكن لي (وكان الأمر صعبًا جدًا) كان مرتبطًا تمامًا بهذا:

https://code.google.com/p/Android/issues/detail؟id=8709

Libcrypto.so في النوع الخاص بي من التفريغ تملأني. أقوم بتجزئة حزمة بيانات MD5 عند محاولة تحديد ما إذا كنت قد شاهدت الحزمة بالفعل ، وتخطيها إذا كنت قد شاهدتها. اعتقدت في وقت ما أن هذه كانت مشكلة ترابط قبيحة تتعلق بتتبع تلك التجزئة ، ولكن اتضح أنها كانت فئة Java.security.MessageDigest! انها ليست آمنة الموضوع!

لقد بدلت بها مع UID كنت حشو في كل حزمة على أساس UUID الجهاز والطابع الزمني. لا مشاكل منذ ذلك الحين.

أعتقد أن الدرس الذي يمكنني نقله إلى أولئك الذين كانوا في وضعي هو ، حتى لو كنت تطبيق Java 100٪ ، انتبه إلى المكتبة الأصلية والرمز المدرج في تفريغ التعطل بحثًا عن أدلة. غوغلينغ لـ SIGSEGV + اسم lib. لذلك سوف يذهب أبعد بكثير من الكود غير المجدي = 1 ، إلخ ... بعد ذلك فكر في المكان الذي يمكن أن يلمس تطبيق جافا فيه الكود الأصلي ، حتى لو لم يكن شيء تفعله. لقد ارتكبت خطأً بافتراض وجود مشكلة في ترابط Service + UI حيث كان الرسم يرسم شيئًا لاغٍ ، (الحالة الأكثر شيوعًا التي قمت باستخدامها على Google SIGSEGV) وتجاهلت إمكانية وجود صلة كاملة بالرمز الذي كتبته والذي كان المتعلقة ليب. حتى في تفريغ التعطل. من الطبيعي أن تستخدم Java.security مكونًا أصليًا في libcrypto.so للسرعة ، لذلك بمجرد أن أعثر على I Googled for Android + SIGSEGV + libcrypto.so ووجدت المشكلة الموثقة. حظا سعيدا!

38
garlicman

أولاً ، احصل على تتبع مكدس علامة مميزة ، سيتم طباعته في كل مرة تعطل التطبيق الخاص بك. شيء من هذا القبيل:

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
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 مع المكتبات التي لا تحتوي على معلومات تصحيح الأخطاء فيها. قد يكون من المفيد محاولة اكتشاف أقرب نقطة إدخال للوظيفة إلى عنوان جهاز كمبيوتر معين (على سبيل المثال كما في مثال libc.so أعلاه).

144
Robin

كنت أتلقى هذا الخطأ عن طريق حفظ كائن في التفضيلات المشتركة كسلسلة محولة gson. سلسلة gson لم تكن جيدة ، لذا فإن استرداد العنصر وإلغاء تسلسله لم يكن يعمل بشكل صحيح. هذا يعني أن أي وصول لاحق إلى الكائن نتج عن هذا الخطأ. مخيف :)

32
Daniel Wilson

لقد حصلت أيضًا على هذا الخطأ عدة مرات وقمت بحلها. سيواجه هذا الخطأ في حالة إدارة الذاكرة في الجانب الأصلي.

يقوم التطبيق الخاص بك بالوصول إلى الذاكرة خارج مساحة العنوان الخاصة به. هذا على الأرجح وصول مؤشر غير صالح. SIGSEGV = خطأ تجزئة في الكود الأصلي. نظرًا لعدم حدوث ذلك في تعليمات Java البرمجية ، فلن ترى تتبع مكدس مع التفاصيل. ومع ذلك ، لا يزال بإمكانك رؤية بعض معلومات تتبع المكدس في السجل إذا نظرت حولي قليلاً بعد تعطل عملية التطبيق. لن يخبرك رقم السطر داخل الملف ، لكنه سيخبرك عن ملفات الكائنات والعناوين المستخدمة في سلسلة الاتصال. من هناك يمكنك في كثير من الأحيان معرفة أي منطقة من رمز هو إشكالية. يمكنك أيضًا إعداد اتصال gdb أصلي للعملية الهدف والقبض عليه في مصحح الأخطاء.

25
Vivek Bansal

واجهت اليوم مشكلة Fatal signal 11 (SIGSEGV), code 1, fault addr 0x8 in tid 18161 وأناضل لمدة نصف يوم لحل هذه المشكلة.

حاولت العديد من الأشياء مسح ذاكرة التخزين المؤقت وحذف ملف .gradle وجميع.

أخيرًا ، disable Instant Run والآن لا أتلقى هذه المشكلة مرة أخرى. الآن يعمل تطبيقي بعد تمكين التشغيل الفوري أيضًا. قد تكون مشكلة التشغيل الفوري ، جرب تعطيل وتعطيل التشغيل الفوري

من هذا الإجابة:

انتقل إلى إعدادات Android Studio أو التفضيلات (لنظام التشغيل Mac) -> الإنشاء والتنفيذ والنشر -> التشغيل الفوري.

ثم ألغ تحديد مربع الاختيار "تمكين التشغيل الفوري" في الأعلى.

13
Naveen Kumar 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

ممارسة سيئة للغاية: /

7
Prabs

حاول تعطيل تسريع أجهزة Android في بيانك.

Android:hardwareAccelerated="false"
7
BYISHIMO Audace

كنت أتلقى هذا الخطأ عند استخدام صورة نقطية مثل هذا:

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

ما حل المشكلة بالنسبة لي هو تقليل حجم الصورة النقطية (> 1000 بكسل إلى 700 بكسل).

5
David Walton

لقد واجهت SIGSEGV على Android 4.4.4 (Nexuses ، Samsungs) واتضح أن الخطأ القاتل كان في تحليل nullString باستخدام 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

4
Yazazzello

إذا كنت تستخدم مكتبة vitamio وحدث هذا الخطأ القاتل.

ثم تأكد من أن هدف مستوى المشروع في مشروعك يجب أن يكون أقل من 23.

شكر.

2
mehmoodnisar125

في حالتي ، كان سبب المشكلة هو Android Profiler. في Android Studio ، انقر فوق "Android Profiler" و "end session".

ومن المفارقات ، أنه كان يسبب مشاكل الأداء القصوى في التطبيق.

1
tomacco

لقد واجهت هذه المشكلة منذ لحظة ، بعد الانتقال من 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;

بعد ذلك اختفت جميع المشاكل.

0
Cililing

بالنسبة لي كانت هذه القضية بسبب يلقي سيئة بين نشاطين. لقد قمت مؤخرًا بنقل هذه الطريقة من النشاط 1 إلى آخر 2. بالقيام بذلك ، غادر ريفاكتور هذا الممثل الصريح كما كان من قبل. لذلك بدلا من القيام به

((Activity1) mainActivity).hideDialog();

كان من المفترض أن أفعل

((Activity2) mainActivity).hideDialog();

ملاحظة: لكن هذا الخطأ لم يحدث على Android 8.0 ، لست متأكدًا بعد من السبب.

*** آمل أن يساعد.

0
Gomez NL

تحقق من JNI/الكود الأصلي. كان أحد مراجعاتي باطلاً ، لكنه كان متقطعًا ، لذلك لم يكن واضحًا للغاية.

0
zMan

حصلت على هذا الخطأ عندما استخدمت ViewTreeObserver داخل 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        
        }
    });
 }
0
muzamil

تحقق من وظائفك الأصلية ، سواء كانت تُرجع بشكل صحيح أم لا ، وإذا لم يتم إرجاعها ، فيرجى إضافة عبارات الإرجاع.

0
Jeyanth

كان لدي هذا الخطأ خطأ تجزئة بسبب مشاكل الذاكرة . My struct لديها العديد من المتغيرات والصفائف ، وكان هذا صفيف حجم 1024.

تقليل الحجم إلى 512 ، ذهب الخطأ.

ملاحظة: هذا حل بديل وليس حلاً. من الضروري إيجاد حجم البنية و تخصيص الذاكرة الديناميكية هو خيار أفضل.

0
Shachi